☆ベルトアクション作成 Beats of rageスレッド☆ (656レス)
1-

63: 2021/03/20(土)01:30 ID:nx9KiXPx(1/3)調 AAS
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: 2021/03/20(土)02:36 ID:nx9KiXPx(2/3)調 AAS
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: 2021/03/20(土)02:43 ID:nx9KiXPx(3/3)調 AAS
例えば
Attack 0 0 50 50 0 1 0 0 0 0
dropv 4 1 0
こんな感じで設定すると、
Attackはダメージ0だけど吹き飛ばし効果あり
そしてDropvにより
吹き飛ばしの効果に上昇4横方向1奥行き0がプラスされます
いわゆる おてだま するとき便利ということになります
66: 2021/03/21(日)02:32 ID:xsxh/Aen(1)調 AAS
悶絶案件
Anim ChargeAttack(一定時間攻撃ボタンを押して、離すと発動)のタメ時間を設定する
ChargeTime これは、Anim ChargeAttackの中に記述しないと(例えばヘッダーとか)
落ちます、エラーログに原因が出力されずに。
マニュアルをちゃんと読めば何処で宣言すべきか書いてはあるんですが、
他のコマンドでは間違った場所でも特にエラーも出ず、無視されることが多いのに、
上のようにエラー出力せず無言落ちするものも一部ではあるので、油断できません。
ChargeAttack自体使い辛い(特にボタンを押してタメてるとか表示されない)ので、
滅多に使わないんですけどね、専用FXの設定とかあれば良いのですが。
逆にそういうのがエラー原因だとなかなか特定できなくて悶絶。
67: 2021/03/30(火)01:38 ID:1gbSxSh3(1/3)調 AAS
Anim Throw
なにげに Anim Grabからの派生だと思ってしまうかもしれませんが
単体(Anim Grabが無くても)で使用可能です。
Entityのヘッダーなどで設定(宣言)した GrabDistanceの距離に近づくと勝手に投げます。
ダメージもThrowDamegeで設定できます。
手数が増えますね。
68: 2021/03/30(火)02:02 ID:1gbSxSh3(2/3)調 AAS
それならAnim Grabに攻撃コマンドを設定したら?
Anim Grabの最後のFrameで一旦停止して入力待ちになってしまいます。
なので、上の直接Throwは実際には手数少なくなります。
OpenBoR のシステム上、Anim Grabからの派生 GrabUp、 Grab Down、 GrabForward
さらにそこからのAttack3や各Grabの2への合計6回分の攻撃が使えなくなるためです。
しかし、Anim Grabからの一時停止によるテンポの悪さは無くなるので、
いきなりThrowは、そこまで悪手でもないのかなと個人的には思います。
69: 2021/03/30(火)10:33 ID:1gbSxSh3(3/3)調 AAS
訂正 ThrowDamege X ThrowDamage O
Grabに関して、6回分の攻撃?
ThrowやAttack3(GrabAttackなどの3撃目)を出さなければ、
掴み抵抗など何も設定してない敵に、
2系(GrabUp2などの2系はGrabから3撃目のフィニッシュ攻撃)までAnimを用意してあると、
連打せずポチ・ポチとボタンを押す事で各方向2回ずつ攻撃できる(GrabUp・GrabDown・GrabForward分)ので
掴んだらやりたい放題になります。
ムゲンからのキャラ流用なんかだとモーションが余る事が多いので、
派生技が多くなるのは便利です。
70: 2021/04/05(月)10:33 ID:JCfKgngn(1)調 AAS
ロケットヴァイパーのシステムや敵をまるごと流用してるのに作りが雑なbriga de rua(英訳street fight)
キャラクター作りに愛が無い感じで正直微妙な出来
スクリプトの内用を理解しつつ改変してるようなので
それなりの技術力はありそうなのにゲームバランスやキャラの作り込みが
今一なんでなんとも勿体無い
ただわかる範囲では3まで作られているんで力尽きてるようでもなさそう
作者さんは飽きっぽい方なのかな
71: 2021/04/06(火)01:42 ID:XHHis+ii(1)調 AAS
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: 2021/04/08(木)01:35 ID:91QCSGqP(1/2)調 AAS
いろいろなMODを楽しんでいると、いつものメニュー画面とは違ったものに出会う事もあるかと思います。
基本OpenBoRではDATAフォルダの中を読み込んで、各種メニューやセレクトシーンなどに移行するのですが
(level.txtだったりBGSフォルダの中だったり)。
DATAフォルダ直下にScript.txtが用意してあって中に、alwaysupdate 1などと記述してある場合
DATA/SCRIPTSフォルダ内にある Updated.cが優先して読み込まれ中に記述されてるスクリプトが実行されます。
MOD内で普遍的に使用されるスクリプトもここで定義されている事が多いので、
まずはここを探してみるのも良いかもしれません。
73: 2021/04/08(木)02:02 ID:91QCSGqP(2/2)調 AAS
訂正 level.txt → levels.txt
updated.c に関しては update.c(公式ではこっち)ですが、どちらも優先して読み込まれるようです。
こちらのスクリプトに記述するメリットは、オープニングメニューを派手にしたり、
その場でゲーム難易度などを変更可能にしたり、キャラにレベルアップの要素を仕込むときや
拡大縮小、ゲームの演出上の一時停止を組み込んだりなど、基本システムへの介入を可能にする事でしょうか。
各キャラ(Entity)に一つずつスクリプトを記述する手間が省ける(setglobalvarなどで変数を渡すだけで色々処理できる)
ような感じでしょうか。可能性は無限大になりますが、作る側に立つと脳天炸裂案件ですね。
74: 2021/04/09(金)17:18 ID:ncGtWkZW(1/2)調 AAS
開発中断か別なプロジェクト名に変わったのかも知れない
Demon Sluga 思い切りスクリプト使って
拡大縮小、キャラクターを飛ばしたり奥や手前から敵が出現したり、誘導弾を弾き返したり
全盛期のアーケードゲーム風に作られてます

手に入るヴァージョンによってかも知れませんが海外の環境依存文字を使っているため
一部手直ししないとステージ1すら始まりません
見るべきところは
models.txt
data/misc
data/misc/plane
この辺りの pu・i.txtやpu・d.txt、pu・.gif、
それらを呼び出すplaneb2.txtなどに関連するファイルの手直しになります
75: 2021/04/09(金)17:33 ID:ncGtWkZW(2/2)調 AAS
幼少の頃ゲームセンターで見た
ノリマロが大活躍するRescue Command remake
敵はオンナサンばかり
面白いのは 掴まれた時のレバガチャ要素
抜け出せないとダメージはもちろん、別なイベントに移行したりと
有効に使われてます。
ゲームバランス的に敵の攻撃力が高いのであれなら
defense all 0.1などモデルのヘッダーに記述して調整しましょう
76: 2021/04/10(土)10:53 ID:36EPLB+j(1)調 AAS
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: 2021/04/11(日)00:13 ID:9LUoOlWn(1/4)調 AAS
以前に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: 2021/04/11(日)00:19 ID:9LUoOlWn(2/4)調 AAS
上の例では見たとおり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: 2021/04/11(日)00:32 ID:9LUoOlWn(3/4)調 AAS
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
(1): 2021/04/11(日)00:41 ID:9LUoOlWn(4/4)調 AAS
訂正 3フレームで入力 → 1フレーム
Frameの数え方なんですが、コマンドでフレーム数を数える場合
どうも1番目は 0と数えるようです。
なのでFrameコマンドは 0,1,2の3フレーム
Cancel コマンドの記述は 2、9とありますが9フレーム目なんてないので
Cancel コマンドの判定は 2フレーム(3番目)の一つのみになります。
このFrame数を数えるのが以外に面倒で、Cancelコマンドなどは特に問題にならないのですが
LandFrameやThrowFrameなど間違えるとゲームが遅延したりすることもあるので注意です。
81: 2021/04/12(月)01:07 ID:rapSeOc5(1/2)調 AAS
スクリプトを無理やりねじ込む
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: 2021/04/12(月)01:15 ID:rapSeOc5(2/2)調 AAS
上の例では、Void Main(){ }となっています。これは攻撃ヒット判定が行われるたび
毎回参照されるという意味になります。
C言語準拠の記述になるので、この辺の記述や演算子については、
適当にC言語 演算子などで検索してみてください。
で、内容としては、何らかのターゲットに特定(Attack3やFreespecial#)の攻撃がヒットしたら
いつもより大きく吹き飛ばします(TossEntity)。
それぞれのAttackコマンドにDropvなど設定すれば同じ効果は得られますが、
このスクリプトを使う事でAnim単位で動作を変化させる事ができるのがメリット。
83: 2021/04/13(火)00:39 ID:r7OWv6Qx(1/6)調 AAS
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: 2021/04/13(火)00:46 ID:r7OWv6Qx(2/6)調 AAS
上のスクリプトは、vName="Spiral"や"Sakura"など5種類の敵(Entity)を
ランダムに出現させるものです。
changeentityproperty(vSpawn, "maxhealth", iMHealth); 最大HP
changeentityproperty(vSpawn, "health", iHealth); 現在HP
changeentityproperty(vSpawn, "direction", iDirection); 向き
この辺は好みでランダム(rand()%200+ 50)とか設定しても良いでしょう。
85: 2021/04/13(火)00:50 ID:r7OWv6Qx(3/6)調 AAS
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: 2021/04/13(火)00:57 ID:r7OWv6Qx(4/6)調 AAS
ステージを作ってるとどうしても内容を覚えてしまったりで、
だんだんテストプレイも飽きてきますので、ちょっとした気分転換になるかな?
敵を増やしたとき、スクリプト側とモデル側を少し書き換えるだけで登場させられるので
少しだけ手間が減らせるかなと思います。
もちろんEntityでさえあれば良いので、登場させるのはNPCだってITEMだって良いわけです。
87: 2021/04/13(火)01:17 ID:r7OWv6Qx(5/6)調 AAS
@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: 2021/04/13(火)01:36 ID:r7OWv6Qx(6/6)調 AAS
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: 2021/04/13(火)18:04 ID:pM+4VIKL(1)調 AAS
一番出し辛い攻撃はRunSlideだと思う
Run→→中に↓ジャンプ、自然な動作としては
スライディングかなあ
OpenBoRに最初から設定されているAnimは
大概過去に存在したゲームからヒントを得ているぽいね
90: 2021/04/14(水)00:12 ID:Bl01iZfT(1/2)調 AAS
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: 2021/04/14(水)00:20 ID:Bl01iZfT(2/2)調 AAS
上の例だと、もちろんAnim Pain3とPain4は設定しておかないと駄目です。
いろいろと検索していると、ユニティとかアンリアルとか目にしますが、
一つのゲームを完成させるとなると結構な労力になると思うのですが、
OpenBoRって基本ゲーム(BeatsOfRage)を土台にすれば、ともすれば
いわゆるツクールより楽にアクションゲームを完成させることが出来ると思うんです。
やはり知名度なんでしょうか?他人のプログラムの改変であっても、一個のゲームまで
いかなくてもキャラ一つでも弄ってみたら嵌ると思うんだけどなぁ
スクリプトとか小難しく言っちゃうのが駄目なのかな
92: kt住江 ◆/VMXjFOJew 2021/04/16(金)03:27 ID:kkjyE+N0(1)調 AAS
最近復活しました、kt住江です。
長らくスレから遠ざかってしまい、申し訳ありません。
現在新作としてダブルドラゴンのゲームを創意開発中です。 
↓開発中のダブルドラゴン用敵キャラ
https://twitter.com/ktsuminoe/status/1379416846458253314/photo/1

そして、kt住江のゲーム保管庫が出来上がりましたので、
皆さま、僭越ながら宜しくお願いします。
https://amberusagi.theblog.me/posts/13123474
https://twitter.com/5chan_nel (5ch newer account)
93
(1): 2021/04/18(日)00:19 ID:FUfakm3o(1/2)調 AAS
おつかれさまです。
早速、DLさせていただきました。
94
(1): 2021/04/18(日)20:34 ID:FUfakm3o(2/2)調 AAS
kt住江氏の作品はやはり流石の出来ですね。
アクションのバランスも良くて、強技出してればクリアなんて事は無く。
微妙なmodにありがちな敵に殴られる位ならスペシャル連打でいいや、なんて事が無いのが素晴らしい。
敵ごとにちゃんと対処しないと1クレジットクリア出来ない、絶妙なバランスで、とても楽しませて頂きました。
グラに関しても解像度が高ければ良いってものじゃ無いのがとても良く分かります。
95
(1): kt住江 ◆/VMXjFOJew 2021/04/19(月)18:52 ID:bjKqc+m0(1)調 AAS
>>93さん
DLしてくださり、ありがとうございます。
ごゆっくりと、ゲームをお楽しみください。

>>94さん
ありがとうございます。そう言っていただけると、開発したかいがあります。

現在、ダブルドラゴンのゲームを開発中ですが、
2012年の『ギコタク』から続いて『カオスファイト』『コテハンファイト』
『アインバイン』『くにおくんLA』『巫女と吸血鬼』『削除隊』と7作も作ると、
流石によくある攻撃を仕掛けてくるザコ敵はともかく、
中ボス格の敵キャラのアイディアが狭まってきました。
毎回、どんな攻撃をしてくる敵キャラを出そうかというアイディアで悩んでいますので、
僭越ながら、敵キャラのアイディアを出していただけると大変助かります。
参考に開発中のダブルドラゴンの粗筋をご紹介します。

ダブルドラゴン4でリー兄弟がレネゲーズを壊滅させた数か月後・・・
西海外の町、サンフランシスコに突如出来上がった格闘道場『フェニックス』の
稽古中を捉えた写真には、死んだはずの宿敵ウィリーの姿が映っていた。
ウィリーが蘇った真相を探るため、ダブルドラゴンはサンフランシスコへと乗り込む!
96: 2021/04/20(火)22:57 ID:N5Bx9E2D(1/2)調 AAS
@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: 2021/04/20(火)23:12 ID:N5Bx9E2D(2/2)調 AAS
改行多杉かと思ったら通った。
プレイヤーの周囲にいるTYPE_ENEMYを探して、
いたらENEMYの後方100ドット(int dx=100)にテレポートする。
最初のFrame[==48というのがテレポートを実施したいFRAME数
ここをFrame==0にすれば、いきなり跳ぶ
下の方にANIM_FAINTというのがあるが、これは該当する敵が居なかったときに
移行するAnimで、別にANIM_IDLEなどでもよいし他の技でもいい。
まあ、Move 100とかしてFlipFrameで反対向きにしても、それっぽい事はできるんですけどね。
スクリプトだと結構いい感じにテレポートしてくれるんですが、
どこかに嵌ってる敵にも反応してしまいます(そのまま穴に墜落とか)。
画面の解像度数を拾って+−補正すれば良いのですが、とりあえず、
敵の座標を拾って、そこに移動(プレイヤーの座標を書き換える)
条件を満たさなければ別なAnimに移行する
この辺が分かり易ければよいかなと思います。
分かり易く
98: 2021/04/21(水)00:05 ID:fX+bN6sg(1/5)調 AAS
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
(1): 2021/04/21(水)00:57 ID:fX+bN6sg(2/5)調 AAS
>>95 見逃していました。いつも楽しい作品をありがとうございます。
DDシリーズとても楽しみです。
どの作品でも、敵キャラの動きに表情というか個性を感じられ
予備動作や「間」にとても愛情を感じる事ができ、
次はどんな技を使ってくるんだろう?と敵を倒さずウロウロしてみたりしてます。
さっさと倒して駆け抜けようとしても強技連打が通用せず意外と歯応えがあったりと
バランスの妙に感心するばかりです。
私は、プレイヤーキャラにテレポートや分身をくっつけて激しく連打など
プレイヤーの強化しか考えていないので、敵のちょうど良い塩梅の動作というのは
仰るとおり非常に難しいことだと想像できます。
クライムバスターズというMODの敵は多彩な動きをするんですが、
画面を斜めに横断するように攻撃してきたり、空中から遠距離攻撃連打してきたり
プレイヤー側の対処する技がSpecial位しか無く、ずっと作業になりがちなちょっとアレなバランス
敵の無敵が長すぎるのもフラストレーションになるでしょうし、難しいですね。
100: 2021/04/21(水)01:02 ID:fX+bN6sg(3/5)調 AAS
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: 2021/04/21(水)01:20 ID:fX+bN6sg(4/5)調 AAS
上の設定は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: 2021/04/21(水)01:27 ID:fX+bN6sg(5/5)調 AAS
逆にMODELS.TXTで設定せずに
Anim Pain20 などと記述してしまうと簡単に落ちます。
記述に間違いがないのに落ちるーと悶絶することもあります。
中には Logに何も出力されず、ただ落ちることもあります。
とりあえず99で良いかもしれません。
103: kt住江 ◆/VMXjFOJew 2021/04/21(水)19:33 ID:J0YwHZ/b(1)調 AAS
>>99さん
ありがとうございます。毎度敵の攻撃パターンには特に気合いを入れて作っていますので、
そう言っていただけると感無量です。
貴重な情報ありがとうございます。クライムバスターズMOD、後ほど見てきます。

わしのベルトアクション技術は、専らダブルドラゴンやベナアックルで勉強しました。
特にベアナックル2は敵の構成パターンに飽きさせない工夫があり、
例えば1面中ボスのジャックは、最初は単体で登場しますが、
次の3面では鞭女2体を連れて、7面ではデブ2体と等、
どの敵キャラも登場する度敵の構成パターンが変わるため、
同じ攻略法が通じない綿密な攻略が必要になるため、非常に参考になります。
くにおくんLAもベアナックル2を参考に、意図的にザコ敵の配置を施してあるんです。
104: 2021/04/23(金)22:06 ID:uM7p5A0b(1)調 AAS
敵の種類をいくつか混ぜてバラっと設定してるMODが多い中(もちろん完成させて発表されてるだけで凄いです)。
くにおくん達はプレイしていて楽しい感覚が妙にクセになるんですよね、
もう一回プレイしようと思えるバランスは流石です。

オーソドックスな作りながら攻守のテンポがよいのは BeatemUp UltimateAllianceでしょうか、
大味ながらつい遊んでしまいます。
これBorpak.exeだけで解凍しようとするとエラーで解凍できないのですが(一部ファイルネーム長すぎ)
OprnBoR StatsのFILE→Import PAKで解凍するとXtractフォルダに出力されます。
StreetRage Z3はプレイヤーがレベルアップするタイプ、後半ほぼ無敵になるのが気持ち良いです。
というかレベルアップ(スコアを稼ぐ)しないとボスの攻撃が理不尽系ですw
RescueCommandも敵の掴み攻撃をレバガチャで抜けるというギミックに感心します。
Crime Bustersは現在としては古き良きとでも言うような感じです。
C社やS社のキャラを使ったものでは、RocketViper2が模範解答みたいな存在に感じます。
ファンタジー作品など他にもいろいろありますが、技術を駆使する方、
独自の世界観で作を重ねている方や、細かい事はいいから敵をぶっ飛ばすの楽しいでしょって作品、
なにより愛情をこめてMODを作ってらっしゃる方が多いように感じ、
それがOpenBoRの魅力の一つだと思います。
105: 2021/04/27(火)00:57 ID:6v2tN2Sr(1)調 AAS
最近すごいなと感じたもの KoF beat em up plus
操作可能キャラ39、敵もムゲン系からだと思うのですが、よく集めたなーという感じ
KoFという位なので基本 S社のキャラやアレンジしたものが多いです。
スクリプトは使わずOpenBoRの基本機能だけで作られた正攻法作品、中を覗いてみると、
move、movea、movez など駆使して動きを表現しています。
Jumpframeを何故か使っていないので、格闘ゲームによくあるジャンピングアッパーのような
動作も movea(垂直方向キャラ座標変更)でこなしていて、まさにパラパラ漫画要領で
アニメーションを作っているのが素敵です。
Anim Runにも move が記述されていて、フレームが跳んだような見た目なので、
手直しをしてキャラ作りの練習台にさせてもらうのも良いかもしれません。
ルート分岐やエンディングまでしっかり作ってある力作(200MB超)。
106: 2021/04/30(金)18:02 ID:81YP+Cwz(1/4)調 AAS
@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: 2021/04/30(金)18:09 ID:81YP+Cwz(2/4)調 AAS
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: 2021/04/30(金)18:18 ID:81YP+Cwz(3/4)調 AAS
訂正 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: 2021/04/30(金)18:36 ID:81YP+Cwz(4/4)調 AAS
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
(1): 2021/05/01(土)23:32 ID:ce6GRoi2(1)調 AAS
なんとなーく調べたら、drawmethodハイフンfillcolor R G B 各々0-255のようですね

drawmethod-fillcolor 0 255 255 で以降のframe コマンドのentityキャラが水色に塗り潰されて表示される筈ですが
現在、別な環境の為確認出来ずにいます。
drawmethodを上手く使いこなせれば、用意する絵的にかなり省力化できるんで
マスターしたいところですが、今のトコ自分で絵を用意した方が早いですね
111
(1): kt住江 ◆/VMXjFOJew 2021/05/04(火)01:38 ID:UuKfeUKx(1)調 AAS
途中経過画像。開発は順調です。
https://twitter.com/ktsuminoe/status/1389177357286608908/photo/1

>>110さん
いつもお疲れ様です。
アークシステムワークスの格闘ゲームによくある、
ストライカーまで実装可能とは、スクリプトは本当に凄いですねぇ。
https://twitter.com/5chan_nel (5ch newer account)
112: 2021/05/05(水)23:54 ID:+/eMzjlh(1)調 AAS
@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: 2021/05/06(木)02:16 ID:/KeaSO9B(1/5)調 AAS
訂正 setspawnentry("name", "fire") X setspawnentry "name" "fire" O
@CMD でスクリプトやコマンドを直接呼び出す際は
コマンドに最初から設定されている 括弧やカンマ、ピリオドを消して
スペース記号(見えませんが)で区切って記述しないとエラーになることが多いです。
便利な反面、エラーがでるとかなりてこずります。
スクリプトを弄っていてエラー落ちが発生した場合、便利なのがLogフォルダの
Scriptlog.txt ここに、どのようなスクリプトが実行されているか出力されるので
エラー箇所を特定することになります。
114: 2021/05/06(木)02:24 ID:/KeaSO9B(2/5)調 AAS
括弧やカンマなど消すといっても 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: 2021/05/06(木)02:47 ID:/KeaSO9B(3/5)調 AAS
>>111さん
すいません、あまりブラウザ更新しないので気付かずに居ました。
画像を拝見しました。
上からっぽくてすいませんが、
1枚の画像からも kt住江様の世界観や作風を大切になさる様が大いに感じられ
ワクワクが止まりません。
いつも人様のムゲンキャラを弄って消費してばかりの私にとって、
いつかは自分もと参考&励みにさせて頂いています。
既存のものを改変するのってとても簡単なので、ついつい人様の作品に弄って楽しんでばかりで
そのぬるま湯から抜け出せすにいます。
別なスレに「作品を完成させられない人」ってのもありますが、私はそのタイプ。
イメージを形に出来る方を本当に尊敬します。
116
(2): 2021/05/06(木)23:33 ID:/KeaSO9B(4/5)調 AAS
@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
(1): 2021/05/06(木)23:43 ID:/KeaSO9B(5/5)調 AAS
上は、敵を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
(2): 2021/05/07(金)00:13 ID:RxUWGAGV(1)調 AAS
上のスクリプトは元々、もっと複雑な仕様(使うにはアイテムを購入して消費)だったものを
簡略化したのでMPさえあれば連続使用できてしまう訳です。
さらには時間で元の敵に戻るということも出来るのですが、それにはMODELS.txtにて
専用 Entityを作成して、それを Bindentityしなければならないので、結構手間がかかります。
簡単に説明すると、Bindentityには必ずParent(親Entity)が必要、それを逆に利用して
透明なEntityをBindentityし、一定時間経ったら元のParent(Entity)の情報に上書きするというもの。
一瞬頭が混乱しますが、Bindentityの特性を理解すると「なるほどー!」となります
もちろんオリジナルは私などでは無く、D&D Rise of Warduke2015から拝借しました。
119: 2021/05/08(土)00:13 ID:S2juEpeY(1/4)調 AAS
少し前に、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: 2021/05/08(土)00:34 ID:S2juEpeY(2/4)調 AAS
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: 2021/05/08(土)00:41 ID:S2juEpeY(3/4)調 AAS
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: 2021/05/08(土)01:01 ID:S2juEpeY(4/4)調 AAS
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: 2021/05/09(日)18:57 ID:uQy3TiTw(1)調 AAS
OpenBoR stats 0.53 では mugen のairファイルが読み込めて便利と以前に書きましたが
たまにファイルが灰色に表示され、選択出来なくなることがあります。
そんな時は無限用のファイターファクトリーでsffファイルを8bit用のデータでセーブしてやると
OpenBoRstatsでも読み込めるようになることもあります。
124: 2021/05/09(日)23:30 ID:1QV0D9Lf(1/2)調 AAS
>>118 ここで「## Charm」とありますが、「#」これ一つで以降に書かれたテキストはOpenBoRとしては無視する
いわゆる「コメント(人間が読んだときの栞や説明)」となります。
で一つ「#」を使えば十分なのですが、大量に使って作成者が目印にしたりもします。
私は基本「##」2つ連続で使うのですが、一時的に使わないけど、また後で使うかもなコマンドの最初に
# jumpframe 0 0 1 0
こんな感じに使う事で、一時的に無効にすることができます。
で、OpenBoR stats を使っていると、#を使っているとたまに行ごと削除されてしまうことが有り
それを防ぐおまじないとして##2つ重ねています。
125: 2021/05/09(日)23:36 ID:1QV0D9Lf(2/2)調 AAS
「## Charm」は >>117 でした。
@Script

@End_script
ここで使うコメントは「//」となります。
@cmd これをコメントにするときはこんな感じ「# @cmd」 なので
スクリプト的に内部動作を弄るときはC言語みたいに「//」だったよなと
「// @cmd 」とするとエラーになりますので注意です。
126
(1): 2021/05/10(月)00:00 ID:snJfXwVZ(1/2)調 AAS
この様なサイトがあるのを初めて知りました。
レベルの高い内容ばかりで参考になります。
素人ながら「RescueCommand?」を色々いじって遊んでるのですが
試したいことがあるので教えていただきたいです。
敵キャラ同士が同じ座標に重なったり、すり抜けたりしないように
接触判定の条件?をいいじりたいのですが、どこをどのようにいじればよいか
どなたかご教示いただけないでしょうか。
敵キャラ同士の攻撃は従来通り当たらないで、あくまで接触判定だけ変えたいです。
何卒よろしくお願いします。
127: 2021/05/10(月)00:05 ID:LcOGIvvu(1/4)調 AAS
>>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: 2021/05/10(月)00:23 ID:LcOGIvvu(2/4)調 AAS
>>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
(1): 2021/05/10(月)01:02 ID:LcOGIvvu(3/4)調 AAS
>>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: 2021/05/10(月)01:16 ID:LcOGIvvu(4/4)調 AAS
せっかくラッシュな感じで敵を大量に出現させても、
重なって団子になってしまうと興ざめな部分もありますよね。
かといって敵があまりにランダムな動きをしてしまうと、
それはそれで、、、となってしまいます。
このスレでも度々お世話になっている、kt住江氏のMODを遊んでいると、
絶妙な敵のコンビネーション(ザコは固まるし、バラける、ボスは適度に意地悪)
ステージの作り方でどちらも一方的にならないように工夫されているなど、
OpenBoRの基本システムだけで表現しているので、とても参考になるかと思います。
131: 2021/05/10(月)02:53 ID:snJfXwVZ(2/2)調 AAS
>>129さん

ご丁寧に返信いただきありがとうございます。
私も自分なりにマニュアルを読みましたがわからず相談させていただきました。
頂いた代替案も参考にさせて頂きつつもうちょっと粘ってみます。
ありがとうございました!!
132: 2021/05/10(月)09:21 ID:iq7vM874(1/2)調 AAS
敵の動きについては昔2016年頃のMODだと
AiMove1やAiMove2など思考に優先順位を付ける事ができたようす
最近のBoRエンジンでは省略されたぽい
公式でも話題になってた。
133: 2021/05/10(月)10:46 ID:iq7vM874(2/2)調 AAS
今ふと思いついただけなんですが
敵のidleやwalkにattackコマンドをダメージ0で記述して
painにmove-1とかすれば敵同士重なったら多少ずれるかな?
134
(2): 2021/05/11(火)00:12 ID:W5SAA6KE(1/2)調 AAS
やってみました。
敵のヘッダーに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: 2021/05/11(火)00:32 ID:W5SAA6KE(2/2)調 AAS
上のAttack6はattackコマンドの方で、Anim Attack6ではありません。
Attack6 0 0 100 100 0 0 1 1 0 15の方です。
この攻撃がヒットした際にAnim Pain6が存在すると、
このAnimが優先して実行されます。
136
(1): 2021/05/11(火)21:24 ID:hyfsamfM(1)調 AAS
>>134さん

なんと!!私も早速試してみます。情報ありがとうございます。
同士討ちは、それはそれで面白そうなのでやってみます。
同士討ちは”Anim Walk”による判定か”Anim Attack”による判定か
判別出来れば解消するんですかね〜。やれるかわかりませんが・・
137
(2): 2021/05/12(水)00:57 ID:z4QIhI5l(1/6)調 AAS
近くにいる敵に向かって進む
@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: 2021/05/12(水)01:03 ID:z4QIhI5l(2/6)調 AAS
続き
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: 2021/05/12(水)01:15 ID:z4QIhI5l(3/6)調 AAS
>>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: 2021/05/12(水)01:48 ID:z4QIhI5l(4/6)調 AAS
>>136 さん
同士討ちの原因は簡単で
candamage player enemy
candamage(Attackコマンドの攻撃判定が有効になる対象)
player(そのままプレイヤー) enemy(TYPE_ENEMYと設定されたentity)なので
これが記述されていると同士討ちになる訳です。
特別スクリプトを使わずに、OpenBoRの基本設定でなんとできるかな?と試しただけなので穴だらけです。
丁寧に処理するには、OnDoAttack(Entityが攻撃コマンド実行時に処理されるスクリプト)か
AnimationScript(Entityが何かするたび処理)辺りで設定してみるか、
@scriptでうまいこと座標の重なりを検知できれば良いのですが、
攻撃対象を検知(FindTarget)するのはあるんで、きっと存在はしてる筈なのですが
141: 2021/05/12(水)01:56 ID:z4QIhI5l(5/6)調 AAS
>>134 で苦労の割りにと書いたのは、場合によっては全ての敵にAnim Pain6などリアクション設定しないと
あまり効果が出ないので、同じ種類の敵でもSpeed(移動速度)をランダムにしてみる。
などのステータスを弄ってみたほうが楽かなと思いました。
srand(seed)
set a seed for random number generator
まだ使った事ないですが、こんなコマンドもあるようなので試してみようと思います。
142: 2021/05/12(水)15:39 ID:z4QIhI5l(6/6)調 AAS
スクリプトばっかりで意味がわからん、という方も多いかと思います。
スクリプトはあくまで味付けなので、殆どの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
(1): 2021/05/13(木)01:20 ID:OoHlaO5a(1)調 AAS
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: 2021/05/16(日)00:01 ID:FoJl/otl(1/7)調 AAS
あいかわらず 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: 2021/05/16(日)00:31 ID:FoJl/otl(2/7)調 AAS
>>143 に、ジャンプ上攻撃(JumpAttack3)の中にもJumpFrame 0 2 0.5とありますが
これは、元々のジャンプが降下に移っているとき攻撃を出しても、
攻撃が実行される前に着地してしまうことを避けるため、擬似2段ジャンプのような形にして
JumpAttack3が降下中でも攻撃判定がでるように工夫してます。
以前に紹介した、Cancelを利用した2段ジャンプは別にFreeSpecialを用意する必要がありましたが
時には使う事が無いJumpAttack2やJumpAttack3を2段ジャンプ代わりにすることも出来るわけです。
146: 2021/05/16(日)00:43 ID:FoJl/otl(3/7)調 AAS
>>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: 2021/05/16(日)00:46 ID:FoJl/otl(4/7)調 AAS
上の
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
(1): 2021/05/16(日)01:04 ID:FoJl/otl(5/7)調 AAS
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: 2021/05/16(日)01:26 ID:FoJl/otl(6/7)調 AAS
余計な事ですが、
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: 2021/05/16(日)03:06 ID:FoJl/otl(7/7)調 AAS
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: 2021/05/17(月)00:52 ID:FAJnAZ+T(1/2)調 AAS
@Script

@Emd_Script
ばかり紹介してるけれど、本来スクリプトは data/scripts/フォルダにまとめて
そこから呼び出すようにした方が良いって公式にも書かれています。
でも完全にそうなってしまうと、得体の知れないブラックボックス的なものになってしまうかも
という危惧があります(余計なお世話ですが)。
なので一旦、スクリプトってどんな働きをしてるの?という部分について
大雑把にこんな感じ(だと思う)だよ、と紹介できたらなというのが私の思いです。
標準コマンドは危険が無いように各種ステータスを自動で調整してくれますし、
標準コマンドですべて完結するのが一番だと考えています。
一方、私程度でも、いつもよりチョッとだけ違う動きが出来たりする懐の深さが
OpenBoRの魅力かなと思います。

Entityのヘッダー(ファイルの上のほう)で設定する、SpeedやAntigravityなどの数値ですが
最初に設定する以外にもChangeEntityPropertyなどで自由に変更できる事は、これまでも紹介した通りです。
ヘッダーではSpeed 11のAntigravity 100のように設定していても、ChangeEntityPropertyなどで変更する時は
10分の1〜100分の1程度の数値にしないと、影響が大きすぎて激しく動いてしまう事も多々あります。
これはやってみないと判らないことが多いので、試行錯誤で悶絶ですね。
152: 2021/05/17(月)02:39 ID:FAJnAZ+T(2/2)調 AAS
同じ敵でも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: 2021/05/19(水)23:48 ID:upn5bY1m(1)調 AAS
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: 2021/05/22(土)03:25 ID:zSTPvS3W(1)調 AAS
drawmethod scale # は機能する(#の数だけ拡大・縮小)のに
drawmethod scalex # scaley # (横、縦の比率を指定して拡大・縮小)は機能しない
OpenBoRのバージョンは3で固定のようですが、Buildでかなり動作にムラがあるようなので
MODによって、全く動作しなかったり、特定のステージ・エリアに行くと落ちたりします。
作者さんが動作確認できているBuildを公表するなりしてくれていると助かるのですが、
私の勝手な分け方では、古いMOD(2018年以前)はBuild 3789〜4086あたり、
それ以降であれば最新のものでも、ほぼ動作するようです。
大分安定しているとはいえ、過去Buildでは問題なく動作したコマンドが
最新ではエラー扱いになったりするので、どんな物でもそうなんですが、エラー原因の特定は
なかなか難しいですね。
155: 2021/05/25(火)01:13 ID:blxYdI/g(1)調 AAS
今ちょこちょこと弄っているのが、DungeonMAgic、過去にライトブリンガーとして
アーケードゲームとして斜め見下ろしダンジョン攻略アクションRPG風とでも言うのでしょうか
その登場キャラを例によってゴニョってOpenBoRに落とし込んだもの
ただ公式サイトでも、動いたー止まったーと幾つか混乱が生じているようですが、
Build 4078であれば特に落ちる事無くエンディングまで行けるようです。
Build 6000番くらいまで来ると、EntityPropertyの関係や、AttackTypes、AImoveの関係で落ちるっぽい?
修正できるかな?と思いましたが、とにかくLoadされるModelが多過ぎなのと
作者さんが ;セミコロンをコメント扱いにしていたりと中々の曲者なので
素直にBuild 4078でプレイするのが吉かと
156: kt住江 ◆/VMXjFOJew 2021/05/25(火)22:23 ID:GJ3pQcTQ(1)調 AAS
こんばんは、kt住江です。
開発中のベルトアクションの開発率が50%に達しましたので、
途中経過の動画をご紹介します。
タイトル『ダブルドラゴン番外編』のOPです。
https://twitter.com/ktsuminoe/status/1397181051865161728

2か月後の完成を目指して、引き続き頑張りたいと思います。
僭越ながら宜しくお願いします。
https://twitter.com/5chan_nel (5ch newer account)
157: 2021/05/30(日)02:14 ID:VOVq5aSh(1)調 AAS
おろしや国辺りのサイトを見てると、痕跡は残っているのに、
Modそのものは結構消滅して行ってる感じが悲しい。
チャイさんヒスパさん系はフリーだったり、寄付募集したり、逞しい感じw
2D_Engineとしてかなり取っ付き易いのでもっと皆に弄って遊んで欲しいですね。
158: 2021/06/07(月)00:31 ID:kBKigIMN(1)調 AAS
分岐器で開発部門特製ソフトが発売されると大々的にCM打たれてますが
これを機にエディター系のジャンルが流行ってくれればなーと個人的には思いますが
カルネージハートは検索しても出てこないし、ヒューマンリソースマシーンとか
7ビリオンとか別に話題になってないみたいなんで、
おじ様達にちょっとヒットするくらいなんでしょうか

OpenBoRのほうはジャンプと攻撃のみでシンプルに楽しむ、王道2Dを弄っております
足場の端っこに立った場合のAnimとか用意してあって、OpenBoRの奥深さにいまさらながら驚いています。
159: 2021/06/09(水)01:15 ID:GZBN8r0d(1)調 AAS
純粋な2Dは難しいですね
パースーオリマーのようにジャンプで避ける、踏みつけて攻撃という
多少の派生動作はあってもシンプルな2種類の動作を選択するのみで
爽快感を得られるように工夫されている凄さに改めて敬服します。
OpenBoRでも、もちろんそのようなシステムにする事は可能ですが
ついつい、おキャッスルヴァーニャのように足を止めて打ち合う方に魅力を感じて
しまうのですが、その場合、足場の選択、自分の手数からの攻撃手段の取捨、
どの方向の敵を優先的に攻撃するか、などなどプレイする側はもとより
状況(ステージ)を設定する側の手腕も問われる訳でして
設定をチョッと間違えると、一瞬で無理ゲーや作業になってしまうので
あ熊城などの練り込み完成度の高さに、いまさらながら関心しています。
160
(4): 2021/06/13(日)00:36 ID:54syd5Da(1/3)調 AAS
楽しい 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: 2021/06/13(日)00:57 ID:54syd5Da(2/3)調 AAS
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: 2021/06/13(日)01:05 ID:54syd5Da(3/3)調 AAS
>>160
BindEntity の Direction -1は常に親と逆向きです。
1-
あと 494 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s