21/03/14 01:15:14.34 Xy6iR8cQ.net
訂正 HoldBlock 1 です。
あとこれを使うと Special技(Anim Special)を使うには A(攻撃ボタン)とJ(ジャンプ)を
同時押しする必要があります。
51:名前は開発中のものです。
21/03/14 01:32:53.13 Xy6iR8cQ.net
私の例文で AnimとかAttackとかアルファベットの大文字で記述している所
もし万が一参考なんかにする事があったら、できるだけ実際には anim や attackなど
全て小文字で記述して下さい。
基本どちらでも良いのですが、Open BoR Statsなどで読み込むとき
コマンドの頭文字を大文字で記述していると認識されないことがあります。
スクリプトなんかを記述するときは大文字小文字区別するんで
なかなかに面倒ですね。
52:名前は開発中のものです。
21/03/14 02:06:32.98 Xy6iR8cQ.net
counterrange {start} {end} {condition} {damage}
FollowAnim と一緒に使う事で少なくとも4種類の追加動作をすることが出来る。
以前は CounterFrame といって特定のFrameを指定する必要があったのが
{start} {end} とあるように範囲指定(0から99とか)できるようになったので、
CounterRange を記述したAnimが実行されている間にBboxに敵のAttackがヒットしたら
追加動作(Anim Follow1~4)に処理を飛ばす事ができるようになった。
followanim {value}ここに1~4の数値を指定して処理を飛ばす。
Blockもそうだったけど、Bboxを設定しておかない機能しない。
似たものに CounterAttack 1というのがあるが、これは自身のAttackコマンドのヒット判定が
敵の Attackで指定した範囲にも効果が及ぶというもの、いわゆる相打ちOKて感じ。
53:名前は開発中のものです。
21/03/15 23:34:43.67 bg70rxpE.net
anim jumpforward
delay 12
offset 34 104
frame data/chars/karin/167.gif
@cmd clearspawnentry();setspawnentry("name", "test")
@cmd bindentity spawn() getlocalvar("self") 0 1 0 1 0 1
offset 34 104
frame data/chars/karin/168.gif
Bindentityが少し成功の兆し、上のAnimはジャンプ中にレバー前入れ攻撃
Attackコマンドは記述してないので、今は格好だけですが
"test”という名前のEntity(MODELS.txtで設定したもの)を同時に表示するというもの。
それなら Custentity testでSpawnframe 2とかで十分でしょ?
一応それでも十分な効果は得られるんですが、
それだと親Entity(仮)168.gifが移動すると、子Entity(仮)"test"が置き去りにされて
なんか間抜けになってしまいます。
がBindentityを使えば親と一緒に子も動くのです。さらに機能として、向きの調整や
子Entityに複数にAnimを記述しておけば、親と同じAnimを実行させる事ができるのです。
54:名前は開発中のものです。
21/03/15 23:49:59.96 bg70rxpE.net
bindentity(entity, target, int x, int z, int a, int direction, int bindanimation, int sortid)
これが基本の書式ですが、貼り付けるEntity、貼り付けられるTarget、
TargetのOffsetに対してX,Z,Aドット調整して表示、Directionは向きを合わせるか反対にするか常に同じ向きか、
少し分かり辛いのがBindanimationで上の例では貼り付けるEntity(子)のほうのAnimのFrameが終わったら
自然と消去される。1だとTarget(親)と同じAnimだけ実行。
2ならTarget(親)のFrame数ともリンクさせる(面倒そうだけど、上手くできたら凄そう)。
3は機能無しで、4はTarget(親)のAnimと常にリンクして動くEntity(子)にAnim Attack1など
設定しておけば、Target(親)がAnim Attackを実行したとき一緒に実行される、
一緒に実行できるAnimが無いと消滅(KillEntityされる)。この4の機能が面白いですね。
55:名前は開発中のものです。
21/03/16 00:31:34.32 t+wd47Is.net
>>49 のBlockに関連したコマンドとして
guardpoints {int} intというのは整数という事です。ここで設定した数値分ガード(ブロック)できる。
guardrate {int} 上の数値の回復レート、mpのように設定した数値ずつ回復します。
そしてGuardPointがBlockするたび減ってゆき0になると下のAnimが実行される事になります。
Anim guardbreak
Block系は結構いろいろ設定が可能なようで、
thold {int}これを0で設定するとほぼ全ての攻撃をブロックしたり、
逆に10など設定しておけば11以上の攻撃はガード不能になります。
似たものにblockpain {int}があって、ここで設定した数値ぶんBlockすると
Anim Blockpainに処理が移行する。
敵やNPC用に防御率を設定するコマンドもあり。nopassiveblock {bi} biというのは 0か1
この辺の設定をしっかりすれば、防御の駆け引きも作れそうですね。
56:名前は開発中のものです。
21/03/16 17:28:14.56 FVENZVHs.net
project fgcというmodが格闘ゲームのように奥行きの無い2D作品です。しゃがみ動作もできるようになっているので2D研究用にも良いかもしれない。ver1.4辺りが手に入りやすい。
57:名前は開発中のものです。
21/03/16 23:36:37.91 t+wd47Is.net
FollowAnim 1
FollowCond 1
上の条件“同じAnim内のAttackがヒットするとAnim Follow1へ処理が飛ぶ”というものです。
@cmd changeentityproperty getlocalvar("self") "animation" openborconstant("ANI_FREESPECIAL1")
Frame data/chars/test/empty.gif
このコマンド文で強制的にFreeSpecial1に処理を飛ばすこともできます。
CounterRangeやCancelを使っても出来ることですが、力技で飛ばすのもたまには良いかも。
下の行のFrameはOpen BoRのお約束、基本的にコマンドには属するFrameが必要だから。
Attackコマンドの判定を消すには Attack 0という記述が必要です(もしくは別なAnimに移行する)が、これにも
Attack 0
Frame data/chars/test/empty.gif
といったように属するFrameが必要になります。
58:名前は開発中のものです。
21/03/16 23:42:20.95 t+wd47Is.net
スクリプト系は大変便利なコマンドが多いのですが無言で落ちたりするので注意も必要です。
あとお約束として@cmd 以降はアルファベットの大文字小文字を区別するのでさらに注意です。
59:名前は開発中のものです。
21/03/17 00:14:15.58 qqhuc2mx.net
なんだか色々偉そうに書き込んでますが、私は他人の作ったMODに
ぼくのかんがえたさいきょうのって感じで
無限などから拝借ゲフゴフしたプレイヤーキャラを登場させて悦に入る事しかできません。
まったくもってOpenBoRの仕様を理解しているわけではありません。
上の方のGuardPointsについてもAttaker側にGuardCostが必要だったり各コマンド実際には
さまざまな制限があります。
ですが、まああ、とりあえず弄って遊んでみましょう、時に新しいコマンドの使い方発見や
万が一MODなんか出来ちゃったら嬉しくない?というのが、私のやりたいことです。
スクリプトなんかについても他人のを勝手にコピペして動いた!ヤッター!程度のものです。
私が書き込んだのを信用してエラー落ち頻発で悶絶しても悪しからずでお願いいたします。
60:名前は開発中のものです。
21/03/17 01:27:39.23 qqhuc2mx.net
頼みの綱 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ボタンてどこなんだろ?
61:名前は開発中のものです。
21/03/17 01:36:13.25 qqhuc2mx.net
すぐ下にBlockのKだからSpecialと一緒、BはBackで使ってるし、
コマンド指定で混乱しないようにモッダーさんが自分で選んで使ってね
的なことが書いてありました。
ググル先生やディプル先生がいなかったら一生判らないですよ。
座標指定についてもXZA(Y)だったりXA(Y)Zだったり
微妙な違いがあって、悶絶案件は尽きないですね。
62:名前は開発中のものです。
21/03/19 02:35:44.16 hdeOB3k/.net
Palette none
私にとって結構重要なコマンド
Open BoRでは基本システムで用意されたパレット(絵の具のパレットと同じような意味)を
使ってFrameで指定された画像が表示されるのですが、ご存知の通り画像にも色々な種類があって、
常に共通のパレットで画像が描かれると不都合(肌色が緑とか)が出てしまう訳です。
そこでPaletteコマンドを使い、専用のパレットを指定して画像を表示することになりますが、
結構面倒だったのが、モデルのヘッダーでPalette noneを宣言することによって、
次の最初のFrameのパレットを基準として、以降のFrameも描かれることになります。
他のEntityや多彩なFlash(ヒット演出)を使うとき便利です。
63:名前は開発中のものです。
21/03/20 01:30:17.59 nx9KiXPx.net
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択みたいなことも簡単にできますね。
64:名前は開発中のものです。
21/03/20 02:36:39.18 nx9KiXPx.net
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コマンドの派生とは別に、
特殊な状況を作り出すのに便利です。
65:名前は開発中のものです。
21/03/20 02:43:58.72 nx9KiXPx.net
例えば
Attack 0 0 50 50 0 1 0 0 0 0
dropv 4 1 0
こんな感じで設定すると、
Attackはダメージ0だけど吹き飛ばし効果あり
そしてDropvにより
吹き飛ばしの効果に上昇4横方向1奥行き0がプラスされます
いわゆる おてだま するとき便利ということになります
66:名前は開発中のものです。
21/03/21 02:32:40.10 xsxh/Aen.net
悶絶案件
Anim ChargeAttack(一定時間攻撃ボタンを押して、離すと発動)のタメ時間を設定する
ChargeTime これは、Anim ChargeAttackの中に記述しないと(例えばヘッダーとか)
落ちます、エラーログに原因が出力されずに。
マニュアルをちゃんと読めば何処で宣言すべきか書いてはあるんですが、
他のコマンドでは間違った場所でも特にエラーも出ず、無視されることが多いのに、
上のようにエラー出力せず無言落ちするものも一部ではあるので、油断できません。
ChargeAttack自体使い辛い(特にボタンを押してタメてるとか表示されない)ので、
滅多に使わないんですけどね、専用FXの設定とかあれば良いのですが。
逆にそういうのがエラー原因だとなかなか特定できなくて悶絶。
67:名前は開発中のものです。
21/03/30 01:38:56.46 1gbSxSh3.net
Anim Throw
なにげに Anim Grabからの派生だと思ってしまうかもしれませんが
単体(Anim Grabが無くても)で使用可能です。
Entityのヘッダーなどで設定(宣言)した GrabDistanceの距離に近づくと勝手に投げます。
ダメージもThrowDamegeで設定できます。
手数が増えますね。
68:名前は開発中のものです。
21/03/30 02:02:18.70 1gbSxSh3.net
それならAnim Grabに攻撃コマンドを設定したら?
Anim Grabの最後のFrameで一旦停止して入力待ちになってしまいます。
なので、上の直接Throwは実際には手数少なくなります。
OpenBoR のシステム上、Anim Grabからの派生 GrabUp、 Grab Down、 GrabForward
さらにそこからのAttack3や各Grabの2への合計6回分の攻撃が使えなくなるためです。
しかし、Anim Grabからの一時停止によるテンポの悪さは無くなるので、
いきなりThrowは、そこまで悪手でもないのかなと個人的には思います。
69:名前は開発中のものです。
21/03/30 10:33:03.24 1gbSxSh3.net
訂正 ThrowDamege X ThrowDamage O
Grabに関して、6回分の攻撃?
ThrowやAttack3(GrabAttackなどの3撃目)を出さなければ、
掴み抵抗など何も設定してない敵に、
2系(GrabUp2などの2系はGrabから3撃目のフィニッシュ攻撃)までAnimを用意してあると、
連打せずポチ・ポチとボタンを押す事で各方向2回ずつ攻撃できる(GrabUp・GrabDown・GrabForward分)ので
掴んだらやりたい放題になります。
ムゲンからのキャラ流用なんかだとモーションが余る事が多いので、
派生技が多くなるのは便利です。
70:名前は開発中のものです。
21/04/05 10:33:40.89 JCfKgngn.net
ロケットヴァイパーのシステムや敵をまるごと流用してるのに作りが雑なbriga de rua(英訳street fight)
キャラクター作りに愛が無い感じで正直微妙な出来
スクリプトの内用を理解しつつ改変してるようなので
それなりの技術力はありそうなのにゲームバランスやキャラの作り込みが
今一なんでなんとも勿体無い
ただわかる範囲では3まで作られているんで力尽きてるようでもなさそう
作者さんは飽きっぽい方なのかな
71:名前は開発中のものです。
21/04/06 01:42:29.99 XHHis+ii.net
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とも共用できるので
便利に使えます。
一回しか使わないなら、そのまま記述しても良いのですけどね。
72:名前は開発中のものです。
21/04/08 01:35:22.90 91QCSGqP.net
いろいろなMODを楽しんでいると、いつものメニュー画面とは違ったものに出会う事もあるかと思います。
基本OpenBoRではDATAフォルダの中を読み込んで、各種メニューやセレクトシーンなどに移行するのですが
(level.txtだったりBGSフォルダの中だったり)。
DATAフォルダ直下にScript.txtが用意してあって中に、alwaysupdate 1などと記述してある場合
DATA/SCRIPTSフォルダ内にある Updated.cが優先して読み込まれ中に記述されてるスクリプトが実行されます。
MOD内で普遍的に使用されるスクリプトもここで定義されている事が多いので、
まずはここを探してみるのも良いかもしれません。
73:名前は開発中のものです。
21/04/08 02:02:29.42 91QCSGqP.net
訂正 level.txt → levels.txt
updated.c に関しては update.c(公式ではこっち)ですが、どちらも優先して読み込まれるようです。
こちらのスクリプトに記述するメリットは、オープニングメニューを派手にしたり、
その場でゲーム難易度などを変更可能にしたり、キャラにレベルアップの要素を仕込むときや
拡大縮小、ゲームの演出上の一時停止を組み込んだりなど、基本システムへの介入を可能にする事でしょうか。
各キャラ(Entity)に一つずつスクリプトを記述する手間が省ける(setglobalvarなどで変数を渡すだけで色々処理できる)
ような感じでしょうか。可能性は無限大になりますが、作る側に立つと脳天炸裂案件ですね。
74:名前は開発中のものです。
21/04/09 17:18:04.09 ncGtWkZW.net
開発中断か別なプロジェクト名に変わったのかも知れない
Demon Sluga 思い切りスクリプト使って
拡大縮小、キャラクターを飛ばしたり奥や手前から敵が出現したり、誘導弾を弾き返したり
全盛期のアーケードゲーム風に作られてます
手に入るヴァージョンによってかも知れませんが海外の環境依存文字を使っているため
一部手直ししないとステージ1すら始まりません
見るべきところは
models.txt
data/misc
data/misc/plane
この辺りの pu・i.txtやpu・d.txt、pu・.gif、
それらを呼び出すplaneb2.txtなどに関連するファイルの手直しになります
75:名前は開発中のものです。
21/04/09 17:33:36.00 ncGtWkZW.net
幼少の頃ゲームセンターで見た
ノリマロが大活躍するRescue Command remake
敵はオンナサンばかり
面白いのは 掴まれた時のレバガチャ要素
抜け出せないとダメージはもちろん、別なイベントに移行したりと
有効に使われてます。
ゲームバランス的に敵の攻撃力が高いのであれなら
defense all 0.1などモデルのヘッダーに記述して調整しましょう
76:名前は開発中のものです。
21/04/10 10:53:12.10 36EPLB+j.net
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 回転など様々なオプションあり。
77:名前は開発中のものです。
21/04/11 00:13:20.60 9LUoOlWn.net
以前に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
具体的にはこんな感じ
78:名前は開発中のものです。
21/04/11 00:19:43.51 9LUoOlWn.net
上の例では見たとおり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を発動なんてことも自由です。
79:名前は開発中のものです。
21/04/11 00:32:07.96 9LUoOlWn.net
cancel 2 9 0 a freespecial2
この記述だと Frameの2~9の間に Attackコマンドの有無に関係なく(0)
aボタンが押されたら FreeSpecial2を実行
え?例ではFrameコマンド3つしか無いけど?
スタートフレーム(2)は大事ですが終了フレーム(9)に関しては多すぎても
特にエラーにはならないようです。
3フレームで入力なんてきついなー、Delay 9となっているのでFrameコマンド
1つにつき100分の9秒あるんで、格闘ゲームみたいに忙しくなることはありません。
80:名前は開発中のものです。
21/04/11 00:41:33.67 9LUoOlWn.net
訂正 3フレームで入力 → 1フレーム
Frameの数え方なんですが、コマンドでフレーム数を数える場合
どうも1番目は 0と数えるようです。
なのでFrameコマンドは 0,1,2の3フレーム
Cancel コマンドの記述は 2、9とありますが9フレーム目なんてないので
Cancel コマンドの判定は 2フレーム(3番目)の一つのみになります。
このFrame数を数えるのが以外に面倒で、Cancelコマンドなどは特に問題にならないのですが
LandFrameやThrowFrameなど間違えるとゲームが遅延したりすることもあるので注意です。
81:名前は開発中のものです。
21/04/12 01:07:22.51 rapSeOc5.net
スクリプトを無理やりねじ込む
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マニュアルを読み込むしかないですね。
82:名前は開発中のものです。
21/04/12 01:15:42.00 rapSeOc5.net
上の例では、Void Main(){ }となっています。これは攻撃ヒット判定が行われるたび
毎回参照されるという意味になります。
C言語準拠の記述になるので、この辺の記述や演算子については、
適当にC言語 演算子などで検索してみてください。
で、内容としては、何らかのターゲットに特定(Attack3やFreespecial#)の攻撃がヒットしたら
いつもより大きく吹き飛ばします(TossEntity)。
それぞれのAttackコマンドにDropvなど設定すれば同じ効果は得られますが、
このスクリプトを使う事でAnim単位で動作を変化させる事ができるのがメリット。
83:名前は開発中のものです。
21/04/13 00:39:56.52 r7OWv6Qx.net
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);
}
84:名前は開発中のものです。
21/04/13 00:46:02.19 r7OWv6Qx.net
上のスクリプトは、vName="Spiral"や"Sakura"など5種類の敵(Entity)を
ランダムに出現させるものです。
changeentityproperty(vSpawn, "maxhealth", iMHealth); 最大HP
changeentityproperty(vSpawn, "health", iHealth); 現在HP
changeentityproperty(vSpawn, "direction", iDirection); 向き
この辺は好みでランダム(rand()%200+ 50)とか設定しても良いでしょう。
85:名前は開発中のものです。
21/04/13 00:50:45.59 r7OWv6Qx.net
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)が出現するわけです。
86:名前は開発中のものです。
21/04/13 00:57:10.12 r7OWv6Qx.net
ステージを作ってるとどうしても内容を覚えてしまったりで、
だんだんテストプレイも飽きてきますので、ちょっとした気分転換になるかな?
敵を増やしたとき、スクリプト側とモデル側を少し書き換えるだけで登場させられるので
少しだけ手間が減らせるかなと思います。
もちろんEntityでさえあれば良いので、登場させるのはNPCだってITEMだって良いわけです。
87:名前は開発中のものです。
21/04/13 01:17:53.40 r7OWv6Qx.net
@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人ずつ登場します。
88:名前は開発中のものです。
21/04/13 01:36:45.64 r7OWv6Qx.net
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という事になります。
89:名前は開発中のものです。
21/04/13 18:04:23.86 pM+4VIKL.net
一番出し辛い攻撃はRunSlideだと思う
Run→→中に↓ジャンプ、自然な動作としては
スライディングかなあ
OpenBoRに最初から設定されているAnimは
大概過去に存在したゲームからヒントを得ているぽいね
90:名前は開発中のものです。
21/04/14 00:12:02.00 Bl01iZfT.net
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 を実行させてみる。
まあ気分転換くらいなものですが、攻撃のリアクションを一つ一つ設定するのって
コピペで良いとはいえ結構労力つかうんで。
91:名前は開発中のものです。
21/04/14 00:20:22.41 Bl01iZfT.net
上の例だと、もちろんAnim Pain3とPain4は設定しておかないと駄目です。
いろいろと検索していると、ユニティとかアンリアルとか目にしますが、
一つのゲームを完成させるとなると結構な労力になると思うのですが、
OpenBoRって基本ゲーム(BeatsOfRage)を土台にすれば、ともすれば
いわゆるツクールより楽にアクションゲームを完成させることが出来ると思うんです。
やはり知名度なんでしょうか?他人のプログラムの改変であっても、一個のゲームまで
いかなくてもキャラ一つでも弄ってみたら嵌ると思うんだけどなぁ
スクリプトとか小難しく言っちゃうのが駄目なのかな
92:kt住江
21/04/16 03:27:16.33 kkjyE+N0.net
最近復活しました、kt住江です。
長らくスレから遠ざかってしまい、申し訳ありません。
現在新作としてダブルドラゴンのゲームを創意開発中です。
↓開発中のダブルドラゴン用敵キャラ
URLリンク(twitter.com)
そして、kt住江のゲーム保管庫が出来上がりましたので、
皆さま、僭越ながら宜しくお願いします。
URLリンク(amberusagi.theblog.me)
(deleted an unsolicited ad)
93:名前は開発中のものです。
21/04/18 00:19:35.36 FUfakm3o.net
おつかれさまです。
早速、DLさせていただきました。
94:名前は開発中のものです。
21/04/18 20:34:55.61 FUfakm3o.net
kt住江氏の作品はやはり流石の出来ですね。
アクションのバランスも良くて、強技出してればクリアなんて事は無く。
微妙なmodにありがちな敵に殴られる位ならスペシャル連打でいいや、なんて事が無いのが素晴らしい。
敵ごとにちゃんと対処しないと1クレジットクリア出来ない、絶妙なバランスで、とても楽しませて頂きました。
グラに関しても解像度が高ければ良いってものじゃ無いのがとても良く分かります。
95:kt住江
21/04/19 18:52:55.18 bjKqc+m0.net
>>93さん
DLしてくださり、ありがとうございます。
ごゆっくりと、ゲームをお楽しみください。
>>94さん
ありがとうございます。そう言っていただけると、開発したかいがあります。
現在、ダブルドラゴンのゲームを開発中ですが、
2012年の『ギコタク』から続いて『カオスファイト』『コテハンファイト』
『アインバイン』『くにおくんLA』『巫女と吸血鬼』『削除隊』と7作も作ると、
流石によくある攻撃を仕掛けてくるザコ敵はともかく、
中ボス格の敵キャラのアイディアが狭まってきました。
毎回、どんな攻撃をしてくる敵キャラを出そうかというアイディアで悩んでいますので、
僭越ながら、敵キャラのアイディアを出していただけると大変助かります。
参考に開発中のダブルドラゴンの粗筋をご紹介します。
ダブルドラゴン4でリー兄弟がレネゲーズを壊滅させた数か月後・・・
西海外の町、サンフランシスコに突如出来上がった格闘道場『フェニックス』の
稽古中を捉えた写真には、死んだはずの宿敵ウィリーの姿が映っていた。
ウィリーが蘇った真相を探るため、ダブルドラゴンはサンフランシスコへと乗り込む!
96:名前は開発中のものです。
21/04/20 22:57:09.31 N5Bx9E2D.net
@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
97:名前は開発中のものです。
21/04/20 23:12:55.15 N5Bx9E2D.net
改行多杉かと思ったら通った。
プレイヤーの周囲にいるTYPE_ENEMYを探して、
いたらENEMYの後方100ドット(int dx=100)にテレポートする。
最初のFrame[==48というのがテレポートを実施したいFRAME数
ここをFrame==0にすれば、いきなり跳ぶ
下の方にANIM_FAINTというのがあるが、これは該当する敵が居なかったときに
移行するAnimで、別にANIM_IDLEなどでもよいし他の技でもいい。
まあ、Move 100とかしてFlipFrameで反対向きにしても、それっぽい事はできるんですけどね。
スクリプトだと結構いい感じにテレポートしてくれるんですが、
どこかに嵌ってる敵にも反応してしまいます(そのまま穴に墜落とか)。
画面の解像度数を拾って+-補正すれば良いのですが、とりあえず、
敵の座標を拾って、そこに移動(プレイヤーの座標を書き換える)
条件を満たさなければ別なAnimに移行する
この辺が分かり易ければよいかなと思います。
分かり易く
98:名前は開発中のものです。
21/04/21 00:05:05.46 fX+bN6sg.net
X Frame[==48 O frame == 48 or frame==0
X ANIM_FAINT O ANI_FAINT
X ANIM_IDLE O ANI_IDLE
間違えると落ちるとこばかりミスった、すいません。
まだ試してませんが、敵に仕込んで跳び先(TType)をTYPE_PLAYERにすれば
後ろにテレポートしてくるウザイ奴にできるかもしれません。
99:名前は開発中のものです。
21/04/21 00:57:17.50 fX+bN6sg.net
>>95 見逃していました。いつも楽しい作品をありがとうございます。
DDシリーズとても楽しみです。
どの作品でも、敵キャラの動きに表情というか個性を感じられ
予備動作や「間」にとても愛情を感じる事ができ、
次はどんな技を使ってくるんだろう?と敵を倒さずウロウロしてみたりしてます。
さっさと倒して駆け抜けようとしても強技連打が通用せず意外と歯応えがあったりと
バランスの妙に感心するばかりです。
私は、プレイヤーキャラにテレポートや分身をくっつけて激しく連打など
プレイヤーの強化しか考えていないので、敵のちょうど良い塩梅の動作というのは
仰るとおり非常に難しいことだと想像できます。
クライムバスターズというMODの敵は多彩な動きをするんですが、
画面を斜めに横断するように攻撃してきたり、空中から遠距離攻撃連打してきたり
プレイヤー側の対処する技がSpecial位しか無く、ずっと作業になりがちなちょっとアレなバランス
敵の無敵が長すぎるのもフラストレーションになるでしょうし、難しいですね。
100:名前は開発中のものです。
21/04/21 01:02:42.96 fX+bN6sg.net
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.
101:名前は開発中のものです。
21/04/21 01:20:08.86 fX+bN6sg.net
上の設定はMODELS.TXTに記述することで効果が得られます。
Entity(プレイヤーや敵など)で利用するコマンドの上限を設定します。
AttacksとFollows、Freespecialsは何も考えずに99とかにしておいて良いかと思います。
Attacksは単純に通常攻撃の手数に影響します、ただコンボは12までしか繋がらないようなので
そこまで多くなくても良いかと思います。
FreespecialはCancelや@cmdの跳び先など使い勝手が良いので、ついつい増えがち。
FollowsもFreespecialと同じく FollowanimやFollowcondなどで良く使う事になるので
キャラの方向性が落ち着くと山のように増えることが結構あります。
Idle以降はまあ趣味の範疇かなとも思いますが、@cmdの跳び先として便利なのは他と一緒。
たぶんですが、旧型のPCだとメモリの関係上初期設定が少なめになってるかと想像します。
現行のPCなら全部99でも良いのかなと思います。
私の環境で重めのMODでも1.7ギガ程度のメモリ使用量です。
102:名前は開発中のものです。
21/04/21 01:27:48.11 fX+bN6sg.net
逆にMODELS.TXTで設定せずに
Anim Pain20 などと記述してしまうと簡単に落ちます。
記述に間違いがないのに落ちるーと悶絶することもあります。
中には Logに何も出力されず、ただ落ちることもあります。
とりあえず99で良いかもしれません。
103:kt住江
21/04/21 19:33:21.95 J0YwHZ/b.net
>>99さん
ありがとうございます。毎度敵の攻撃パターンには特に気合いを入れて作っていますので、
そう言っていただけると感無量です。
貴重な情報ありがとうございます。クライムバスターズMOD、後ほど見てきます。
わしのベルトアクション技術は、専らダブルドラゴンやベナアックルで勉強しました。
特にベアナックル2は敵の構成パターンに飽きさせない工夫があり、
例えば1面中ボスのジャックは、最初は単体で登場しますが、
次の3面では鞭女2体を連れて、7面ではデブ2体と等、
どの敵キャラも登場する度敵の構成パターンが変わるため、
同じ攻略法が通じない綿密な攻略が必要になるため、非常に参考になります。
くにおくんLAもベアナックル2を参考に、意図的にザコ敵の配置を施してあるんです。
104:名前は開発中のものです。
21/04/23 22:06:45.41 uM7p5A0b.net
敵の種類をいくつか混ぜてバラっと設定してるMODが多い中(もちろん完成させて発表されてるだけで凄いです)。
くにおくん達はプレイしていて楽しい感覚が妙にクセになるんですよね、
もう一回プレイしようと思えるバランスは流石です。
オーソドックスな作りながら攻守のテンポがよいのは BeatemUp UltimateAllianceでしょうか、
大味ながらつい遊んでしまいます。
これBorpak.exeだけで解凍しようとするとエラーで解凍できないのですが(一部ファイルネーム長すぎ)
OprnBoR StatsのFILE→Import PAKで解凍するとXtractフォルダに出力されます。
StreetRage Z3はプレイヤーがレベルアップするタイプ、後半ほぼ無敵になるのが気持ち良いです。
というかレベルアップ(スコアを稼ぐ)しないとボスの攻撃が理不尽系ですw
RescueCommandも敵の掴み攻撃をレバガチャで抜けるというギミックに感心します。
Crime Bustersは現在としては古き良きとでも言うような感じです。
C社やS社のキャラを使ったものでは、RocketViper2が模範解答みたいな存在に感じます。
ファンタジー作品など他にもいろいろありますが、技術を駆使する方、
独自の世界観で作を重ねている方や、細かい事はいいから敵をぶっ飛ばすの楽しいでしょって作品、
なにより愛情をこめてMODを作ってらっしゃる方が多いように感じ、
それがOpenBoRの魅力の一つだと思います。
105:名前は開発中のものです。
21/04/27 00:57:48.13 6v2tN2Sr.net
最近すごいなと感じたもの KoF beat em up plus
操作可能キャラ39、敵もムゲン系からだと思うのですが、よく集めたなーという感じ
KoFという位なので基本 S社のキャラやアレンジしたものが多いです。
スクリプトは使わずOpenBoRの基本機能だけで作られた正攻法作品、中を覗いてみると、
move、movea、movez など駆使して動きを表現しています。
Jumpframeを何故か使っていないので、格闘ゲームによくあるジャンピングアッパーのような
動作も movea(垂直方向キャラ座標変更)でこなしていて、まさにパラパラ漫画要領で
アニメーションを作っているのが素敵です。
Anim Runにも move が記述されていて、フレームが跳んだような見た目なので、
手直しをしてキャラ作りの練習台にさせてもらうのも良いかもしれません。
ルート分岐やエンディングまでしっかり作ってある力作(200MB超)。
106:名前は開発中のものです。
21/04/30 18:02:08.17 81YP+Cwz.net
@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
画面の端からストライカーって感じのスクリプト
107:名前は開発中のものです。
21/04/30 18:09:21.33 81YP+Cwz.net
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画面左端)から助っ人が登場
単純な事なんですが、標準コマンドだけだと意外と面倒。
108:名前は開発中のものです。
21/04/30 18:18:44.10 81YP+Cwz.net
訂正 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なんかでもやっちゃうんですよ。
109:名前は開発中のものです。
21/04/30 18:36:19.99 81YP+Cwz.net
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指定みたいな事も書いてあるし
またググル先生に聞きにいかなきゃです。
110:名前は開発中のものです。
21/05/01 23:32:33.70 ce6GRoi2.net
なんとなーく調べたら、drawmethodハイフンfillcolor R G B 各々0-255のようですね
drawmethod-fillcolor 0 255 255 で以降のframe コマンドのentityキャラが水色に塗り潰されて表示される筈ですが
現在、別な環境の為確認出来ずにいます。
drawmethodを上手く使いこなせれば、用意する絵的にかなり省力化できるんで
マスターしたいところですが、今のトコ自分で絵を用意した方が早いですね
111:kt住江
21/05/04 01:38:40.54 UuKfeUKx.net
途中経過画像。開発は順調です。
URLリンク(twitter.com)
>>110さん
いつもお疲れ様です。
アークシステムワークスの格闘ゲームによくある、
ストライカーまで実装可能とは、スクリプトは本当に凄いですねぇ。
(deleted an unsolicited ad)
112:名前は開発中のものです。
21/05/05 23:54:41.45 +/eMzjlh.net
@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に登録しておかないとエラー落ちします。
113:名前は開発中のものです。
21/05/06 02:16:30.98 /KeaSO9B.net
訂正 setspawnentry("name", "fire") X setspawnentry "name" "fire" O
@CMD でスクリプトやコマンドを直接呼び出す際は
コマンドに最初から設定されている 括弧やカンマ、ピリオドを消して
スペース記号(見えませんが)で区切って記述しないとエラーになることが多いです。
便利な反面、エラーがでるとかなりてこずります。
スクリプトを弄っていてエラー落ちが発生した場合、便利なのがLogフォルダの
Scriptlog.txt ここに、どのようなスクリプトが実行されているか出力されるので
エラー箇所を特定することになります。
114:名前は開発中のものです。
21/05/06 02:24:21.35 /KeaSO9B.net
括弧やカンマなど消すといっても 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のシステムに直接干渉するので、エラー(大概こちらの勘違い)のさいは
結構な手間になりますが、基本コマンド以上に色々弄れるのが痛し痒し。
115:名前は開発中のものです。
21/05/06 02:47:41.51 /KeaSO9B.net
>>111さん
すいません、あまりブラウザ更新しないので気付かずに居ました。
画像を拝見しました。
上からっぽくてすいませんが、
1枚の画像からも kt住江様の世界観や作風を大切になさる様が大いに感じられ
ワクワクが止まりません。
いつも人様のムゲンキャラを弄って消費してばかりの私にとって、
いつかは自分もと参考&励みにさせて頂いています。
既存のものを改変するのってとても簡単なので、ついつい人様の作品に弄って楽しんでばかりで
そのぬるま湯から抜け出せすにいます。
別なスレに「作品を完成させられない人」ってのもありますが、私はそのタイプ。
イメージを形に出来る方を本当に尊敬します。
116:名前は開発中のものです。
21/05/06 23:33:55.01 /KeaSO9B.net
@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
117:名前は開発中のものです。
21/05/06 23:43:25.09 /KeaSO9B.net
上は、敵を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
118:名前は開発中のものです。
21/05/07 00:13:33.09 RxUWGAGV.net
上のスクリプトは元々、もっと複雑な仕様(使うにはアイテムを購入して消費)だったものを
簡略化したのでMPさえあれば連続使用できてしまう訳です。
さらには時間で元の敵に戻るということも出来るのですが、それにはMODELS.txtにて
専用 Entityを作成して、それを Bindentityしなければならないので、結構手間がかかります。
簡単に説明すると、Bindentityには必ずParent(親Entity)が必要、それを逆に利用して
透明なEntityをBindentityし、一定時間経ったら元のParent(Entity)の情報に上書きするというもの。
一瞬頭が混乱しますが、Bindentityの特性を理解すると「なるほどー!」となります
もちろんオリジナルは私などでは無く、D&D Rise of Warduke2015から拝借しました。
119:名前は開発中のものです。
21/05/08 00:13:01.25 S2juEpeY.net
少し前に、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/ フォルダの中を見てみれば殆どの方が用意しているので参考になるかと思います。
120:名前は開発中のものです。
21/05/08 00:34:31.12 S2juEpeY.net
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);これは攻撃が当たったというフラグ
121:名前は開発中のものです。
21/05/08 00:41:03.92 S2juEpeY.net
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で一網打尽に出来るという
演出重視の処理ができて、仕込んだ本人はご満悦というものです。
122:名前は開発中のものです。
21/05/08 01:01:56.73 S2juEpeY.net
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つだけです。
123:名前は開発中のものです。
21/05/09 18:57:27.67 uQy3TiTw.net
OpenBoR stats 0.53 では mugen のairファイルが読み込めて便利と以前に書きましたが
たまにファイルが灰色に表示され、選択出来なくなることがあります。
そんな時は無限用のファイターファクトリーでsffファイルを8bit用のデータでセーブしてやると
OpenBoRstatsでも読み込めるようになることもあります。
124:名前は開発中のものです。
21/05/09 23:30:14.44 1QV0D9Lf.net
>>118 ここで「## Charm」とありますが、「#」これ一つで以降に書かれたテキストはOpenBoRとしては無視する
いわゆる「コメント(人間が読んだときの栞や説明)」となります。
で一つ「#」を使えば十分なのですが、大量に使って作成者が目印にしたりもします。
私は基本「##」2つ連続で使うのですが、一時的に使わないけど、また後で使うかもなコマンドの最初に
# jumpframe 0 0 1 0
こんな感じに使う事で、一時的に無効にすることができます。
で、OpenBoR stats を使っていると、#を使っているとたまに行ごと削除されてしまうことが有り
それを防ぐおまじないとして##2つ重ねています。
125:名前は開発中のものです。
21/05/09 23:36:48.96 1QV0D9Lf.net
「## Charm」は >>117 でした。
@Script
~
@End_script
ここで使うコメントは「//」となります。
@cmd これをコメントにするときはこんな感じ「# @cmd」 なので
スクリプト的に内部動作を弄るときはC言語みたいに「//」だったよなと
「// @cmd 」とするとエラーになりますので注意です。
126:名前は開発中のものです。
21/05/10 00:00:27.11 snJfXwVZ.net
この様なサイトがあるのを初めて知りました。
レベルの高い内容ばかりで参考になります。
素人ながら「RescueCommandⅡ」を色々いじって遊んでるのですが
試したいことがあるので教えていただきたいです。
敵キャラ同士が同じ座標に重なったり、すり抜けたりしないように
接触判定の条件?をいいじりたいのですが、どこをどのようにいじればよいか
どなたかご教示いただけないでしょうか。
敵キャラ同士の攻撃は従来通り当たらないで、あくまで接触判定だけ変えたいです。
何卒よろしくお願いします。
127:名前は開発中のものです。
21/05/10 00:05:01.81 LcOGIvvu.net
>>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
128:名前は開発中のものです。
21/05/10 00:23:14.55 LcOGIvvu.net
>>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")に戻ることになります。
こういう閃きが出来る方って本当に凄いと尊敬します。
私はスクリプトの中身を読んで「ほへ~凄いなー」となって、何も考えずコピーして「動いたー!」
さっそくスレに書き込むことしかしないので、どういう経緯でこうなるのか基本全く分かりません。
世の中には凄い人が沢山いるものです。
129:名前は開発中のものです。
21/05/10 01:02:42.20 LcOGIvvu.net
>>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が軽いんじゃないかな?と想像してます。
130:名前は開発中のものです。
21/05/10 01:16:10.44 LcOGIvvu.net
せっかくラッシュな感じで敵を大量に出現させても、
重なって団子になってしまうと興ざめな部分もありますよね。
かといって敵があまりにランダムな動きをしてしまうと、
それはそれで、、、となってしまいます。
このスレでも度々お世話になっている、kt住江氏のMODを遊んでいると、
絶妙な敵のコンビネーション(ザコは固まるし、バラける、ボスは適度に意地悪)
ステージの作り方でどちらも一方的にならないように工夫されているなど、
OpenBoRの基本システムだけで表現しているので、とても参考になるかと思います。
131:名前は開発中のものです。
21/05/10 02:53:40.87 snJfXwVZ.net
>>129さん
ご丁寧に返信いただきありがとうございます。
私も自分なりにマニュアルを読みましたがわからず相談させていただきました。
頂いた代替案も参考にさせて頂きつつもうちょっと粘ってみます。
ありがとうございました!!
132:名前は開発中のものです。
21/05/10 09:21:40.27 iq7vM874.net
敵の動きについては昔2016年頃のMODだと
AiMove1やAiMove2など思考に優先順位を付ける事ができたようす
最近のBoRエンジンでは省略されたぽい
公式でも話題になってた。
133:名前は開発中のものです。
21/05/10 10:46:10.08 iq7vM874.net
今ふと思いついただけなんですが
敵のidleやwalkにattackコマンドをダメージ0で記述して
painにmove-1とかすれば敵同士重なったら多少ずれるかな?
134:名前は開発中のものです。
21/05/11 00:12:34.39 W5SAA6KE.net
やってみました。
敵のヘッダーに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させて標的を散らすほうが簡単かも。
135:名前は開発中のものです。
21/05/11 00:32:56.22 W5SAA6KE.net
上のAttack6はattackコマンドの方で、Anim Attack6ではありません。
Attack6 0 0 100 100 0 0 1 1 0 15の方です。
この攻撃がヒットした際にAnim Pain6が存在すると、
このAnimが優先して実行されます。
136:名前は開発中のものです。
21/05/11 21:24:05.65 hyfsamfM.net
>>134さん
なんと!!私も早速試してみます。情報ありがとうございます。
同士討ちは、それはそれで面白そうなのでやってみます。
同士討ちは”Anim Walk”による判定か”Anim Attack”による判定か
判別出来れば解消するんですかね~。やれるかわかりませんが・・
137:名前は開発中のものです。
21/05/12 00:57:58.28 z4QIhI5l.net
近くにいる敵に向かって進む
@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); }
続く
138:名前は開発中のものです。
21/05/12 01:03:15.13 z4QIhI5l.net
続き
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(慣性とでもいいますか、強制移動)させるというもの
139:名前は開発中のものです。
21/05/12 01:15:27.65 z4QIhI5l.net
>>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に最初から用意されてるコマンド)が結構雑で思った敵に行かない所でしょうか
一対一の格闘ではないですし、現在画面内にいる敵をカウントして自分との距離を算出するなんて
想像しただけで気が遠くなるので、コマンドを用意してくれてる公式に感謝です。
140:名前は開発中のものです。
21/05/12 01:48:22.25 z4QIhI5l.net
>>136 さん
同士討ちの原因は簡単で
candamage player enemy
candamage(Attackコマンドの攻撃判定が有効になる対象)
player(そのままプレイヤー) enemy(TYPE_ENEMYと設定されたentity)なので
これが記述されていると同士討ちになる訳です。
特別スクリプトを使わずに、OpenBoRの基本設定でなんとできるかな?と試しただけなので穴だらけです。
丁寧に処理するには、OnDoAttack(Entityが攻撃コマンド実行時に処理されるスクリプト)か
AnimationScript(Entityが何かするたび処理)辺りで設定してみるか、
@scriptでうまいこと座標の重なりを検知できれば良いのですが、
攻撃対象を検知(FindTarget)するのはあるんで、きっと存在はしてる筈なのですが
141:名前は開発中のものです。
21/05/12 01:56:59.21 z4QIhI5l.net
>>134 で苦労の割りにと書いたのは、場合によっては全ての敵にAnim Pain6などリアクション設定しないと
あまり効果が出ないので、同じ種類の敵でもSpeed(移動速度)をランダムにしてみる。
などのステータスを弄ってみたほうが楽かなと思いました。
srand(seed)
set a seed for random number generator
まだ使った事ないですが、こんなコマンドもあるようなので試してみようと思います。
142:名前は開発中のものです。
21/05/12 15:39:00.17 z4QIhI5l.net
スクリプトばっかりで意味がわからん、という方も多いかと思います。
スクリプトはあくまで味付けなので、殆どの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あたりを見てみると大量に実例とファイルが用意されているので
覗いてみると泥沼に嵌るかもしれません。
143:名前は開発中のものです。
21/05/13 01:20:35.32 OoHlaO5a.net
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に戻るので、気軽に使えます。
144:名前は開発中のものです。
21/05/16 00:01:17.20 FoJl/otl.net
あいかわらず 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の呪縛から開放されます。
145:名前は開発中のものです。
21/05/16 00:31:35.07 FoJl/otl.net
>>143 に、ジャンプ上攻撃(JumpAttack3)の中にもJumpFrame 0 2 0.5とありますが
これは、元々のジャンプが降下に移っているとき攻撃を出しても、
攻撃が実行される前に着地してしまうことを避けるため、擬似2段ジャンプのような形にして
JumpAttack3が降下中でも攻撃判定がでるように工夫してます。
以前に紹介した、Cancelを利用した2段ジャンプは別にFreeSpecialを用意する必要がありましたが
時には使う事が無いJumpAttack2やJumpAttack3を2段ジャンプ代わりにすることも出来るわけです。
146:名前は開発中のものです。
21/05/16 00:43:11.17 FoJl/otl.net
>>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 の誘導スクリプトを仕込めば画面がとっても五月蝿い感じになります。
147:名前は開発中のものです。
21/05/16 00:46:10.02 FoJl/otl.net
上の
setdrawmethod(vShot, 1, 160, 160,0,0,0,1,0,0,0,0,0);
changeentityproperty(vShot, "owner", self);
changeentityproperty(vShot, "parent", self);
ここはあまり意味無い(darawmethodによる描画の変化、プレイヤーにスコアが入るかの設定)なので
気にしないでOK
148:名前は開発中のものです。
21/05/16 01:04:20.46 FoJl/otl.net
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
149:名前は開発中のものです。
21/05/16 01:26:03.54 FoJl/otl.net
余計な事ですが、
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と同じ意味になります。
分かりにくいので、他人に見せる場合は一番上のように記述するのが良いと思います。
なんかこんな風に記述することで「ちょっと分かった気分になれる」という利点があります。
最近覚えたので薀蓄たれたくなりました。
150:名前は開発中のものです。
21/05/16 03:06:57.62 FoJl/otl.net
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を利用すると、様々な要素(省略できる部分もあります)について指定する必要があります。
151:名前は開発中のものです。
21/05/17 00:52:19.70 FAJnAZ+T.net
@Script
~
@Emd_Script
ばかり紹介してるけれど、本来スクリプトは data/scripts/フォルダにまとめて
そこから呼び出すようにした方が良いって公式にも書かれています。
でも完全にそうなってしまうと、得体の知れないブラックボックス的なものになってしまうかも
という危惧があります(余計なお世話ですが)。
なので一旦、スクリプトってどんな働きをしてるの?という部分について
大雑把にこんな感じ(だと思う)だよ、と紹介できたらなというのが私の思いです。
標準コマンドは危険が無いように各種ステータスを自動で調整してくれますし、
標準コマンドですべて完結するのが一番だと考えています。
一方、私程度でも、いつもよりチョッとだけ違う動きが出来たりする懐の深さが
OpenBoRの魅力かなと思います。
Entityのヘッダー(ファイルの上のほう)で設定する、SpeedやAntigravityなどの数値ですが
最初に設定する以外にもChangeEntityPropertyなどで自由に変更できる事は、これまでも紹介した通りです。
ヘッダーではSpeed 11のAntigravity 100のように設定していても、ChangeEntityPropertyなどで変更する時は
10分の1~100分の1程度の数値にしないと、影響が大きすぎて激しく動いてしまう事も多々あります。
これはやってみないと判らないことが多いので、試行錯誤で悶絶ですね。
152:名前は開発中のものです。
21/05/17 02:39:29.32 FAJnAZ+T.net
同じ敵でもSpeedの数値をランダムに変えれば、多少は「団子状態」で迫りくる状況が変えられるか?
という事で、いくつかのシチュエーションで試してみましたが、
プレイヤーが一人で、転んだり(Fall)などの状況になってしまうと
結局、団子になってしまいます。
敵同士のぶつかり(重なり)を避けるためにCanDamage を使うと、プレイヤーに対する攻撃が
同じ属性(TYPE_ENEMY)にもヒットしてしまうので、面白いけれど、全ての敵がそうだと少々面倒。
今後の課題として、EntityPropertyなどの参照で、”DamageTaker”や”Opponent”を取得できれば
TYPE_ENEMYのAttackコマンドがTYPE_ENEMMYにヒットしないように(ヒットしても無視するように)
することも出来るかな?と思う。
もう一つの対処法としてRand()%100などを使ってランダムな数値を出し、その数値によって
Anim AttackやAnim Idle3のようなAnimに分岐させて、暇つぶしをさせることによって
重なりを防ぐという事も考えられます。
これは、他のいくつかのMODでも
敵の攻撃が成功したら、攻撃した敵に適当なAnim処理(攻撃が当たったヒャッホーみたいなモーション)をさせ
プレイヤーがいわゆるハメ状態にならないように工夫しているものからヒントを得ています。
沢山のTYPE_ENEMYを用意して、同じ種類の敵が同時に出現することを防げば良いのですが。
それはそれで試行の回数が増えることになるのでバランスが難しいですね。
153:名前は開発中のものです。
21/05/19 23:48:02.64 upn5bY1m.net
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も動作確認できていないので
謎は深まるばかりです。
154:名前は開発中のものです。
21/05/22 03:25:15.70 zSTPvS3W.net
drawmethod scale # は機能する(#の数だけ拡大・縮小)のに
drawmethod scalex # scaley # (横、縦の比率を指定して拡大・縮小)は機能しない
OpenBoRのバージョンは3で固定のようですが、Buildでかなり動作にムラがあるようなので
MODによって、全く動作しなかったり、特定のステージ・エリアに行くと落ちたりします。
作者さんが動作確認できているBuildを公表するなりしてくれていると助かるのですが、
私の勝手な分け方では、古いMOD(2018年以前)はBuild 3789~4086あたり、
それ以降であれば最新のものでも、ほぼ動作するようです。
大分安定しているとはいえ、過去Buildでは問題なく動作したコマンドが
最新ではエラー扱いになったりするので、どんな物でもそうなんですが、エラー原因の特定は
なかなか難しいですね。
155:名前は開発中のものです。
21/05/25 01:13:32.55 blxYdI/g.net
今ちょこちょこと弄っているのが、DungeonMAgic、過去にライトブリンガーとして
アーケードゲームとして斜め見下ろしダンジョン攻略アクションRPG風とでも言うのでしょうか
その登場キャラを例によってゴニョってOpenBoRに落とし込んだもの
ただ公式サイトでも、動いたー止まったーと幾つか混乱が生じているようですが、
Build 4078であれば特に落ちる事無くエンディングまで行けるようです。
Build 6000番くらいまで来ると、EntityPropertyの関係や、AttackTypes、AImoveの関係で落ちるっぽい?
修正できるかな?と思いましたが、とにかくLoadされるModelが多過ぎなのと
作者さんが ;セミコロンをコメント扱いにしていたりと中々の曲者なので
素直にBuild 4078でプレイするのが吉かと
156:kt住江
21/05/25 22:23:59.77 GJ3pQcTQ.net
こんばんは、kt住江です。
開発中のベルトアクションの開発率が50%に達しましたので、
途中経過の動画をご紹介します。
タイトル『ダブルドラゴン番外編』のOPです。
URLリンク(twitter.com)
2か月後の完成を目指して、引き続き頑張りたいと思います。
僭越ながら宜しくお願いします。
(deleted an unsolicited ad)
157:名前は開発中のものです。
21/05/30 02:14:00.16 VOVq5aSh.net
おろしや国辺りのサイトを見てると、痕跡は残っているのに、
Modそのものは結構消滅して行ってる感じが悲しい。
チャイさんヒスパさん系はフリーだったり、寄付募集したり、逞しい感じw
2D_Engineとしてかなり取っ付き易いのでもっと皆に弄って遊んで欲しいですね。
158:名前は開発中のものです。
21/06/07 00:31:12.40 kBKigIMN.net
分岐器で開発部門特製ソフトが発売されると大々的にCM打たれてますが
これを機にエディター系のジャンルが流行ってくれればなーと個人的には思いますが
カルネージハートは検索しても出てこないし、ヒューマンリソースマシーンとか
7ビリオンとか別に話題になってないみたいなんで、
おじ様達にちょっとヒットするくらいなんでしょうか
OpenBoRのほうはジャンプと攻撃のみでシンプルに楽しむ、王道2Dを弄っております
足場の端っこに立った場合のAnimとか用意してあって、OpenBoRの奥深さにいまさらながら驚いています。
159:名前は開発中のものです。
21/06/09 01:15:57.76 GZBN8r0d.net
純粋な2Dは難しいですね
パースーオリマーのようにジャンプで避ける、踏みつけて攻撃という
多少の派生動作はあってもシンプルな2種類の動作を選択するのみで
爽快感を得られるように工夫されている凄さに改めて敬服します。
OpenBoRでも、もちろんそのようなシステムにする事は可能ですが
ついつい、おキャッスルヴァーニャのように足を止めて打ち合う方に魅力を感じて
しまうのですが、その場合、足場の選択、自分の手数からの攻撃手段の取捨、
どの方向の敵を優先的に攻撃するか、などなどプレイする側はもとより
状況(ステージ)を設定する側の手腕も問われる訳でして
設定をチョッと間違えると、一瞬で無理ゲーや作業になってしまうので
あ熊城などの練り込み完成度の高さに、いまさらながら関心しています。
160:名前は開発中のものです。
21/06/13 00:36:10.90 54syd5Da.net
楽しい BindEntity
anim idle
loop 1
@script
if (frame == 0) {
clearspawnentry();
setspawnentry("name", "Ariel");
void vSpawn = spawn();
bindentity(vSpawn, getlocalvar("self"), -60, 0, 0, -1, 4, 1);
}
@end_script
これは、プレイヤーキャラが アイドリング状態になるたびに Arielというキャラを呼び出すもの
もちろんArielは自キャラ同様 MODELS.txtで設定しておく必要があります。
幾つか自キャラを選べるなら、そのうちの一つで良いのです。
ただし、呼び出すキャラと呼び出されるキャラ、ややこしいですね、上の例だと
Selfが親でArielが子になります。
書式は bindentity(entity, target, int x, int z, int a, int direction, int bindanimation, int sortid)
長いですね、entity(子)target(親)x,y,z(親の何処に表示するか)
direction(向き、0出現した時の向き、1親と一緒、2常に右、-2常に左)
bindanimation(子に親と同じAnimが設定されていると実行される)
sortid(重なった際に優先して表示されるか?なので、こだわり無ければ別に)
一番面白いのは bindanimation部分でしょうか、0何もせず、1親と同じAnimを実行
2親と同じAnimをFrame数までシンクロして実行、3は無くて
4は基本1で親と同じAnimが無ければEntity(上だとAriel)を消去(bindentity消去)
夢が広がるコマンドですね。
161:名前は開発中のものです。
21/06/13 00:57:23.46 54syd5Da.net
weapons {name1} {name2} {name3} {name4} {name5} {original name}
ちょっと説明が難しいのですが使うと便利なコマンドです。
というか DCManualを読むのが一番早いのですが、「なんか面倒そう」という感想を抱くかとおもいます。
また色々Anim設定しなきゃでしょ?と思うかも知れませんが、
modelflag 0(デフォ)となっていれば{original name}のAnimがコピーされます。
プレイヤーキャラを名前を変えてコピペして別キャラを作らなくても、
Anim Attack1~3などのEntity(Model)を設定して、上の{name1}に記述しておけば
他のFreespecialなどは{original name}のAnimが実行されるので
Animを変えたい部分だけ作れば良いのです。
あるFreespecialを使うとスタイルチェンジ!とか変身!とかしたい場合便利。
特定のステージでプレイヤーの向きを固定(スクロール方向に)するなど、かなり便利なので
weaponFrame などこだわると結構いろいろ出来そうです。
162:名前は開発中のものです。
21/06/13 01:05:41.40 54syd5Da.net
>>160
BindEntity の Direction -1は常に親と逆向きです。
163:名前は開発中のものです。
21/06/14 01:20:36.86 f6qMiOOZ.net
@script
if(frame==0) { float Vx, Vz, Vy=3, 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); }
x = x+dx;
z = z+dz;
Vx = ((Tx-x)/(22*Vy));
Vz = ((Tz-z)/(22*Vy));
} else {
Vx = 1 ;
if(dir==0){ Vx = -Vx ; }
Vz = 0 ; }
tossentity(self, Vy, Vx, Vz); }
@end_script
他人様のアイデアを偉そうに紹介するのもアレなんですが、近くの敵に誘導ジャンプします。
if(frame==0) { float Vx, Vz, Vy=3, dx=0, dz=0;
これで、Frame 0の時、ジャンプ力3(Vy=3)で届く範囲を索敵してジャンプします。
攻撃するかどうかは、Anim中に記述されたコマンド次第で、このままなら、
攻撃可能と設定した近くの対象にジャンプするだけです。
164:名前は開発中のものです。
21/06/17 02:47:33.77 1MwPeeuR.net
DOT {Index} {Time} {Mode} {Force} {Rate}
{Index} defines DOT index. Entity may have up to 10 DOT effects at one time. An entity can be hit by more than one DOT effect at once. If entity is hit by same indexed DOT effects, only the latest one will be applied.
{Time} defines how long DOT effect active in centiseconds.
{Mode} defines how DOT effect is applied to hit entity. HP damage is same type as original attack and affected by damage mitigation.
1 = Nonlethal HP (can reduce to 1 but not below).
2 = MP.
3 = MP and nonlethal HP.
4 = HP.
5 = MP and HP.
{Force} defines amount of damage per tick.
{Rate} defines delay between each tick in centisecond.
DROPVと同じように Attack コマンドと一緒に記述することで
一定時間、ダメージを与え続けるというもの、
Indexは特に気にしなくてOK(DOTが重複して掛かるかどうか)、Timeは持続時間(600で6秒)
ModeはHPにダメージ、MPにダメージか双方か、ダメージによって消滅するか
Forceは一回あたりのダメージ。Rateは総時間(Time)中、何回ダメージを与えるか
Timeが600でRateが100なら、1秒ごとに6秒間Forceダメージ与えるというもの。
165:名前は開発中のものです。
21/06/17 02:55:24.76 1MwPeeuR.net
スクリプトで同じような事をしようと思うと
anim idle
@script
if(frame==1) { void self = getlocalvar("self");
setlocalvar("BT"+self, findtarget(self));
if(getlocalvar("BT"+self)!=NULL()) {
void target = getlocalvar("BT"+self);
void PDir = getentityproperty(self, "direction");
int tx = getentityproperty(target, "x"), px = getentityproperty(self, "x");
int tz = getentityproperty(target, "z"), pz = getentityproperty(self, "z");
if(PDir) {
if( tz - pz < 10 && tz - pz > -10 && tx - px > 30 && tx - px <240) {
changeentityproperty(target, "lifespancountdown", 600 ); // openborvariant("elapsed_time")+300);
changedrawmethod(target, "reset", 1);
setlocalvar("BT"+self, NULL());
changedrawmethod(target,"tintmode",3);
changedrawmethod(target,"tintcolor",rgbcolor(255, 64, 32)); }
} else {
if( tz - pz < 10 && tz - pz > -10 && tx - px > -240 && tx - px <-30) {
changeentityproperty(target, "lifespancountdown", 600 ); // openborvariant("elapsed_time")+300);
changedrawmethod(target, "reset", 1);
setlocalvar("BT"+self, NULL());
changedrawmethod(target,"tintmode",3);
changedrawmethod(target,"tintcolor",rgbcolor(255, 64, 32));
} } } }
@end_script
余計なことたくさんしてるんで長くなってますが、
自分の進行方向の敵を標的に選んで、縦軸にずれが10ドット、横軸30~240ドットにいる
一番近い敵の色をちょっと赤っぽくして6秒後に即お陀仏というもの
DOTと同じような事をしようとするとスクリプトでは結構な手間がかかります。
いかにOpenBoRの基本コマンドが良くできているかということですね。
166:名前は開発中のものです。
21/06/17 07:47:06.34 1MwPeeuR.net
上の例は、こんなことできたらいいなで、ざっと記述し動作確認します。
動作確認できたら、同じ処理をフラグで簡略化したりして
@script
void self = getlocalvar("self");
setlocalvar("BT"+self, findtarget(self));
if(getlocalvar("BT"+self)!=NULL()) {
void target = getlocalvar("BT"+self);
int tx = getentityproperty(target, "x"), px = getentityproperty(self, "x");
int tz = getentityproperty(target, "z"), pz = getentityproperty(self, "z"), IR=0;
if(tz - pz < 10 && tz - pz >-10) {
if(getentityproperty(self, "direction")) {
if(tx - px > 30 && tx - px < 240) { IR = 1; }
} else {
if(tx - px >-240 && tx - px <-30) { IR = 1; }
}
}
if(IR) {
changeentityproperty(target, "lifespancountdown", 600);
changedrawmethod(target, "reset", 1);
setlocalvar("BT"+self, NULL());
changedrawmethod(target,"tintmode",3);
changedrawmethod(target,"tintcolor",rgbcolor(255, 64, 0));
}
}
@end_script
こんな感じに直します。動作は一緒なんで、別にやらなくても良いのですが、なんとなくw
167:名前は開発中のものです。
21/06/21 00:28:30.55 hNfJwRs9.net
勝手な想像なのですが、どうもOpenBoRの基本として
エフェクトに関しては左右反転のようです、というより何となく
PCゲームに関する表示はまるで画面の反対側の世界が基準のような?
バイナリが逆から数えるのが基本みたいな事なのかなあ?
まあ、その辺の事を素人が考えても仕方ないのですが、
何が言いたいかというと、敵を攻撃した際のエフェクト、基本のキャラクター設定では
画像を、進行方向「右」で作るので、ついエフェクトなども「左から右に向けて」はじけるような
ものを作ってしまいがち、ですが、実際は「右から左に向けて」作り
表示の際は EntityのヘッダーにToflipを記述して左右反転する必要があるようです。
なにか他にコマンドがあるのか、Level.txtの向きの関係なのか謎は深まりますが
色々コマンドで小細工するより、キャラクターなどは左から右に向けて
エフェクトなどは右から左に向けての画像を用意すれば、余計な苦労はしなくて済むようです。
特に左右関係ない場合は別に気にする必要も無い事なのですが。
因みに、当方が苦労したのがBlock(Bflash)で基本、ガードエフェクトなのでが、
弧を描くようなエフェクトが対象に表示されるつもりが、自身にガードエフェクトが表示されるという。
なかなか難しいものです。
168:kt住江
21/06/26 17:09:38.82 ZHxLPI+W.net
皆さまこんばんは、kt住江。
開発途中経過の画像を掲載します。
ダブルドラゴンではお馴染みの敵キャラ、アボボです。
URLリンク(twitter.com)
完成締め切りまで1か月に迫ろうとしていますが、
この勢いで完成目指して頑張ります。
>>167さん
いつも有用なスクリプトの掲載お疲れ様です。
(deleted an unsolicited ad)
169:名前は開発中のものです。
21/07/22 21:22:48.23 O5VyZp9t.net
初代熱血硬派くにおくんもOpenBoRでリメイクできないかな?
170:名前は開発中のものです。
21/08/02 22:04:54.46 9n8sAsEi.net
最近OpenBoRのゲームのプレイに手を出し始めた者なんだが専門スレもないしネットの情報は古い物が多いしで中々難しいですね
YouTubeに動画だけはあるんだけども、みんな何処で拾っているのか…どこかOpenBoRゲーム見つけるならココ!って所があるのでしょうか…
171:kt住江
21/08/05 00:33:29.43 6dNJ9gOJ.net
>>170さん
自分の作ったゲームで大変恐縮ですが、
コチラのサイトで、わしの作ったOpenBORゲームをプレイするコトができます。
URLリンク(amberusagi.theblog.me)
それ以外の海外の皆さんの作ったゲームを落とせる場所はわかりません。
お役に立てなくて申し訳ないです。
1.2年B組ギコタク先生外伝
2.カオスファイト
3.コテハンファイト<男子禁制編>
4.アインバインの平日
5.熱血硬派くにおくん <アメリカロサンゼルス編>
6.巫女と吸血鬼
7.コテハンファイト2<削除隊出動編>
172:名前は開発中のものです。
21/08/05 22:31:24.25 wIu37Zbs.net
ありがとうございます、遊ばせて貰いますね
173:kt住江
21/08/08 13:48:05.59 TqdOxX7Y.net
>>172さん
楽しんでプレイしていただければ幸いです。
本日、21時頃にダブルドラゴン番外編を公開します。
それに先立ち、予告としてOP動画を公開します。
皆様、僭越ながら21時にお楽しみにくださいませ。
URLリンク(twitter.com)
(deleted an unsolicited ad)
174:kt住江(の代理)
21/08/10 23:17:46.84 WkbwC70K.net
kt住江さんが規制されて書き込めないようですので、
代理で投稿します。
遅れてしまって、申し訳ありません。
『ダブルドラゴン番外編』公開します。
ダブルドラゴンの二次創作ゲームとなっています。
宜しくお願いします。
URLリンク(ux.getuploader.com)
12300
175:名前は開発中のものです。
21/08/13 15:16:57.55 9IbNxB71.net
新作楽しみにしてました。
暫く出先なので帰りまで待たねば。
>>170 さん 公式サイトでも結構な数がアップされてますよ。過去作もメガ経由で保存されてるものも結構あります(リンクは公式内)。
176:名前は開発中のものです。
21/08/14 20:56:57.93 PBPTbqt/.net
>>175
ご親切にありがとうございます
公式サイトとはクロノクラッシュと言うサイトでしょうか?
177:名前は開発中のものです。
21/09/08 23:48:26.99 U44AQQtE.net
飛龍の拳のOpenBoR探してますがコレもう手に入らないんですかね?
Youtubeで見かけるので今探してます
178:完成形openborほぼ持っています
21/10/18 14:09:41.38 33ZvJVsJ.net
天堂少女6.0をお持ちの方、望みのborと交換をどうにかお願いします
ログイン出来ないのでこれだけ入手出来ません...v5とは違う内容になっております(泣き)
179:名前は開発中のものです。
21/10/19 08:33:19.41 4++tnlDZ.net
書き込めない人はなんとかchMateをダウンロードとインストール
例 2chMate 0.8.10.113 dev 用 Android - ダウンロード . APK
180:完成形openborほぼ持っています
21/10/20 01:47:18.76 ObjLlOU1.net
製作側としては2004年には完璧なものが出回っていたのでborのpak名前見つけても落とせる場所は散り散りになっています(ある程度固まっていることもあります)
181:完成形openborほぼ持っています
21/10/20 02:21:05.74 ObjLlOU1.net
ジョルトとクロノは削除だらけで採用枠の2次配布が少しあるだけレディットも削除されたけどその他11リンク固まり持っています
182:完成形openborほぼ持っています
21/10/20 03:01:42.58 ObjLlOU1.net
>>178
3ヵ月以上は頑張れません
2022年は多分いません...宜しくお願いします
183:完成形openborほぼ持っています
21/10/28 22:49:46.08 KrBnenwN.net
QQに登録して月曜日のみ昼にフォーラムに投稿した後にダウンロード出来るという噂話ですがどうやら一度しかチャンス無くすぐに永久追放になるようです?
私にはもうチャンスがありません