☆ベルトアクション作成 Beats of rageスレッド☆ (656レス)
☆ベルトアクション作成 Beats of rageスレッド☆ http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
59: 名前は開発中のものです。 [sage] 2021/03/17(水) 00:14:15.58 ID:qqhuc2mx なんだか色々偉そうに書き込んでますが、私は他人の作ったMODに ぼくのかんがえたさいきょうのって感じで 無限などから拝借ゲフゴフしたプレイヤーキャラを登場させて悦に入る事しかできません。 まったくもってOpenBoRの仕様を理解しているわけではありません。 上の方のGuardPointsについてもAttaker側にGuardCostが必要だったり各コマンド実際には さまざまな制限があります。 ですが、まああ、とりあえず弄って遊んでみましょう、時に新しいコマンドの使い方発見や 万が一MODなんか出来ちゃったら嬉しくない?というのが、私のやりたいことです。 スクリプトなんかについても他人のを勝手にコピペして動いた!ヤッター!程度のものです。 私が書き込んだのを信用してエラー落ち頻発で悶絶しても悪しからずでお願いいたします。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/59
60: 名前は開発中のものです。 [sage] 2021/03/17(水) 01:27:39.23 ID:qqhuc2mx 頼みの綱 DCマニュアルには 操作ボタンの中で Accepted action inputs are: A: Attack button A2: Attack button2 A3: Attack button3 A4: Attack button4 J: Jump button S: Special attack button K: Alternate special attack button とありますが、 この一番下のKボタンてどこなんだろ? http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/60
61: 名前は開発中のものです。 [sage] 2021/03/17(水) 01:36:13.25 ID:qqhuc2mx すぐ下にBlockのKだからSpecialと一緒、BはBackで使ってるし、 コマンド指定で混乱しないようにモッダーさんが自分で選んで使ってね 的なことが書いてありました。 ググル先生やディプル先生がいなかったら一生判らないですよ。 座標指定についてもXZA(Y)だったりXA(Y)Zだったり 微妙な違いがあって、悶絶案件は尽きないですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/61
62: 名前は開発中のものです。 [sage] 2021/03/19(金) 02:35:44.16 ID:hdeOB3k/ Palette none 私にとって結構重要なコマンド Open BoRでは基本システムで用意されたパレット(絵の具のパレットと同じような意味)を 使ってFrameで指定された画像が表示されるのですが、ご存知の通り画像にも色々な種類があって、 常に共通のパレットで画像が描かれると不都合(肌色が緑とか)が出てしまう訳です。 そこでPaletteコマンドを使い、専用のパレットを指定して画像を表示することになりますが、 結構面倒だったのが、モデルのヘッダーでPalette noneを宣言することによって、 次の最初のFrameのパレットを基準として、以降のFrameも描かれることになります。 他のEntityや多彩なFlash(ヒット演出)を使うとき便利です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/62
63: 名前は開発中のものです。 [sage] 2021/03/20(土) 01:30:17.59 ID:nx9KiXPx com A2 freespecial 普通は上のように設定する事で A2を押すと Freespecialが発動します。 anim walk cancel 0 99 0 A2 freespecial2 loop 1 delay 6 frame data/chars/test/test.gif このように Anim WalkにCancel(3つ目の数値が0なのでA2押せばいつでも)を仕込む事で Walkはレバーを入れている方向に歩くというAnimなので、 Comで設定してなくても実質 レバー入れA2 が成立し、 Freespacial2に処理が移行します。 Anim Runに入れれば レバーx2 A2が実質成立しますし、 Run Attackとの2択みたいなことも簡単にできますね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/63
64: 名前は開発中のものです。 [sage] 2021/03/20(土) 02:36:39.18 ID:nx9KiXPx grabin {type} {distance} つかみに関するもので格闘ゲームの吸い込みみたいな forcedirection {dir} 相手を無理やり自分とは反対側に向かせたりする damageonlanding {value} {type} 吹き飛ばし攻撃で地面にFallすると追加ダメージとか dropv {height} {speedx} {speedz} 吹き飛ばし攻撃の高さや距離を、別ラインに強制移動させたり nokill {bool} この攻撃ではHP1を残して生かしておく stun {int} 設定した時間、硬直させる(Freezeみたいな) seal {time} {energy} SpecialやFreespecialを設定した時間使用できなくする forcemap {map} {time} 設定した時間強制的にmapのパレット色にする noreflect {bi} Anim PainやAnim Fallに移行させずダメージを与える jugglecost {int} 打ち上げ攻撃からの追撃(おてだま)回数管理 OTG {bi} Anim Fallずみの相手にもAttackをヒットさせたり guardcost {int} Blockしてる相手のガード削り DOT {Index} {Time} {Mode} {Force} {Rate} 設定した時間徐々にダメージを与える staydown {rise} {riseattack} 強制的にダウンさせたままにする、起き上がり攻撃も遅らせる これらは、基本Attackコマンドと一緒に使う事になります。 BurnやFreezeなど元々特殊な効能のあるAttackコマンドの派生とは別に、 特殊な状況を作り出すのに便利です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/64
65: 名前は開発中のものです。 [sage] 2021/03/20(土) 02:43:58.72 ID:nx9KiXPx 例えば Attack 0 0 50 50 0 1 0 0 0 0 dropv 4 1 0 こんな感じで設定すると、 Attackはダメージ0だけど吹き飛ばし効果あり そしてDropvにより 吹き飛ばしの効果に上昇4横方向1奥行き0がプラスされます いわゆる おてだま するとき便利ということになります http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/65
66: 名前は開発中のものです。 [sage] 2021/03/21(日) 02:32:40.10 ID:xsxh/Aen 悶絶案件 Anim ChargeAttack(一定時間攻撃ボタンを押して、離すと発動)のタメ時間を設定する ChargeTime これは、Anim ChargeAttackの中に記述しないと(例えばヘッダーとか) 落ちます、エラーログに原因が出力されずに。 マニュアルをちゃんと読めば何処で宣言すべきか書いてはあるんですが、 他のコマンドでは間違った場所でも特にエラーも出ず、無視されることが多いのに、 上のようにエラー出力せず無言落ちするものも一部ではあるので、油断できません。 ChargeAttack自体使い辛い(特にボタンを押してタメてるとか表示されない)ので、 滅多に使わないんですけどね、専用FXの設定とかあれば良いのですが。 逆にそういうのがエラー原因だとなかなか特定できなくて悶絶。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/66
67: 名前は開発中のものです。 [sage] 2021/03/30(火) 01:38:56.46 ID:1gbSxSh3 Anim Throw なにげに Anim Grabからの派生だと思ってしまうかもしれませんが 単体(Anim Grabが無くても)で使用可能です。 Entityのヘッダーなどで設定(宣言)した GrabDistanceの距離に近づくと勝手に投げます。 ダメージもThrowDamegeで設定できます。 手数が増えますね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/67
68: 名前は開発中のものです。 [sage] 2021/03/30(火) 02:02:18.70 ID:1gbSxSh3 それならAnim Grabに攻撃コマンドを設定したら? Anim Grabの最後のFrameで一旦停止して入力待ちになってしまいます。 なので、上の直接Throwは実際には手数少なくなります。 OpenBoR のシステム上、Anim Grabからの派生 GrabUp、 Grab Down、 GrabForward さらにそこからのAttack3や各Grabの2への合計6回分の攻撃が使えなくなるためです。 しかし、Anim Grabからの一時停止によるテンポの悪さは無くなるので、 いきなりThrowは、そこまで悪手でもないのかなと個人的には思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/68
69: 名前は開発中のものです。 [sage] 2021/03/30(火) 10:33:03.24 ID:1gbSxSh3 訂正 ThrowDamege X ThrowDamage O Grabに関して、6回分の攻撃? ThrowやAttack3(GrabAttackなどの3撃目)を出さなければ、 掴み抵抗など何も設定してない敵に、 2系(GrabUp2などの2系はGrabから3撃目のフィニッシュ攻撃)までAnimを用意してあると、 連打せずポチ・ポチとボタンを押す事で各方向2回ずつ攻撃できる(GrabUp・GrabDown・GrabForward分)ので 掴んだらやりたい放題になります。 ムゲンからのキャラ流用なんかだとモーションが余る事が多いので、 派生技が多くなるのは便利です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/69
70: 名前は開発中のものです。 [sage] 2021/04/05(月) 10:33:40.89 ID:JCfKgngn ロケットヴァイパーのシステムや敵をまるごと流用してるのに作りが雑なbriga de rua(英訳street fight) キャラクター作りに愛が無い感じで正直微妙な出来 スクリプトの内用を理解しつつ改変してるようなので それなりの技術力はありそうなのにゲームバランスやキャラの作り込みが 今一なんでなんとも勿体無い ただわかる範囲では3まで作られているんで力尽きてるようでもなさそう 作者さんは飽きっぽい方なのかな http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/70
71: 名前は開発中のものです。 [sage] 2021/04/06(火) 01:42:29.99 ID:XHHis+ii Anim Follow#に処理を飛ばせる Followanim#これは Grabの派生攻撃であっても記述すれば効果あるので anim grabdown delay 8 hitflash Flash2 hitfx data/sounds/beat4.wav frame data/chars/test/ga1.gif followcond 1 followanim 4 attack 92 114 28 39 13 1 1 0 10 frame data/chars/test/ga2.gif こんな感じで組み込み、Follow4なんかには よく使う攻撃なんか設定しておけば、その他のAnimとも共用できるので 便利に使えます。 一回しか使わないなら、そのまま記述しても良いのですけどね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/71
72: 名前は開発中のものです。 [sage] 2021/04/08(木) 01:35:22.90 ID:91QCSGqP いろいろなMODを楽しんでいると、いつものメニュー画面とは違ったものに出会う事もあるかと思います。 基本OpenBoRではDATAフォルダの中を読み込んで、各種メニューやセレクトシーンなどに移行するのですが (level.txtだったりBGSフォルダの中だったり)。 DATAフォルダ直下にScript.txtが用意してあって中に、alwaysupdate 1などと記述してある場合 DATA/SCRIPTSフォルダ内にある Updated.cが優先して読み込まれ中に記述されてるスクリプトが実行されます。 MOD内で普遍的に使用されるスクリプトもここで定義されている事が多いので、 まずはここを探してみるのも良いかもしれません。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/72
73: 名前は開発中のものです。 [sage] 2021/04/08(木) 02:02:29.42 ID:91QCSGqP 訂正 level.txt → levels.txt updated.c に関しては update.c(公式ではこっち)ですが、どちらも優先して読み込まれるようです。 こちらのスクリプトに記述するメリットは、オープニングメニューを派手にしたり、 その場でゲーム難易度などを変更可能にしたり、キャラにレベルアップの要素を仕込むときや 拡大縮小、ゲームの演出上の一時停止を組み込んだりなど、基本システムへの介入を可能にする事でしょうか。 各キャラ(Entity)に一つずつスクリプトを記述する手間が省ける(setglobalvarなどで変数を渡すだけで色々処理できる) ような感じでしょうか。可能性は無限大になりますが、作る側に立つと脳天炸裂案件ですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/73
74: 名前は開発中のものです。 [sage] 2021/04/09(金) 17:18:04.09 ID:ncGtWkZW 開発中断か別なプロジェクト名に変わったのかも知れない Demon Sluga 思い切りスクリプト使って 拡大縮小、キャラクターを飛ばしたり奥や手前から敵が出現したり、誘導弾を弾き返したり 全盛期のアーケードゲーム風に作られてます 手に入るヴァージョンによってかも知れませんが海外の環境依存文字を使っているため 一部手直ししないとステージ1すら始まりません 見るべきところは models.txt data/misc data/misc/plane この辺りの pu・i.txtやpu・d.txt、pu・.gif、 それらを呼び出すplaneb2.txtなどに関連するファイルの手直しになります http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/74
75: 名前は開発中のものです。 [sage] 2021/04/09(金) 17:33:36.00 ID:ncGtWkZW 幼少の頃ゲームセンターで見た ノリマロが大活躍するRescue Command remake 敵はオンナサンばかり 面白いのは 掴まれた時のレバガチャ要素 抜け出せないとダメージはもちろん、別なイベントに移行したりと 有効に使われてます。 ゲームバランス的に敵の攻撃力が高いのであれなら defense all 0.1などモデルのヘッダーに記述して調整しましょう http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/75
76: 名前は開発中のものです。 [sage] 2021/04/10(土) 10:53:12.10 ID:36EPLB+j anim idle loop 1 delay 22 offset 23 102 bbox 13 5 22 100 drawmethod shiftx 0 frame data/chars/ciel/std1.gif drawmethod shiftx 0.02 frame data/chars/ciel/std1.gif drawmethod shiftx 0 frame data/chars/ciel/std1.gif drawmethod shiftx -0.02 frame data/chars/ciel/std1.gif アニーメーションさせるなんて絵描けないしって方は上のようにすると 一枚の元絵が左右にゆらゆらします。 drawmethod shiftx 0 数値の0は何もしない、 +−の数値を入れる事で数値分元絵が変形します。 他に Scale 大きさ Rotate 回転など様々なオプションあり。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/76
77: 名前は開発中のものです。 [sage] 2021/04/11(日) 00:13:20.60 ID:9LUoOlWn 以前にCancelで気軽にダブルジャンプと書きましたが anim jump loop 0 cancel 1 9 0 j freespecial3 landframe 3 offset 33 121 delay 16 bbox 19 5 31 73 frame data/chars/ciel/jmp1.gif frame data/chars/ciel/jmp2.gif frame data/chars/ciel/jmp3.gif delay 12 frame data/chars/ciel/jmp4.gif anim freespecial3 jumpframe 1 2 1 landframe 3 offset 33 121 delay 16 bbox 19 5 31 73 frame data/chars/ciel/jmp1.gif frame data/chars/ciel/jmp2.gif frame data/chars/ciel/jmp3.gif delay 12 frame data/chars/ciel/jmp4.gif 具体的にはこんな感じ http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/77
78: 名前は開発中のものです。 [sage] 2021/04/11(日) 00:19:43.51 ID:9LUoOlWn 上の例では見たとおりAnimの表題だけ変えて中身はほぼ一緒 anim jumpland loop 0 cancel 2 9 0 a freespecial2 delay 9 offset 33 72 frame data/chars/ciel/jmp5.gif frame data/chars/ciel/jmp5.gif frame data/chars/ciel/jmp5.gif これはジャンプの着地に攻撃(A)ボタンを押しておくとFreespecial2発動 Anim Landなんかに同じような記述しておけば、投げられ受身に 反応してFreespecialを発動なんてことも自由です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/78
79: 名前は開発中のものです。 [sage] 2021/04/11(日) 00:32:07.96 ID:9LUoOlWn cancel 2 9 0 a freespecial2 この記述だと Frameの2〜9の間に Attackコマンドの有無に関係なく(0) aボタンが押されたら FreeSpecial2を実行 え?例ではFrameコマンド3つしか無いけど? スタートフレーム(2)は大事ですが終了フレーム(9)に関しては多すぎても 特にエラーにはならないようです。 3フレームで入力なんてきついなー、Delay 9となっているのでFrameコマンド 1つにつき100分の9秒あるんで、格闘ゲームみたいに忙しくなることはありません。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/79
80: 名前は開発中のものです。 [sage] 2021/04/11(日) 00:41:33.67 ID:9LUoOlWn 訂正 3フレームで入力 → 1フレーム Frameの数え方なんですが、コマンドでフレーム数を数える場合 どうも1番目は 0と数えるようです。 なのでFrameコマンドは 0,1,2の3フレーム Cancel コマンドの記述は 2、9とありますが9フレーム目なんてないので Cancel コマンドの判定は 2フレーム(3番目)の一つのみになります。 このFrame数を数えるのが以外に面倒で、Cancelコマンドなどは特に問題にならないのですが LandFrameやThrowFrameなど間違えるとゲームが遅延したりすることもあるので注意です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/80
81: 名前は開発中のものです。 [sage] 2021/04/12(月) 01:07:22.51 ID:rapSeOc5 スクリプトを無理やりねじ込む didhitscript @script void main() { void self = getlocalvar("self"); void tar = getlocalvar("damagetaker"); void anims = getentityproperty(self,"animationid"); if(tar != NULL()) { if ( anims == openborconstant("ANI_ATTACK3") ||anims == openborconstant("ANI_FREESPECIAL5") ||anims == openborconstant("ANI_FREESPECIAL6") ||anims == openborconstant("ANI_FREESPECIAL7")) { tossentity(tar, 4, -1, 0); } } } @end_script 普通はSCRIPTSフォルダに〜.cな感じで入れておくのですが、 特定のEntityでしか使わない時には、 ヘッダーに上記のようにスクリプトを直接記述するという手もあります。 Didhitscript というのは、こちらの攻撃がヒットした際に参照されるScriptで この辺はOpenBoR側で規則が設定されているので、他人の使い方を参考にしたり DCマニュアルを読み込むしかないですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/81
82: 名前は開発中のものです。 [sage] 2021/04/12(月) 01:15:42.00 ID:rapSeOc5 上の例では、Void Main(){ }となっています。これは攻撃ヒット判定が行われるたび 毎回参照されるという意味になります。 C言語準拠の記述になるので、この辺の記述や演算子については、 適当にC言語 演算子などで検索してみてください。 で、内容としては、何らかのターゲットに特定(Attack3やFreespecial#)の攻撃がヒットしたら いつもより大きく吹き飛ばします(TossEntity)。 それぞれのAttackコマンドにDropvなど設定すれば同じ効果は得られますが、 このスクリプトを使う事でAnim単位で動作を変化させる事ができるのがメリット。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/82
83: 名前は開発中のものです。 [sage] 2021/04/13(火) 00:39:56.52 ID:r7OWv6Qx void EnemySpawn(float fX, float fY, float fZ) { void self = getlocalvar("self"); void vSpawn, vName; int iMHealth = getentityproperty(self,"maxhealth"); int iHealth = getentityproperty(self,"health"); int iDirection = getentityproperty(self, "direction"); int iR = rand()%10 + 10; if (iR >= 0 && iR < 4){ vName = "roxi"; } else if (iR >= 4 && iR < 8) { vName = "Yanyu"; } else if (iR >= 8 && iR < 12) { vName = "Sakura"; } else if (iR >= 12 && iR < 16) { vName = "Spiral"; } else { vName = "Heiderna"; } clearspawnentry(); setspawnentry("name", vName); if (iDirection == 0) { fX = -fX; } fX = fX +getentityproperty(self, "x"); fY = fY +getentityproperty(self, "a"); fZ = fZ +getentityproperty(self, "z"); vSpawn = spawn(); changeentityproperty(vSpawn, "position", fX, fZ, fY); changeentityproperty(vSpawn, "maxhealth", iMHealth); changeentityproperty(vSpawn, "health", iHealth); changeentityproperty(vSpawn, "direction", iDirection); } http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/83
84: 名前は開発中のものです。 [sage] 2021/04/13(火) 00:46:02.19 ID:r7OWv6Qx 上のスクリプトは、vName="Spiral"や"Sakura"など5種類の敵(Entity)を ランダムに出現させるものです。 changeentityproperty(vSpawn, "maxhealth", iMHealth); 最大HP changeentityproperty(vSpawn, "health", iHealth); 現在HP changeentityproperty(vSpawn, "direction", iDirection); 向き この辺は好みでランダム(rand()%200+ 50)とか設定しても良いでしょう。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/84
85: 名前は開発中のものです。 [sage] 2021/04/13(火) 00:50:45.59 ID:r7OWv6Qx name REnemy type Enemy health 100 nomove 1 1 nodrop 2 lifespan 1 defense all 1.0 offense all 1.0 animationscript data/scripts/REnemy.c load roxy load Yanyu load Heiderna load Sakura load Spiral anim spawn delay 10 offset 1 1 frame data/chars/misc/empty.gif @cmd EnemySpawn 0 0 0 frame data/chars/misc/empty.gif anim idle delay 100 offset 1 1 frame data/chars/misc/empty.gif これをMODELS.TXTにEntityとして設定します。 spawn REnemy alias Island_Guard map 1 coords 500 270 at 3200 そして好きなLevelのテキスト内に上のように記述すれば、そのポイント到達するたび 設定したランダムな敵(Entity)が出現するわけです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/85
86: 名前は開発中のものです。 [sage] 2021/04/13(火) 00:57:10.12 ID:r7OWv6Qx ステージを作ってるとどうしても内容を覚えてしまったりで、 だんだんテストプレイも飽きてきますので、ちょっとした気分転換になるかな? 敵を増やしたとき、スクリプト側とモデル側を少し書き換えるだけで登場させられるので 少しだけ手間が減らせるかなと思います。 もちろんEntityでさえあれば良いので、登場させるのはNPCだってITEMだって良いわけです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/86
87: 名前は開発中のものです。 [sage] 2021/04/13(火) 01:17:53.40 ID:r7OWv6Qx @cmd EnemySpawn 0 0 0 frame data/chars/misc/empty.gif この部分を @cmd EnemySpawn 0 0 0 @cmd EnemySpawn 40 0 0 @cmd EnemySpawn 80 0 0 frame data/chars/misc/empty.gif なんてすれば、敵が3人ずつ登場します。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/87
88: 名前は開発中のものです。 [sage] 2021/04/13(火) 01:36:45.64 ID:r7OWv6Qx Anim Blockを設定してしまうと、Special用のボタンを押すたびAnim Blockが実行されてしまい Specialは標準攻撃(A)とジャンプ(J)の同時押しで発動ということになります。 Anim Blockに攻撃モーションを設定したり、Anim BlockPainに攻撃を設定したりすれば 攻撃にもカウンターにも使えるので、想像力次第でいかようにも使えるのですが。 OpenBoR側でもともと設定された機能としてSpecialだと攻撃を受けたり、掴み攻撃を受けたり そんなときも1ボタンでSpecial発動できるメリットもあるわけです。 そんなとき意外と忘れられがちなSpecial2(レバー入れスペシャル)にガードポーズを組み込み FollowAnim#などで反撃モーションなど入れておけば、1ボタンでスペシャルの利便性を残しつつ ガードも可能になります。もっと忘れられがちなのがジャンプ中にSpecialのJumpSpecial もともとジャンプには垂直(JumpAttack)レバー上ジャンプ攻撃(Anim JumpAttack3) レバー下入れ(Anim JumpAttack2)前方ジャンプ攻撃(JumpForward、ForwardJumpと紛らわしい)に Anim RunJumpAttackと多彩な動作が可能なので、あまりJumpSpecialを使う機会は無いのですが。 ついでにコマンド設定 Com D F A Freespecial2などで、 Com B B A Freespecial なんてすると、レバー入力的には ← → Aという事になります。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/88
89: 名前は開発中のものです。 [sage] 2021/04/13(火) 18:04:23.86 ID:pM+4VIKL 一番出し辛い攻撃はRunSlideだと思う Run→→中に↓ジャンプ、自然な動作としては スライディングかなあ OpenBoRに最初から設定されているAnimは 大概過去に存在したゲームからヒントを得ているぽいね http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/89
90: 名前は開発中のものです。 [sage] 2021/04/14(水) 00:12:02.00 ID:Bl01iZfT Anim Pain @script int Crnd = (rand()%20)+10; if (frame==0 && Crnd>26) { changeentityproperty(getlocalvar("self"), "animation", openborconstant("ANI_PAIN4")); }else if (frame==0 && Crnd>18){ changeentityproperty(getlocalvar("self"), "animation", openborconstant("ANI_PAIN3")); } @end_script 例ではAnim Pain1(攻撃を受けた際のリアクション) 本来Attack2 なら Pain2…Attack4 → Pain4 など対応するAnimは固定されいてる(と思う)。 changeentityproperty(を使って強制的に別なAnim を実行させてみる。 まあ気分転換くらいなものですが、攻撃のリアクションを一つ一つ設定するのって コピペで良いとはいえ結構労力つかうんで。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/90
91: 名前は開発中のものです。 [sage] 2021/04/14(水) 00:20:22.41 ID:Bl01iZfT 上の例だと、もちろんAnim Pain3とPain4は設定しておかないと駄目です。 いろいろと検索していると、ユニティとかアンリアルとか目にしますが、 一つのゲームを完成させるとなると結構な労力になると思うのですが、 OpenBoRって基本ゲーム(BeatsOfRage)を土台にすれば、ともすれば いわゆるツクールより楽にアクションゲームを完成させることが出来ると思うんです。 やはり知名度なんでしょうか?他人のプログラムの改変であっても、一個のゲームまで いかなくてもキャラ一つでも弄ってみたら嵌ると思うんだけどなぁ スクリプトとか小難しく言っちゃうのが駄目なのかな http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/91
92: kt住江 ◆/VMXjFOJew [sage] 2021/04/16(金) 03:27:16.33 ID:kkjyE+N0 最近復活しました、kt住江です。 長らくスレから遠ざかってしまい、申し訳ありません。 現在新作としてダブルドラゴンのゲームを創意開発中です。 ↓開発中のダブルドラゴン用敵キャラ ttps://twitter.com/ktsuminoe/status/1379416846458253314/photo/1 そして、kt住江のゲーム保管庫が出来上がりましたので、 皆さま、僭越ながら宜しくお願いします。 ttps://amberusagi.theblog.me/posts/13123474 https://twitter.com/5chan_nel (5ch newer account) http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/92
93: 名前は開発中のものです。 [sage] 2021/04/18(日) 00:19:35.36 ID:FUfakm3o おつかれさまです。 早速、DLさせていただきました。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/93
94: 名前は開発中のものです。 [sage] 2021/04/18(日) 20:34:55.61 ID:FUfakm3o kt住江氏の作品はやはり流石の出来ですね。 アクションのバランスも良くて、強技出してればクリアなんて事は無く。 微妙なmodにありがちな敵に殴られる位ならスペシャル連打でいいや、なんて事が無いのが素晴らしい。 敵ごとにちゃんと対処しないと1クレジットクリア出来ない、絶妙なバランスで、とても楽しませて頂きました。 グラに関しても解像度が高ければ良いってものじゃ無いのがとても良く分かります。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/94
95: kt住江 ◆/VMXjFOJew [sage] 2021/04/19(月) 18:52:55.18 ID:bjKqc+m0 >>93さん DLしてくださり、ありがとうございます。 ごゆっくりと、ゲームをお楽しみください。 >>94さん ありがとうございます。そう言っていただけると、開発したかいがあります。 現在、ダブルドラゴンのゲームを開発中ですが、 2012年の『ギコタク』から続いて『カオスファイト』『コテハンファイト』 『アインバイン』『くにおくんLA』『巫女と吸血鬼』『削除隊』と7作も作ると、 流石によくある攻撃を仕掛けてくるザコ敵はともかく、 中ボス格の敵キャラのアイディアが狭まってきました。 毎回、どんな攻撃をしてくる敵キャラを出そうかというアイディアで悩んでいますので、 僭越ながら、敵キャラのアイディアを出していただけると大変助かります。 参考に開発中のダブルドラゴンの粗筋をご紹介します。 ダブルドラゴン4でリー兄弟がレネゲーズを壊滅させた数か月後・・・ 西海外の町、サンフランシスコに突如出来上がった格闘道場『フェニックス』の 稽古中を捉えた写真には、死んだはずの宿敵ウィリーの姿が映っていた。 ウィリーが蘇った真相を探るため、ダブルドラゴンはサンフランシスコへと乗り込む! http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/95
96: 名前は開発中のものです。 [sage] 2021/04/20(火) 22:57:09.31 ID:N5Bx9E2D @script { if (frame == 48) { void vEnt,self = getlocalvar("self"); int dx =100,dy=0,dz=0; int dir = getentityproperty(self, "direction"); int tgtdir = 0; if(dir==0) { dx = -dx; } setlocalvar("T"+self, findtarget(self)); void target = getlocalvar("T"+self); void TType = getentityproperty(target, "type"); tgtdir = getentityproperty(target, "direction"); if( getlocalvar("T"+self) != NULL()&&TType == openborconstant("TYPE_ENEMY")) { int Tx = getentityproperty(target, "x"); int Tz = getentityproperty(target, "z"); changeentityproperty(self, "position", Tx+dx, Tz+dz, dy); if (dir == 0) { if (Tx+dx > dx) { changeentityproperty(self, "direction", 1); } else { changeentityproperty(self, "direction", 0); } } else { if (Tx+dx > dx) { changeentityproperty(self, "direction", 0); } else { changeentityproperty(self, "direction", 1); } } } else { changeentityproperty(self, "animation", openborconstant("ANI_FAINT")); } } } @end_script http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/96
97: 名前は開発中のものです。 [sage] 2021/04/20(火) 23:12:55.15 ID:N5Bx9E2D 改行多杉かと思ったら通った。 プレイヤーの周囲にいるTYPE_ENEMYを探して、 いたらENEMYの後方100ドット(int dx=100)にテレポートする。 最初のFrame[==48というのがテレポートを実施したいFRAME数 ここをFrame==0にすれば、いきなり跳ぶ 下の方にANIM_FAINTというのがあるが、これは該当する敵が居なかったときに 移行するAnimで、別にANIM_IDLEなどでもよいし他の技でもいい。 まあ、Move 100とかしてFlipFrameで反対向きにしても、それっぽい事はできるんですけどね。 スクリプトだと結構いい感じにテレポートしてくれるんですが、 どこかに嵌ってる敵にも反応してしまいます(そのまま穴に墜落とか)。 画面の解像度数を拾って+−補正すれば良いのですが、とりあえず、 敵の座標を拾って、そこに移動(プレイヤーの座標を書き換える) 条件を満たさなければ別なAnimに移行する この辺が分かり易ければよいかなと思います。 分かり易く http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/97
98: 名前は開発中のものです。 [sage] 2021/04/21(水) 00:05:05.46 ID:fX+bN6sg X Frame[==48 O frame == 48 or frame==0 X ANIM_FAINT O ANI_FAINT X ANIM_IDLE O ANI_IDLE 間違えると落ちるとこばかりミスった、すいません。 まだ試してませんが、敵に仕込んで跳び先(TType)をTYPE_PLAYERにすれば 後ろにテレポートしてくるウザイ奴にできるかもしれません。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/98
99: 名前は開発中のものです。 [sage] 2021/04/21(水) 00:57:17.50 ID:fX+bN6sg >>95 見逃していました。いつも楽しい作品をありがとうございます。 DDシリーズとても楽しみです。 どの作品でも、敵キャラの動きに表情というか個性を感じられ 予備動作や「間」にとても愛情を感じる事ができ、 次はどんな技を使ってくるんだろう?と敵を倒さずウロウロしてみたりしてます。 さっさと倒して駆け抜けようとしても強技連打が通用せず意外と歯応えがあったりと バランスの妙に感心するばかりです。 私は、プレイヤーキャラにテレポートや分身をくっつけて激しく連打など プレイヤーの強化しか考えていないので、敵のちょうど良い塩梅の動作というのは 仰るとおり非常に難しいことだと想像できます。 クライムバスターズというMODの敵は多彩な動きをするんですが、 画面を斜めに横断するように攻撃してきたり、空中から遠距離攻撃連打してきたり プレイヤー側の対処する技がSpecial位しか無く、ずっと作業になりがちなちょっとアレなバランス 敵の無敵が長すぎるのもフラストレーションになるでしょうし、難しいですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/99
100: 名前は開発中のものです。 [sage] 2021/04/21(水) 01:02:42.96 ID:fX+bN6sg maxattacks {max} Default is 4. maxattacktypes {max} Sets the maximum number of attack types. PAIN,FALL, RISE, BLOCKPAIN and DEATH animations limit is also set together with this. {max} is number of available types. Default is 10 & maximum value is 99. maxfollows {max} Default is 4. maxfreespecials {max} Default is 8. maxidles {max} Default is 1. maxwalks {max} Default is 1. maxbackwalks {max} Default is 1. maxups {max} Default is 1. maxdowns {max} Default is 1. http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/100
101: 名前は開発中のものです。 [sage] 2021/04/21(水) 01:20:08.86 ID:fX+bN6sg 上の設定はMODELS.TXTに記述することで効果が得られます。 Entity(プレイヤーや敵など)で利用するコマンドの上限を設定します。 AttacksとFollows、Freespecialsは何も考えずに99とかにしておいて良いかと思います。 Attacksは単純に通常攻撃の手数に影響します、ただコンボは12までしか繋がらないようなので そこまで多くなくても良いかと思います。 FreespecialはCancelや@cmdの跳び先など使い勝手が良いので、ついつい増えがち。 FollowsもFreespecialと同じく FollowanimやFollowcondなどで良く使う事になるので キャラの方向性が落ち着くと山のように増えることが結構あります。 Idle以降はまあ趣味の範疇かなとも思いますが、@cmdの跳び先として便利なのは他と一緒。 たぶんですが、旧型のPCだとメモリの関係上初期設定が少なめになってるかと想像します。 現行のPCなら全部99でも良いのかなと思います。 私の環境で重めのMODでも1.7ギガ程度のメモリ使用量です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/101
102: 名前は開発中のものです。 [sage] 2021/04/21(水) 01:27:48.11 ID:fX+bN6sg 逆にMODELS.TXTで設定せずに Anim Pain20 などと記述してしまうと簡単に落ちます。 記述に間違いがないのに落ちるーと悶絶することもあります。 中には Logに何も出力されず、ただ落ちることもあります。 とりあえず99で良いかもしれません。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/102
103: kt住江 ◆/VMXjFOJew [sage] 2021/04/21(水) 19:33:21.95 ID:J0YwHZ/b >>99さん ありがとうございます。毎度敵の攻撃パターンには特に気合いを入れて作っていますので、 そう言っていただけると感無量です。 貴重な情報ありがとうございます。クライムバスターズMOD、後ほど見てきます。 わしのベルトアクション技術は、専らダブルドラゴンやベナアックルで勉強しました。 特にベアナックル2は敵の構成パターンに飽きさせない工夫があり、 例えば1面中ボスのジャックは、最初は単体で登場しますが、 次の3面では鞭女2体を連れて、7面ではデブ2体と等、 どの敵キャラも登場する度敵の構成パターンが変わるため、 同じ攻略法が通じない綿密な攻略が必要になるため、非常に参考になります。 くにおくんLAもベアナックル2を参考に、意図的にザコ敵の配置を施してあるんです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/103
104: 名前は開発中のものです。 [sage] 2021/04/23(金) 22:06:45.41 ID:uM7p5A0b 敵の種類をいくつか混ぜてバラっと設定してるMODが多い中(もちろん完成させて発表されてるだけで凄いです)。 くにおくん達はプレイしていて楽しい感覚が妙にクセになるんですよね、 もう一回プレイしようと思えるバランスは流石です。 オーソドックスな作りながら攻守のテンポがよいのは BeatemUp UltimateAllianceでしょうか、 大味ながらつい遊んでしまいます。 これBorpak.exeだけで解凍しようとするとエラーで解凍できないのですが(一部ファイルネーム長すぎ) OprnBoR StatsのFILE→Import PAKで解凍するとXtractフォルダに出力されます。 StreetRage Z3はプレイヤーがレベルアップするタイプ、後半ほぼ無敵になるのが気持ち良いです。 というかレベルアップ(スコアを稼ぐ)しないとボスの攻撃が理不尽系ですw RescueCommandも敵の掴み攻撃をレバガチャで抜けるというギミックに感心します。 Crime Bustersは現在としては古き良きとでも言うような感じです。 C社やS社のキャラを使ったものでは、RocketViper2が模範解答みたいな存在に感じます。 ファンタジー作品など他にもいろいろありますが、技術を駆使する方、 独自の世界観で作を重ねている方や、細かい事はいいから敵をぶっ飛ばすの楽しいでしょって作品、 なにより愛情をこめてMODを作ってらっしゃる方が多いように感じ、 それがOpenBoRの魅力の一つだと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/104
105: 名前は開発中のものです。 [sage] 2021/04/27(火) 00:57:48.13 ID:6v2tN2Sr 最近すごいなと感じたもの KoF beat em up plus 操作可能キャラ39、敵もムゲン系からだと思うのですが、よく集めたなーという感じ KoFという位なので基本 S社のキャラやアレンジしたものが多いです。 スクリプトは使わずOpenBoRの基本機能だけで作られた正攻法作品、中を覗いてみると、 move、movea、movez など駆使して動きを表現しています。 Jumpframeを何故か使っていないので、格闘ゲームによくあるジャンピングアッパーのような 動作も movea(垂直方向キャラ座標変更)でこなしていて、まさにパラパラ漫画要領で アニメーションを作っているのが素敵です。 Anim Runにも move が記述されていて、フレームが跳んだような見た目なので、 手直しをしてキャラ作りの練習台にさせてもらうのも良いかもしれません。 ルート分岐やエンディングまでしっかり作ってある力作(200MB超)。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/105
106: 名前は開発中のものです。 [sage] 2021/04/30(金) 18:02:08.17 ID:81YP+Cwz @script if(frame==3) { void self = getlocalvar("self"); int borx = openborvariant("xpos"); int sdir = getentityproperty(self,"direction"); int y = getentityproperty(self,"a"); int z = getentityproperty(self,"z"); if (sdir == 0){ borx = borx+480; } clearspawnentry(); setspawnentry("name", "estriker2"); void vSpawn=spawn(); changeentityproperty(vSpawn,"parent",self); changeentityproperty(vSpawn,"direction",sdir); changeentityproperty(vSpawn,"position",borx,z,y); } @end_script 画面の端からストライカーって感じのスクリプト http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/106
107: 名前は開発中のものです。 [sage] 2021/04/30(金) 18:09:21.33 ID:81YP+Cwz int borx = openborvariant("xpos"); changeentityproperty(vSpawn,"position",borx,z,y); int sdir = getentityproperty(self,"direction"); if (sdir == 0){ borx = borx+480; } 結局、肝心な部分は上の2つで、パネル(背景)の座標を取得して、 テスト環境は Video 1(480x272)モードなので、 プレイヤーが右(sdir=1)を向いていれば borx(ステージを進んだ距離、画面右端) 左向き(sdir=0)なら(+480画面左端)から助っ人が登場 単純な事なんですが、標準コマンドだけだと意外と面倒。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/107
108: 名前は開発中のものです。 [sage] 2021/04/30(金) 18:18:44.10 ID:81YP+Cwz 訂正 X(ステージを進んだ距離、画面右端) O 画面左端 X(+480画面左端) O 画面右端 @script if(frame==0){ void self=getlocalvar("self"); int sdir=getentityproperty(self,"direction"); setdrawmethod(self,1,256,384,1,0,0,0,0,0,0,0,0); drawstring(120, 120, 4, sdir, 1); if (sdir==0) { // changedrawmethod(self, "flipx", 0); changedrawmethod(self, "scaley", 256); changeentityproperty(self,"velocity",-1,0,0); } else { changeentityproperty(self,"velocity",1,0,0); } } @end_script 何故かストライカーがムーンウォークで登場してしまい悶絶。 その為Drawmethodを使って大きさを変えたりしてチェックする、デバッグ用スクリプト。 散々テストして結局、元の絵(gif)が左向き基準に描いてあっただけという 基本、OpenBoRのキャラ絵は右向き基準で描く事が多いので 左右向きが混在してしまうとOpenBoRは正しい処理しているのに こちらの脳がパンクするという事態に。 結構 Anim Turnなんかでもやっちゃうんですよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/108
109: 名前は開発中のものです。 [sage] 2021/04/30(金) 18:36:19.99 ID:81YP+Cwz anim attack3 cancel 11 20 0 D A freespecial4 cancel 11 20 0 U A freespecial5 delay 6 offset 37 78 frame data/chars/erika/363.gif 〜 〜 delay 4 drawmethod alpha 1 offset 42 105 frame data/chars/erika/373.gif frame data/chars/erika/373.gif 途中を端折ってますが、Cancelを組み込むとき、Drawmethodを使って 受付がスタートしたのを知らせる(alpha 1は半透明)。 Drawmethod fillcolor {int0-256}を使えば指定した色にできるようなことがマニュアルに書いてありますが まだイマイチ数値の指定方法がわかりません、パレット番号なのか、RGB指定みたいな事も書いてあるし またググル先生に聞きにいかなきゃです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/109
110: 名前は開発中のものです。 [sage] 2021/05/01(土) 23:32:33.70 ID:ce6GRoi2 なんとなーく調べたら、drawmethodハイフンfillcolor R G B 各々0-255のようですね drawmethod-fillcolor 0 255 255 で以降のframe コマンドのentityキャラが水色に塗り潰されて表示される筈ですが 現在、別な環境の為確認出来ずにいます。 drawmethodを上手く使いこなせれば、用意する絵的にかなり省力化できるんで マスターしたいところですが、今のトコ自分で絵を用意した方が早いですね http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/110
111: kt住江 ◆/VMXjFOJew [sage] 2021/05/04(火) 01:38:40.54 ID:UuKfeUKx 途中経過画像。開発は順調です。 ttps://twitter.com/ktsuminoe/status/1389177357286608908/photo/1 >>110さん いつもお疲れ様です。 アークシステムワークスの格闘ゲームによくある、 ストライカーまで実装可能とは、スクリプトは本当に凄いですねぇ。 https://twitter.com/5chan_nel (5ch newer account) http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/111
112: 名前は開発中のものです。 [sage] 2021/05/05(水) 23:54:41.45 ID:+/eMzjlh @cmd clearspawnentry();setspawnentry("name", "fire") @cmd bindentity spawn() getlocalvar("self") 0 1 10 1 0 1 便利なことなんでもう一度 たったこの2行だけで(MODELS.txtにfireというEnityの登録は必要ですが) 自分にエフェクトを”くっ付ける”ことが出来ます。 上の例では”fire”というEntityを自キャラに重ねて表示します。 謎の数値 0 1 10 1 0 1 はBindentity(バインド)の座標 くっ付けるキャラ(Entity)の X, Z, Y(A), 向き, 親のAnimと同期するか, キャラに被せるか背景にするか 難しいっぽいのが同期で、実は難しい事などなく、逆に効果的に使えるもので 自キャラ(親)とBindentityで付くEnitityに同じAnimが用意されていると、 親と同じAnimが実行されるので、親がAnim Attackなら子(Bind)もAnim Attackが実行されるというもの 「実体のある分身」が気軽に作れるのが想像できると思います。 しかし、getlocalvar("self")にgetlocalvar("self")はBindできないので、 分身は中身は一緒でも適当に名前を変えてMODELS.txtに登録しておかないとエラー落ちします。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/112
113: 名前は開発中のものです。 [sage] 2021/05/06(木) 02:16:30.98 ID:/KeaSO9B 訂正 setspawnentry("name", "fire") X setspawnentry "name" "fire" O @CMD でスクリプトやコマンドを直接呼び出す際は コマンドに最初から設定されている 括弧やカンマ、ピリオドを消して スペース記号(見えませんが)で区切って記述しないとエラーになることが多いです。 便利な反面、エラーがでるとかなりてこずります。 スクリプトを弄っていてエラー落ちが発生した場合、便利なのがLogフォルダの Scriptlog.txt ここに、どのようなスクリプトが実行されているか出力されるので エラー箇所を特定することになります。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/113
114: 名前は開発中のものです。 [sage] 2021/05/06(木) 02:24:21.35 ID:/KeaSO9B 括弧やカンマなど消すといっても getlocalvar("self") これは? スクリプトや@cmdを使う際にさらに別なコマンドを使うときは 基本どおりの記述でよいので @cmd bindentity spawn() getlocalvar("self") 0 1 10 1 0 1 この場合 spawn() と getlocalvar("self") は通常の記述 大元の bindentityについては括弧やカンマなど削除して記述します。 bindentity(spawn(), getlocalvar("self"), 0, 1, 10, 1, 0, 1); 本来あるべき姿は上のようになります。 OpenBoRのシステムに直接干渉するので、エラー(大概こちらの勘違い)のさいは 結構な手間になりますが、基本コマンド以上に色々弄れるのが痛し痒し。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/114
115: 名前は開発中のものです。 [sage] 2021/05/06(木) 02:47:41.51 ID:/KeaSO9B >>111さん すいません、あまりブラウザ更新しないので気付かずに居ました。 画像を拝見しました。 上からっぽくてすいませんが、 1枚の画像からも kt住江様の世界観や作風を大切になさる様が大いに感じられ ワクワクが止まりません。 いつも人様のムゲンキャラを弄って消費してばかりの私にとって、 いつかは自分もと参考&励みにさせて頂いています。 既存のものを改変するのってとても簡単なので、ついつい人様の作品に弄って楽しんでばかりで そのぬるま湯から抜け出せすにいます。 別なスレに「作品を完成させられない人」ってのもありますが、私はそのタイプ。 イメージを形に出来る方を本当に尊敬します。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/115
116: 名前は開発中のものです。 [sage] 2021/05/06(木) 23:33:55.01 ID:/KeaSO9B @script void self = getlocalvar("self"); int MP = getentityproperty(self,"mp"); setlocalvar("T"+self, findtarget(self)); if( frame == 0 && getlocalvar("T"+self) != NULL() ) { void target = getlocalvar("T"+self); void vAniID = getentityproperty(target,"animationID"); void TType = getentityproperty(target,"type"); int Boss = getentityproperty(target, "boss"); if(TType == openborconstant("TYPE_ENEMY") && Boss==0 && vAniID != openborconstant("ANI_DIE") && vAniID != openborconstant("ANI_SPAWN") && vAniID != openborconstant("ANI_RISE")) { changeentityproperty(self,"mp",MP-80); changeentityproperty(target, "parent", self); changeentityproperty(target, "type", openborconstant("TYPE_NPC")); changeentityproperty(target, "hostile", "TYPE_ENEMY"); changeentityproperty(target, "candamage", "TYPE_ENEMY"); changeentityproperty(target, "lifespancountdown", 2200); changedrawmethod(target, "reset", 1); setlocalvar("T"+self, NULL()); changedrawmethod(target,"tintmode",3); changedrawmethod(target,"tintcolor",rgbcolor(128, 255, 255)); } } @end_script http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/116
117: 名前は開発中のものです。 [sage] 2021/05/06(木) 23:43:25.09 ID:/KeaSO9B 上は、敵をNPCにしてしまうスクリプト anim runjumpattack followanim 9 followcond 1 attack 25 9 76 85 10 1 1 0 60 20 dropv 4 1 offset 31 91 frame data/chars/kunagi/399.gif こんな感じで、攻撃がヒットしたらFollow9に跳ぶようにして anim follow9 ## charm @script 〜 @end_script delay 22 offset 32 91 frame data/chars/kunagi/401.gif 跳び先のFollowにこんな感じでスクリプトを仕込みます。 簡単に説明すると、攻撃がヒットした相手の種別をNPCにして、敵対者をENEMYにしてるだけ そして、Lifespancountdown 2200(およそ100で0.5秒)11秒後に自動で消滅します。 ヒットした直後にスクリプトを即発動せず、わざわざFollowを挟んでいるのは 単なる趣味で、私の場合、このキャラには予備動作、発動、決めポーズの段階を踏ませているため べつに当たるを構わず片っ端からNPC化しても良いのですが、その辺は好みで。 後、これの問題点はステージ終端のラッシュなどで片っ端からNPC化するとステージクリアしてしまうことw http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/117
118: 名前は開発中のものです。 [sage] 2021/05/07(金) 00:13:33.09 ID:RxUWGAGV 上のスクリプトは元々、もっと複雑な仕様(使うにはアイテムを購入して消費)だったものを 簡略化したのでMPさえあれば連続使用できてしまう訳です。 さらには時間で元の敵に戻るということも出来るのですが、それにはMODELS.txtにて 専用 Entityを作成して、それを Bindentityしなければならないので、結構手間がかかります。 簡単に説明すると、Bindentityには必ずParent(親Entity)が必要、それを逆に利用して 透明なEntityをBindentityし、一定時間経ったら元のParent(Entity)の情報に上書きするというもの。 一瞬頭が混乱しますが、Bindentityの特性を理解すると「なるほどー!」となります もちろんオリジナルは私などでは無く、D&D Rise of Warduke2015から拝借しました。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/118
119: 名前は開発中のものです。 [sage] 2021/05/08(土) 00:13:01.25 ID:S2juEpeY 少し前に、data/scripts/フォルダ下に特定のファイルを入れておくと自動で読み込まれ 優先的に実行されると書きましたが、Loading.c もその一つ void main() { void s; void value = getlocalvar("value"); void max = getlocalvar("max"); if(max==1){ return; }else{} void percent=value*99/max; percent%=++percent; void dot=percent%3; if(dot==0) s="."; else if(dot==1) s=".."; else s="..."; drawstring(80,144,1,"Loading Please Wait Moment"+percent); drawstring(128,176,1,"Loading Complete Part"+s); drawbox(160,197,126,10,11,rgbcolor(200,0,0),0); drawbox(160,197,percent*126*0.01,10,15,rgbcolor(200,200,0),0); } こんな感じでテキストファイルを先のファイル名で保存しておけばOK いくつかMODをプレイしていると、最初にパーセントやメーターが上昇してゆく スクリーンを見た事があるかと思います。 data/BGS/ フォルダ下にLoading.gif など画像を入れておくと、同じく最初に自動で表示されます。 その他にも色々と自動で表示される画像などは多々ありますが、 その辺は各MODの data/BGS/ フォルダの中を見てみれば殆どの方が用意しているので参考になるかと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/119
120: 名前は開発中のものです。 [sage] 2021/05/08(土) 00:34:31.12 ID:S2juEpeY didhitscript @script void main() { void self = getlocalvar("self"); void opp = getlocalvar("damagetaker"); if(opp != NULL()) { if(getentityproperty(self, "animationID") == openborconstant("ANI_RUNATTACK")) { if (getentityproperty(opp,"a")==0) { changeentityproperty(opp, "nextanim", getentityproperty(opp, "nextanim")+360); changeentityproperty(opp, "nextthink", getentityproperty(opp, "nextthink")+360); setglobalvar(getlocalvar("self")+"_delayhit",1); } } } } @end_script 普通なら data/SCRIPTS/ フォルダに入れておいて都度参照するように指定するスクリプトを じかにEntityに仕込みAnim RUNATTACKがヒットしたら、その相手が3.5秒ほど硬直するというもの setglobalvar(getlocalvar("self")+"_delayhit",1);これは攻撃が当たったというフラグ http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/120
121: 名前は開発中のものです。 [sage] 2021/05/08(土) 00:41:03.92 ID:S2juEpeY anim runattack jumpframe 0 0 1 0 @script if (frame==13){ void self = getlocalvar("self"); if (getglobalvar(self +"_delayhit")) { setglobalvar(self +"_delayhit",NULL()); changeentityproperty(self, "animation", openborconstant("ANI_SPECIAL")); } } で、件のAnim RUNATTACKにて最終 frame(この例ではFrame==13)にて getglobalvar(self +"_delayhit")フラグが成立していると SPECIALに自動で移行するというもの 別にスクリプト使わなくてもAttackコマンドの後にSTUN 3と記述すれば 攻撃がヒットした相手は3秒ほど硬直するので、追撃は可能なのですが、 例の場合、直線にならんだ多数の敵を硬直させ、SPECIALで一網打尽に出来るという 演出重視の処理ができて、仕込んだ本人はご満悦というものです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/121
122: 名前は開発中のものです。 [sage] 2021/05/08(土) 01:01:56.73 ID:S2juEpeY jumpframe {Frame}{a}{x}{z}について もともとキャラクター(Entity)の座標を直接変化させるには Move(水平)Movea(垂直)Movez(奥行き)があり、 コマンド後に書かれたFrame 掛ける Moveの数値分座標が移動します(+なら進行方向 ーなら逆) Move 0コマンドが記述されるまでFrameの度に移動しますので注意。 Jumpframeコマンドは、その名の通りジャンプに関するコマンドなのですが 指定したFrame(最初は0で数える)からスタートして、{a}{x}{z}分 自動で移動します。{a}を3などにすれば通常通りジャンプするのですが、 {a}を0にし、{x}{z}に+−数値を入れる事で、ジャンプせずに移動も可能になります。 すべる様にに移動するので、Moveではガクガクしてしまう動作も滑らかにすることができます。 が、微妙な距離調整が必要になるので、そんな時便利なのが @cmd changeentityproperty getlocalvar("self") "velocity" 0 0 0 後ろのほうの数値が 0 0 0 とあるように全ての方向への慣性が0になります。 つまり動作STOP、数値の並びは x z a なので色々弄って遊ぶのも良いかと。 jumpframeだけでも結構いろいろ使えるので便利ではあります。 問題は、Anim中に複数記述しても有効なのは1つだけです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/122
123: 名前は開発中のものです。 [sage] 2021/05/09(日) 18:57:27.67 ID:uQy3TiTw OpenBoR stats 0.53 では mugen のairファイルが読み込めて便利と以前に書きましたが たまにファイルが灰色に表示され、選択出来なくなることがあります。 そんな時は無限用のファイターファクトリーでsffファイルを8bit用のデータでセーブしてやると OpenBoRstatsでも読み込めるようになることもあります。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/123
124: 名前は開発中のものです。 [sage] 2021/05/09(日) 23:30:14.44 ID:1QV0D9Lf >>118 ここで「## Charm」とありますが、「#」これ一つで以降に書かれたテキストはOpenBoRとしては無視する いわゆる「コメント(人間が読んだときの栞や説明)」となります。 で一つ「#」を使えば十分なのですが、大量に使って作成者が目印にしたりもします。 私は基本「##」2つ連続で使うのですが、一時的に使わないけど、また後で使うかもなコマンドの最初に # jumpframe 0 0 1 0 こんな感じに使う事で、一時的に無効にすることができます。 で、OpenBoR stats を使っていると、#を使っているとたまに行ごと削除されてしまうことが有り それを防ぐおまじないとして##2つ重ねています。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/124
125: 名前は開発中のものです。 [sage] 2021/05/09(日) 23:36:48.96 ID:1QV0D9Lf 「## Charm」は >>117 でした。 @Script 〜 @End_script ここで使うコメントは「//」となります。 @cmd これをコメントにするときはこんな感じ「# @cmd」 なので スクリプト的に内部動作を弄るときはC言語みたいに「//」だったよなと 「// @cmd 」とするとエラーになりますので注意です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/125
126: 名前は開発中のものです。 [] 2021/05/10(月) 00:00:27.11 ID:snJfXwVZ この様なサイトがあるのを初めて知りました。 レベルの高い内容ばかりで参考になります。 素人ながら「RescueCommand?」を色々いじって遊んでるのですが 試したいことがあるので教えていただきたいです。 敵キャラ同士が同じ座標に重なったり、すり抜けたりしないように 接触判定の条件?をいいじりたいのですが、どこをどのようにいじればよいか どなたかご教示いただけないでしょうか。 敵キャラ同士の攻撃は従来通り当たらないで、あくまで接触判定だけ変えたいです。 何卒よろしくお願いします。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/126
127: 名前は開発中のものです。 [sage] 2021/05/10(月) 00:05:01.81 ID:LcOGIvvu >>118 で説明しようとしてた Entityの内容がこれになります。 name Charm type none anim idle @script void self = getlocalvar("self"); int Parent = getentityvar(self,1); if(frame==1) { setdrawmethod(Parent, 1, 128, 128, 0, 0, 0, 6); changedrawmethod(Parent,"tintmode",3); changedrawmethod(Parent,"tintcolor",rgbcolor(128, 255, 255)); } if(frame==3) { setdrawmethod(Parent, 1, 256, 256, 0, 0, 0.5, 0); changedrawmethod(Parent,"flag",0); changeentityproperty(Parent,"hostile","TYPE_PLAYER","TYPE_NPC"); changeentityproperty(Parent,"type",openborconstant("TYPE_ENEMY")); changeentityproperty(Parent,"candamage","TYPE_PLAYER","TYPE_NPC"); } @end_script delay 1 frame data/chars/misc/empty.gif delay 220 frame data/chars/misc/empty.gif delay 1100 frame data/chars/misc/empty.gif delay 1 frame data/chars/misc/empty.gif http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/127
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
148: 名前は開発中のものです。 [sage] 2021/05/16(日) 01:04:20.46 ID:FoJl/otl vY += 0.5; vX -= 0.25; この部分で射出される弾の軌道を調整(例では4つの弾が斜め上にずれて打ち出される)しているので、 iCntを増やして、vX,vYを関数的に処理すれば綺麗な扇弾にすることもできますね。 ジャンプに関しての追記ですが、 anim jumpattack2 @script if(frame==8) { 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 4 -0.5 delay 6 offset 37 95 frame data/chars/kunagi/01.gif 〜 attack 0 0 30 40 8 1 1 0 10 20 offset 26 93 frame data/chars/kunagi/08.gif こんな感じにすることで、ジャンプ中レバー下攻撃(JumpAttack2)と入力すると 擬似2段ジャンプから一転、急角度(vx=3, vy=-4)で飛び込む攻撃になります。 changeentityproperty(getlocalvar("self"), "velocity", vx, vz, vy) とても便利ですね。 以前にも書き込みましたが、適当なところで "velocity", 0,0,0 にしないと 同一Anim内では動きっぱなしになってしまいますがw http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/148
149: 名前は開発中のものです。 [sage] 2021/05/16(日) 01:26:03.54 ID:FoJl/otl 余計な事ですが、 int vd=getentityproperty(getlocalvar("self"),"direction"); if(vd==0) { vx= -vx; } この部分は、一回しか使わないので、 if(!getentityproperty(getlocalvar("self"),"direction")) { vx= -vx; } これでも良さそうですね 度々、お世話になる”direction”これは、キャラ(Entity)の向きを表しています。 1ならEntityは右向き、0なら左向きとなります。これはプレイヤーでも敵でもアイテムでも一緒です。 if(〜) { 〜 } に関しては、もし(〜)内の条件が 1の時は{〜}内の処理を実行するというもの。 !getentityproperty 気付きにくいですが先頭の!マークがあると「〜ではない場合」の意味なので 向きが左(数値が0)ということは1では無い、一番上のvd==0と同じ意味になります。 分かりにくいので、他人に見せる場合は一番上のように記述するのが良いと思います。 なんかこんな風に記述することで「ちょっと分かった気分になれる」という利点があります。 最近覚えたので薀蓄たれたくなりました。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/149
150: 名前は開発中のものです。 [sage] 2021/05/16(日) 03:06:57.62 ID:FoJl/otl Loop 1からの脱出 AnimにLoop 1が設定されていると @cmd changeentityproperty getlocalvar("self") "animation" openborconstant("ANI_CHARGE") では、すぐに元のAnimに戻されてしまう。 そこで、executeanimationを使う事で完全に別なAnimに移行できると紹介しましたが、 executeanimationを実行させる条件付けはどうしよう? @script if(frame>0) { if(getplayerproperty(0, "newkeys")) { executeanimation(getlocalvar("self"), openborconstant("ANI_CHARGE"), 0); } } @end_script これは何らかのキー入力(方向キー、各ボタン)でexecuteanimationするもの。 他にPlayerkeys(0,0,"anybutton")もありますが、これはボタン(Aの攻撃など)のみ、 あと、標準コマンドのCancelを使ってFreeSpecial#に移行することも出来ますね。 これだけでは無くプレイヤーに関しては、プレイヤーの状況を取得する手段が結構いろいろと用意されています。 >>148 のAnim JumpAttack2内の Velocity制御について、 結局、強制的に動かしたい方向が決まっていれば以下のように Velocityを指定してやれば良いということになります。 @cmd changeentityproperty getlocalvar("self") "velocity" 3 0 -4 frame data/~ ~ @cmd changeentityproperty getlocalvar("self") "velocity" 0 0 0 frame data/~ ただ、直接指定すると”強制的に右向きを基本とした動作”になってしまうので、 if(vd==0) { vx= -vx; }こういった処理が必要な場合、@Scriptを利用することになります。 標準コマンドを利用するとAnim中に1回のみなどの制約が伴いますが、気軽に使えます。 一方、@cmdや@scriptを利用すると、様々な要素(省略できる部分もあります)について指定する必要があります。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/150
151: 名前は開発中のものです。 [sage] 2021/05/17(月) 00:52:19.70 ID:FAJnAZ+T @Script 〜 @Emd_Script ばかり紹介してるけれど、本来スクリプトは data/scripts/フォルダにまとめて そこから呼び出すようにした方が良いって公式にも書かれています。 でも完全にそうなってしまうと、得体の知れないブラックボックス的なものになってしまうかも という危惧があります(余計なお世話ですが)。 なので一旦、スクリプトってどんな働きをしてるの?という部分について 大雑把にこんな感じ(だと思う)だよ、と紹介できたらなというのが私の思いです。 標準コマンドは危険が無いように各種ステータスを自動で調整してくれますし、 標準コマンドですべて完結するのが一番だと考えています。 一方、私程度でも、いつもよりチョッとだけ違う動きが出来たりする懐の深さが OpenBoRの魅力かなと思います。 Entityのヘッダー(ファイルの上のほう)で設定する、SpeedやAntigravityなどの数値ですが 最初に設定する以外にもChangeEntityPropertyなどで自由に変更できる事は、これまでも紹介した通りです。 ヘッダーではSpeed 11のAntigravity 100のように設定していても、ChangeEntityPropertyなどで変更する時は 10分の1〜100分の1程度の数値にしないと、影響が大きすぎて激しく動いてしまう事も多々あります。 これはやってみないと判らないことが多いので、試行錯誤で悶絶ですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/151
152: 名前は開発中のものです。 [sage] 2021/05/17(月) 02:39:29.32 ID:FAJnAZ+T 同じ敵でもSpeedの数値をランダムに変えれば、多少は「団子状態」で迫りくる状況が変えられるか? という事で、いくつかのシチュエーションで試してみましたが、 プレイヤーが一人で、転んだり(Fall)などの状況になってしまうと 結局、団子になってしまいます。 敵同士のぶつかり(重なり)を避けるためにCanDamage を使うと、プレイヤーに対する攻撃が 同じ属性(TYPE_ENEMY)にもヒットしてしまうので、面白いけれど、全ての敵がそうだと少々面倒。 今後の課題として、EntityPropertyなどの参照で、”DamageTaker”や”Opponent”を取得できれば TYPE_ENEMYのAttackコマンドがTYPE_ENEMMYにヒットしないように(ヒットしても無視するように) することも出来るかな?と思う。 もう一つの対処法としてRand()%100などを使ってランダムな数値を出し、その数値によって Anim AttackやAnim Idle3のようなAnimに分岐させて、暇つぶしをさせることによって 重なりを防ぐという事も考えられます。 これは、他のいくつかのMODでも 敵の攻撃が成功したら、攻撃した敵に適当なAnim処理(攻撃が当たったヒャッホーみたいなモーション)をさせ プレイヤーがいわゆるハメ状態にならないように工夫しているものからヒントを得ています。 沢山のTYPE_ENEMYを用意して、同じ種類の敵が同時に出現することを防げば良いのですが。 それはそれで試行の回数が増えることになるのでバランスが難しいですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/152
153: 名前は開発中のものです。 [sage] 2021/05/19(水) 23:48:02.64 ID:upn5bY1m model commands: entitypushing {int}: if 1 entity pushing target on collision pushingfactor {float}: pushing factor on collision. Default: 1.0 openborscript functions: get_entity_collision_collection(void handle, int frame); get_entity_collision_instance(void handle, int index); get_entity_collision_property(void handle, int property); set_entity_collision_property(void handle, int property, value); openborscript: added "entitypushing", "pushingfactor" to entityproperty added "collidedentity" to entityproperty added "maxcollisions" to openborvariants Entity同士の衝突判定用?と思われるPropertyが Git hubの OpenBoR Plusで発見 Open BoRをデバグモードにすると緑やら青や赤の判定枠が表示することも出来ますが ただ単にそれ用のPropertyかもしれませんが、Collisionという衝突のみを判定するフラグは 存在しているのが伺えますので、Entity同士の衝突しているのかの判定について 何らかのデータを取得する手段はあるのかなと思います。 一方で、そもそもOpenBoR Plusって・・・という謎も多々ありますし とっくに実装されているとされている、Boomerangも動作確認できていないので 謎は深まるばかりです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/153
154: 名前は開発中のものです。 [sage] 2021/05/22(土) 03:25:15.70 ID:zSTPvS3W drawmethod scale # は機能する(#の数だけ拡大・縮小)のに drawmethod scalex # scaley # (横、縦の比率を指定して拡大・縮小)は機能しない OpenBoRのバージョンは3で固定のようですが、Buildでかなり動作にムラがあるようなので MODによって、全く動作しなかったり、特定のステージ・エリアに行くと落ちたりします。 作者さんが動作確認できているBuildを公表するなりしてくれていると助かるのですが、 私の勝手な分け方では、古いMOD(2018年以前)はBuild 3789〜4086あたり、 それ以降であれば最新のものでも、ほぼ動作するようです。 大分安定しているとはいえ、過去Buildでは問題なく動作したコマンドが 最新ではエラー扱いになったりするので、どんな物でもそうなんですが、エラー原因の特定は なかなか難しいですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/154
155: 名前は開発中のものです。 [sage] 2021/05/25(火) 01:13:32.55 ID:blxYdI/g 今ちょこちょこと弄っているのが、DungeonMAgic、過去にライトブリンガーとして アーケードゲームとして斜め見下ろしダンジョン攻略アクションRPG風とでも言うのでしょうか その登場キャラを例によってゴニョってOpenBoRに落とし込んだもの ただ公式サイトでも、動いたー止まったーと幾つか混乱が生じているようですが、 Build 4078であれば特に落ちる事無くエンディングまで行けるようです。 Build 6000番くらいまで来ると、EntityPropertyの関係や、AttackTypes、AImoveの関係で落ちるっぽい? 修正できるかな?と思いましたが、とにかくLoadされるModelが多過ぎなのと 作者さんが ;セミコロンをコメント扱いにしていたりと中々の曲者なので 素直にBuild 4078でプレイするのが吉かと http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/155
156: kt住江 ◆/VMXjFOJew [sage] 2021/05/25(火) 22:23:59.77 ID:GJ3pQcTQ こんばんは、kt住江です。 開発中のベルトアクションの開発率が50%に達しましたので、 途中経過の動画をご紹介します。 タイトル『ダブルドラゴン番外編』のOPです。 ttps://twitter.com/ktsuminoe/status/1397181051865161728 2か月後の完成を目指して、引き続き頑張りたいと思います。 僭越ながら宜しくお願いします。 https://twitter.com/5chan_nel (5ch newer account) http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/156
157: 名前は開発中のものです。 [sage] 2021/05/30(日) 02:14:00.16 ID:VOVq5aSh おろしや国辺りのサイトを見てると、痕跡は残っているのに、 Modそのものは結構消滅して行ってる感じが悲しい。 チャイさんヒスパさん系はフリーだったり、寄付募集したり、逞しい感じw 2D_Engineとしてかなり取っ付き易いのでもっと皆に弄って遊んで欲しいですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/157
158: 名前は開発中のものです。 [sage] 2021/06/07(月) 00:31:12.40 ID:kBKigIMN 分岐器で開発部門特製ソフトが発売されると大々的にCM打たれてますが これを機にエディター系のジャンルが流行ってくれればなーと個人的には思いますが カルネージハートは検索しても出てこないし、ヒューマンリソースマシーンとか 7ビリオンとか別に話題になってないみたいなんで、 おじ様達にちょっとヒットするくらいなんでしょうか OpenBoRのほうはジャンプと攻撃のみでシンプルに楽しむ、王道2Dを弄っております 足場の端っこに立った場合のAnimとか用意してあって、OpenBoRの奥深さにいまさらながら驚いています。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/158
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 498 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s