2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

☆ベルトアクション作成 Beats of rageスレッド☆

1 :名前は開発中のものです。:2019/01/14(月) 03:57:54.21 ID:BfjgfhbB.net
フリーのベルトアクション作成ツールBeatsofrageでオリジナルの
ベルトアクションを製作するスレッドです。
http://ime.nu/senileteam.segaforums.com/

なかったので立て直しました

280 :名前は開発中のものです。:2022/02/27(日) 20:33:11.90 ID:ofDNDNVo.net
>>279
mod レスキューコマンド2やトラブルインサウスタウンなどで
使われてますね、仕組みとしては
掴み側の敵の攻撃が成功したら、レバガチャ用のentityを喰らったプレイヤーにbindしてます。
レバガチャentityはプレイヤーのレバーとボタン入力をスクリプトで検知して
自身のhealthを減らし、0になったら消滅するので脱出成功。
掴んだ側の敵は、delayなどで一定時間待ち時間を

281 :名前は開発中のものです。:2022/02/27(日) 20:37:32.32 ID:ofDNDNVo.net
経過したら、攻撃コマンドを実行させるというもの。
プレイヤーを掴むときはスクリプトのslamstart〜positionコマンドで拘束します。
実際にmodをプレイしたほうがわかり易いかもw

282 :名前は開発中のものです。:2022/02/27(日) 21:01:29.27 ID:ofDNDNVo.net
script @script
void main()
{
void self = getlocalvar("self");
void attacker = getentityproperty(self,"parent");
void victim2 = getentityproperty(attacker, "opponent");
void victim = getentityproperty(victim2, "playerindex");
int HP = getentityproperty(self,"health"), HPmax = getentityproperty(self,"maxhealth");
int x1 = getentityproperty(attacker,"x"), z1 = getentityproperty(attacker,"z");
if(HP>=HPmax){
changeentityproperty(victim2, "position", x1, z1);
performattack(victim2, openborconstant("ANI_FREESPECIAL"));
setidle(attacker, openborconstant("ANI_IDLE"));
bindentity(victim2, NULL());
performattack(attacker, openborconstant("ANI_PAIN"));
setentityvar(self, "madjon", NULL());
killentity(self);
} else if(playerkeys(victim, 2, "moveleft")){ // Left is pressed?
changeentityproperty(self, "health", HP+4);
} else if(playerkeys(victim, 2, "moveright")){ // Right is pressed?
changeentityproperty(self, "health", HP+4);
} else if(playerkeys(victim, 2, "attack")){ // Attack is pressed?
changeentityproperty(self, "health", HP+2);
} else if(playerkeys(victim, 2, "jump")){ // Jump is pressed?
changeentityproperty(self, "health", HP+6);
}
}
@end_script
これが心臓部で、レバガチャEntityのヘッダー部に記述すると、このEntityが存在しているあいだ実行され続けます。
で、Anim Idleにレバガチャの画像を表示させればOK、上のスクリプトだと、Healthを増やしてMaxHealthまで行ったら脱出ですね。

283 :名前は開発中のものです。:2022/02/27(日) 21:07:55.32 ID:ofDNDNVo.net
レバガチャEntityが出現するとき(Anim Spawn)、NPCやOBSTACLEを掴んだら
自動で消滅するようになっていますね。
anim spawn
@script
void self = getlocalvar("self");
void atk = getentityproperty(self,"parent");
void vtm = getentityproperty(atk, "opponent");
changeentityproperty(self, "health", 1);
if(getentityproperty(vtm, "type")==openborconstant("TYPE_NPC")
||getentityproperty(vtm, "type")==openborconstant("TYPE_OBSTACLE"))
{
killentity(self);
}
@end_script

284 :名前は開発中のものです。:2022/02/27(日) 21:51:12.10 ID:ofDNDNVo.net
別のテストのときの動画なので、ちょっと混沌として分かりずらいですが
レバガチャの様子がが映ってたので参考になれば。

tu.be/V4o4JU56YFU

285 :名前は開発中のものです。:2022/02/28(月) 02:55:23.68 ID:T0w0iYnz.net
>>280-284
ぐおおおおお!お手間取らせました、すみません!

やっぱり簡単にはいかないんですね…全く理解が及びませんw
少しずつやってみようと思います、ありがとうございましたm(_ _)m

286 :名前は開発中のものです。:2022/02/28(月) 18:49:21.11 ID:e4RME2GR.net
>>285
mod トラブルインサウスタウンの data/chars/misc/grab/grab1.txt
に上のレバガチャentityがあります。
基本 >>251 のようなslamスクリプトと一緒に混ぜて使います。
modをプレイして動作を実感したあと、entityのtxtやスクリプトを
覗いたほうが理解しやすいかも?
txtをコピーしてキャラ画像を差し替えてみたりとか。
私は良く関係無い画像を表示させて、しおりというか目印にしてますw

287 :泥酔迷走スーパーラリー:2022/02/28(月) 20:37:06.80 ID:ya7gt2me.net
ファイルが大きすぎる上に投げ抜けできた試しがないので
Bad SchoolGirlsの
ひなたとかの方が良くないですかね?
受付時間がひどいですけど

288 :泥酔迷走スーパーラリー:2022/02/28(月) 21:05:31.57 ID:ya7gt2me.net
545c . com /f/13296827-500775648-7a875b
(空欄3個)
パス? afeidanji

289 :名前は開発中のものです。:2022/03/01(火) 02:54:01.00 ID:49Ib5jCa.net
>>287 さんの MODでも同じような(原型一緒)処理なので、
入手し易い方で大丈夫です。
投げ抜けの難易度に関しては Data/Scripts/escript.c などに
void spawngrab(void vName, float fX, float fY, float fZ,int HPgv, int Num2, int Num)
こんな感じで、投げ抜けようのBindスクリプトが用意してあって、
float X Y Z はそのまま座標
int HPgv にセットしたパラメーターが例えば200なら、
レバー(左右)とボタン(アタック・ジャンプ)を合計200回ていどガチャガチャしないとです。
int Num2は{1}か{2}で投げ抜けた時の双方リアクションの選択、
int Numは謎、setentityvarで収納してますがGrab1では参照してる箇所がないので
他の場所のフラグでしょうか。

@cmd slamstart
@cmd spawngrab "grab1" 200 200 1 150 2 8
@cmd position 0 30 60 1 0
@cmd depost 0
@cmd throw 40 1 5 1 0 0

こんな感じで差し込んで使うことになるかと思います。
Depost〜 Throw〜 までの間に 待ちFrame を制限時間としてはさみます。
試してませんが Delay 3000 とかでもいいのかも。
Hurt〜をはさんで、抜けるまでジワジワダメージでも良いかもしれません。

構造を知ってしまえば単純なことなんですが、それを思いつく方々の発想の柔軟さに敬服します。

290 :名前は開発中のものです。:2022/03/04(金) 03:31:38.49 ID:y6oPXV1f.net
キャラクタの登場が大爆発だったり、specialアタックが天空高くヒップアタックだったり
謎のシュールさが良い味のmodを提供している、
G.P.Smith氏がHAG+3というmodを上げてらしたんで、
もしやと思ってプレイしてみましたが元のmodはHAGv5.0のようです。
v5.0とv6.0の違いはプレイアブルキャラだけのようですが、
剣を持ったWWがプレイヤーキャラだったりと中々カオスですw
スクリプト無しでかなり軽いんで人気なんですかね?

291 :名前は開発中のものです。:2022/03/04(金) 07:39:18.87 ID:vVdcxQXF.net
もう少しだけヒントを
是非お願いします!

292 :名前は開発中のものです。:2022/03/04(金) 08:56:57.17 ID:vVdcxQXF.net
284様ありました!
情報ありがとうございます!

293 :天堂少女6.0探しています:2022/03/04(金) 10:31:25.42 ID:cEKsJ0D+.net
天堂少女6.0探しています
ありがとうございます!やってみたけれども
Dボールの嫁(18gou)さんとかB.jenetさんとかがいなかった
本物はキャラクター10人超えているはずで難易度セレクト的なものがあるはずです
これら本物?(中華)にしかない素材の断片をずっと探していたのですよね
でもなかなかうまくいきませんね

294 :天堂少女6.0探しています:2022/03/04(金) 11:12:53.78 ID:cEKsJ0D+.net
もしも見つけていたら更なるヒントを願っています

295 :天堂少女6.0探しています:2022/03/04(金) 16:23:19.06 ID:cEKsJ0D+.net
スミスちゃんはコウちゃん作品使っていた?というよりもむしろ
ほかの人の作品をアップしすぎです(笑)

296 :名前は開発中のものです。:2022/03/05(土) 08:00:40.28 ID:p49CKOCm.net
KOH氏の特徴のあるキャラ動作までよく似てますね。私はキャラのモチーフの選定センス(こより等)と愛のあるグラフィックでKOH氏のファンです。
Smith氏の「細かい事はいいから勢いと爆発だ」的なセンスも好きです。

297 :名前は開発中のものです。:2022/03/06(日) 03:35:38.26 ID:D4DSTBj4.net
お手本MODとしてかなり有名かと思います、CrimeBustersを480x270に対応させようと
いろいろ弄ってみましたが、どうやら既にあるっぽい?半分諦めムードw
せっかく作ったのでステージ1の動画(音声無し)。
P1とP2の操作コンフィグを同一に設定して擬似2Pプレイ。

tu.be/dgHMFoynmAg

298 :名前は開発中のものです。:2022/03/10(木) 01:37:04.97 ID:iC7iqZ0i.net
そういえばピヨリみたいなのって作れるんでしょうか?

299 :名前は開発中のものです。:2022/03/11(金) 03:47:02.05 ID:aFe4cfAL.net
>>298
考え方によるのですが、
ムゲンのようなガチ対戦がからむものは、ちゃんと作ったほうが良いのでしょう。
OpenBoRは基本乱戦メインのサイドスクローラーが多いので、大雑把で良いと思います。
作ろうと思えば、ピヨリ値的なものが蓄積していって
MAX近くになった際に大きい攻撃力がヒットしたらピヨる
というようなものは手間の割りに効果が見えにくいので(専用エフェクト作れば良いのですが)
プレイヤーのFreespecialなどで、Attack9はピヨリ技というように決めておき
喰らう側の Pain9にピヨリAnimを設定しておくのが手っ取り早いのではないでしょうか。
こうする場合は Models.txtに <MaxAttackTypes {int} で上限(初期4上限99)
を増やしておかないといけません。
ちょっと違いますが
Attack {x} {y} {width} {height} {ダメージ} {吹き飛び} {防御不能} {エフェクト表示無し} {硬直時間} {Z攻撃範囲}
これを Attack 0 0 100 50 10 0 0 0 60 0 とすれば 攻撃がヒットすれば60フレーム分硬直します。
他にも Attackコマンドのすぐ下に Stun 3などと記述すれば3秒間硬直します。

300 :名前は開発中のものです。:2022/03/11(金) 05:25:36.84 ID:/kzpLClR.net
ダウン、動けない、追撃、拘束系
挽歌くにお等みたいに細かい事ができるものは殆ど無い見たことが無いです
openborはどうでしょうか
くにお等はバックドロップや馬乗りも印象的でした

301 :名前は開発中のものです。:2022/03/11(金) 11:57:25.86 ID:UqoUjlxU.net
>>299
ピヨリ値蓄積みたいなのをやりたかったんですけどやっぱ複雑ですか…
ピヨリ専用のリアクションいいかも知れません、ありがとうございました!

302 :名前は開発中のものです。:2022/03/12(土) 01:40:59.64 ID:eSAMRvJC.net
OpenBoR の内部の変数、 getlocalvar("self")など、よく見るかと思います。
すごく大まかに分けて localvar と globalvar というのがあって
読んで字のごとく local は一時的 global はlocalに比して長期的に数値を保持しておけます
なので int piyopiyo =0; 攻撃を受けるたび piyopiyp += piyopiyo;
setglobalvar(getlocalvar("self")+"PIYO", piyopiyo);
な感じで Anim Fallに if(getglobalvar(self+"PIYO") => 100) { ピヨリAnimに跳ぶ}
的な事はできるかも?
馬乗りはスクリプト Slamで追撃はFindtargetでプレイヤーの向いている方向の180ドットくらいを調べて
そのターゲットがFall中なら、攻撃Animへの移行とかすれば良いかもしれませんね。
SoR2XなどのMODでやってたような?
蛇足ですが相手に攻撃が当たっているのが確定なら(didhitscriptとか)、
void tar = getlocalvar("damagetaker");
int enextanim = getentityproperty(tar, "nextanim");
int enextthink = getentityproperty(tar, "nextthink");
changeentityproperty(tar, "nextanim", enextanim +100);
changeentityproperty(tar, "nextthink", enextthink +100);
こんな感じにすることで+100で0.5秒程度、ダメージを与えた敵を
完全に硬直させる事ができます。

303 :名前は開発中のものです。:2022/03/23(水) 01:49:53.63 ID:YS0aCHsY.net
アニメカオスやHAGなど話題に上っていたので、私も”みたいなもの”を作りたいなと思いたち、
何もギミックなど無く、ただ敵を適当に配置してボスまで10分程度のステージ。
しかもステージリソースなどは他の方が作成したものをお借りさせて頂いてるのに、
それでも3日以上かかるという、自身のセンスの無さに辟易。
いくつか実験的なことをしてるとはいえ、混沌としてしまい、たびたびプレイヤーを
見失う事になる悲惨な構成。ただキャラをバラ撒くだけでもこんなに難しいとは。
まあある意味カオスだしいっか。
ステージ構成の〜.txt中でも@scriptで各種Entity(敵とかNPCとか何でも)をTossEntityで
ステージに放り込んだりできるのは発見でした。
ExecuteAnimationやPerformAttackなどで、ステージ登場時に特定の動きも
させられます。動画の最初に敵が跳びこんで来るのとか。
tu.be/DZkZLRIJmxk

304 :名前は開発中のものです。:2022/03/23(水) 02:14:49.64 ID:YS0aCHsY.net
spawn ninja
flip 1
map 1
coords -200 200
@script
void main()
{
void self = getlocalvar("self");
performattack(self, openborconstant("ANI_Attack1"));
tossentity(self, 3, 3, 0);
}
@end_script
at 600

こんな感じで記述すると、{Entity}Ninjaが anim Attack1の体勢で
Y(a)3,X3,Z0の勢いで跳び込んできます。

void self = getlocalvar("self");
changeentityproperty(self, "TYPE", openborconstant("type_NPC"));
changeentityproperty(self, "Hostile", openborconstant("type_ENEMY"));
changeentityproperty(self, "Candamage", openborconstant("type_ENEMY"));
こんなのを記述すれば敵をNPCに(逆も)できます。結構便利。

305 :名前は開発中のものです。:2022/03/23(水) 03:42:34.71 ID:YS0aCHsY.net
意外と知られて無いのかも?
anim attack ではなく、コマンドのattackでattack4と記述して、このattack4が相手にヒットした場合、
ヒットした相手にanim pain4やanim fall4などが存在していれば、
そのanimが優先して実行されます。
スクリプトslamstartなんかは、これを利用して専用ヤラレを表現してるんですね。
attackコマンドには一緒に記述することで、他にも特別な動作をさせるサブコマンドがあるので
DCマニュアルで調べてみると面白いです。
よく使う吹き飛びの距離を変化させるdoropvとか、
forceDirectionとstunを組み合わせると、相手を振り返らせてそのまま硬直させるとか。

306 :名前は開発中のものです。:2022/03/23(水) 07:46:06.96 ID:YS0aCHsY.net
doropv ミス
dropv Y X Z 高さ 幅 奥行 に吹き飛ばす方向の調整attack コマンドと一緒に使用

面白いのがDOT 多分ダメージオーバータイムの略で、指定したダメージを
一定時間と回数(5ダメージを1秒に1回3秒間など)、ヒットした相手に与える。
OTG オンザグラウンド?anim fall等で地面に倒れている相手にもattackがヒット、
ただし倒れている相手にBBoxを設定する必要があります。
結構沢山の要素が設定できるので、標準コマンドでもかなりの事が出来ますね。

307 :名前は開発中のものです。:2022/03/24(木) 08:53:50.15 ID:SUDjzvRe.net
DCマニュアルとうのは
>>2 の上段のサイトのことですね。
英語ですが、ディープL先生に訳してもらえば
かなりの情報が得られると思います。

308 :名前は開発中のものです。:2022/03/24(木) 09:06:51.52 ID:SUDjzvRe.net
最初はスクリプトなど意識せず、初代BoRのモデル設定Txtなどを読んだり、
プレイヤーキャラや敵等のHealthを100から200にするだけでも、かなりバランスが変わるのが分かると思います。
登場キャラや設定も少なめで基本はシッカリしてるので、構造が分かり易くエディットをミスしてバグっても、追いやすいというのもあります。

309 :名前は開発中のものです。:2022/03/27(日) 01:42:21.92 ID:HrM0WEsM.net
倒れている敵に追撃できないか?
簡単に作る場合は、Anim FreeSpecial などの コマンド Attack にOTGを設定して
置けばよいのですが、喰らう敵側の Anim Fall に BBoxを設定しておかないと
当然のごとく攻撃は当たりません。
通常のAnim Attack に スクリプトで FindTarget して、そこで取得できた敵のX,Y,Z
とプレイヤーのX,Y,Zを比較して、攻撃が届く距離なら コマンド PerformAttack で
ダウン攻撃Animに移行すればよいわけですが、この場合も、
敵側のAnim Fallには BBoxの設定が必要です。
あとは、FindTarget して、距離を測るまでは一緒で、見つけた敵を強引に
スクリプト SlamStart で拾って、あとはよしなに。
もともと1対1の戦闘はそれほど考慮されていないので(それならムゲン)
特定の敵の情報を得るのは FindTarget、Opponent、DamageTaker くらいしか
私は知りませんので、なんとかそれでやりくりしてます。

310 :名前は開発中のものです。:2022/03/27(日) 01:45:54.18 ID:HrM0WEsM.net
>>307 2じゃ無くて >>7 ですね。
さらにミスって上げてしまいました。ごめんなさい。

311 :名前は開発中のものです。:2022/03/30(水) 02:10:47.88 ID:jn3q1exc.net
anim idle
@script
void self = getlocalvar("self");
void rflag = getentityvar(self, 1);
if (rflag==NULL()){ setentityvar(self, 1, 0);
} else {
int rotate=getentityvar(self,1);
if(rotate>=360){rotate=0;}
changedrawmethod(self, "reset", 1);
changedrawmethod(self, "rotate", rotate);
changedrawmethod(self, "fliprotate", 1);
rotate+=18;
setentityvar(self, 1, rotate);
}
@end_script
loop 1
delay 2
offset 42 43
attack 0 0 83 86 5 0 1 0 12 12
frame data/chars/spiral/ssword1.gif
これは、射出される弾の1枚の絵を回転させられないかな?と作ったもの
回るには回ったんですが、やはりDrawMethod Rotateの特製か、中心を軸に回転させるのが難しい
無い頭で苦心するより、ペイントソフトで回転する絵を作ったほうが早そうです。

312 :名前は開発中のものです。:2022/04/07(木) 09:32:24.21 ID:RWamgL6H.net
bindentityの機能にターゲットと同じAnimを実行するというものがありますが
速いdelayやAnimを連続切り替えしたりすると、他のentity(敵とか)に影響が出て描画が遅れたりすることがあるようです。
特に同じAnim内でdrawmethodも使っていると症状が出やすいようです。
レイヤーコマンド使って優先順位付けしたら違ってくるかも?などと考えています。
かなり軽いエンジンなので、あんまり無理させちゃいけないのかも知れません。

313 :名前は開発中のものです。:2022/04/07(木) 11:11:43.62 ID:V6ejTjoQ.net
>>311 の回転ですが
元絵を余白も含めて縦横比を同じくらいにして
offsetを画像の中心付近にすることで、
結構綺麗に回転します。
飛翔体などならそんなに違和感ないですね。
コツが分かってくると、スピンアタック系や
ジャンプ中の前転などそれなりに使えそう。

314 :名前は開発中のものです。:2022/04/07(木) 21:23:18.45 ID:RWamgL6H.net
drawmethod rotate #とfliprotate 1はよく使ってます。
前者は好きな角度に回転させるのと、後者は対象のentiryの向きに合わせて
自動で反転してくれるというもの。
shiftx #にも自動反転があればもっと便利になるのですが、
中々難しいものです。

315 :名前は開発中のものです。:2022/04/08(金) 01:33:24.24 ID:W27/nC7P.net
>>304 のChangeEntityPropertyでTypeやHostileを変更するを利用して
キャラ(Entity)がKnockdownCountで転ぶ(Fall)度に
敵になったり味方になったり変わる様にしたんですが、ChangeDrawmethodなどで
色も変えないと混乱の元なので却下。
動画では、一部の敵を倒すと一定時間NPCが出現するようにしましたが、このほうが分かり易いですね。
Stage2では敵を倒すとどんどん増援が来るようにしたはずが、レベル設定のGroup{Min}{Max}の
影響も受けるようで、そんなに敵だらけになるようなことはありませんでした。
Stage1のようにEnemyポータル方式のほうがメリハリがついて良いかもしれません。
テストとはいえ、コンセプトや世界観なしで適当に登録してある敵をただ順番に出現させているだけなので
ゲーム性は全く無いですね。ステージもTGS4からの流用です。オリジナルを作れる日はいつの事やらw
tu.be/k1-ss0M1Klc

316 :名前は開発中のものです。:2022/04/09(土) 02:45:15.79 ID:huMt1Pej.net
>>302 にてlocalvar と globalvar について軽く触れていますが、もう一つ
EntityVar もあり、setEntityvar({entity},{index},{var}) 的につかいます。
EX. SetEntityVar(Self, 1, 999)GetEntityVar(Self,1)な感じで、
好きな入れ物(変数)として使えます。
Localvarはシステムも使っていて、結構な頻度でリセットされるので、
キャラ(Entity)固有の変数収納場所(フラグ処理とか)として便利かと。
MOD SailorMoonでは Kastorというキャラが、これを利用して
2対でプレイヤーの情報を共有して、同時攻撃をするなどしています。

317 :名前は開発中のものです。:2022/04/09(土) 02:58:53.09 ID:huMt1Pej.net
>>316
なので、いわゆるピヨリ値などはGlobalVarよりEntityVarに収納したほうが
管理しやすいかも知れませんが、いまのマシンパワーならメモリ効率とか考えなくても
とくに支障はなさそうなので、使い易いほうで良さそうです。

318 :名前は開発中のものです。:2022/04/11(月) 03:53:09.40 ID:mFlGfZLx.net
プレイヤーが敵の情報を取得して、その敵を投げた際にdrawmerhod rotateを
使って回転しながら吹き飛ぶようにしようとスクリプト組んでたんですが
ぜーん全上手くゆかないので、プレイアブルキャラ作成に逃避

319 :名前は開発中のものです。:2022/04/12(火) 01:32:29 ID:vWluw1zD.net
void slamSpin() {
void self = getlocalvar("self");
void target = getlocalvar("Target"+self);
if(target==NULL()) { target = getentityproperty(self, "grabbing");
setentityvar(self,3,NULL());
setlocalvar("Target" + self, target); }
if(target!=NULL()) {
if (getentityvar(self, 3)==NULL()){ setentityvar(self, 1, 36);
setentityvar(self, 2, 16);
setentityvar(self, 3, 69); }
int zoom = getentityvar(self,2);
int zoomfct = 256+(zoom*4);
int rotate = getentityvar(self,1);
if(rotate>=360) { setentityvar(self, 3, 99); }
changedrawmethod(target, "enabled", 1);
changedrawmethod(target, "rotate", rotate);
changedrawmethod(target, "fliprotate", 1);
changedrawmethod(target, "scalex", zoomfct);
changedrawmethod(target, "scaley", zoomfct);
changeentityproperty(target,"projectile",1);
updateframe(target, 0);
setentityvar(self, 1, rotate+=36);
setentityvar(self, 2, zoom+=8);
if(getentityvar(self,3)==99) { changedrawmethod(target, "rotate", 0);
setentityvar(self,1,NULL());
setentityvar(self,2,NULL());
setentityvar(self,3,NULL());
depost(0);
throw(999,1,0,4,3,0);
changedrawmethod(target, "alpha", 3);
spawnEF("crash",0,0,1,384,0);
anichange("ANI_DODGE"); } } }

320 :名前は開発中のものです。:2022/04/12(火) 01:51:05.23 ID:vWluw1zD.net
思ってたんと違ったけど、まあなんとか必殺投げが出来たので
最後の5行に別なスクリプトを呼んでますが、演出用なので
基本上のスクリプトをLooperという別なスクリプトで呼び出して使ってます。
動画のプレイヤーキャラ(黄色いの)が連続キックを繰り出しますが
ああいう同じ動きをするとき便利なスクリプトで、殆どのユーザースクリプトに導入されていると思います。
@CMD Looper 3 5 という感じで7番目のFrame Data/〜に記述すると
3番目のFrame から6番目のFrame までを5回繰り返すというもの
標準コマンドのLoop だと延々と繰り返してしますので、Looper の便利さが分かるかと思います。

動画だと動画のフレームが跳んでしまって分かりにくいですが、
なんとなーく私のやりたいこと分かっていただけますでしょうか?
tu.be/CRGXjQowAG8

321 :名前は開発中のものです。:2022/04/12(火) 02:29:22 ID:vWluw1zD.net
上のスクリプトは汎用性はほぼ無し、条件設定として
Health が25%切った相手を投げた際に30%の確立で発動な感じです
(動画ではテスト用に発動条件ユルユルですが)。
なのでやっぱり
攻撃者のAttack5 などに、相手側がリアクションとして Pain5 や Fall5 を
設定しておいたほうが結果手間が掛からないかと思います。

322 :名前は開発中のものです。:2022/04/13(水) 00:14:16.67 ID:aDur5ZAn.net
ピヨリについて、面倒だと思うよーとか適当な事言っておいて
EntityVar に値を入れておけば楽だと思うよーとか超いい加減なことばっかレスしてるんで
一応作ってみました、結果そんなに苦労はないかも?
今回はプレイヤーがピヨリ値を蓄積し、一定に達すると4秒間ピヨリ
レバガチャで時間短縮と成功でリバーサル攻撃。
内容は単純でAnim Pain実行時ピヨリ値をプラス、Anim Idleで少しづつピヨリ値減少
一定数たまったら、Executeanimationで”Ani_Follow{#}”でピヨピヨ実行
このとき、レバガチャEntityをプレイヤーにBindEntityして
ガチャ成功するとリバーサル攻撃用のAnim_Follow{#}にExecuteanimationするというもの
レバガチャEntityにはLifespan 4が設定してあって、4秒で自動消滅
CPU戦でピヨるとかウザイだけかもという認識でしたが、作ってみたら意外と良かったw
tu.be/6iLBqsjC2eI

323 :名前は開発中のものです。:2022/04/13(水) 01:10:35.54 ID:aDur5ZAn.net
anim pain
@script
if (frame==0) {
void self = getlocalvar("self");
int incDM = getentityvar(self,9);
if((incDM==NULL())||(incDM<=0)) { incDM=1; }
incDM+=incDM;
spawn01("dmflashsp", 0, 4, 0);
if(incDM>=20) { executeanimation(self,openborconstant("ANI_Follow9")); }
setentityvar(self,9,incDM);
}
@end_script

ピヨリ蓄積部分もこんな感じで単純です。Anim Painの度に倍になってゆき、
数値20以上でピヨリAnim(Follow9)を実行。

anim idle
@script
if(frame==5) {
void self = getlocalvar("self");
int incDM = getentityvar(self,9);
if (incDM<=0) { setentityvar(self,9,NULL()); }
if(incDM!=NULL()) { setentityvar(self,9,incDM-=1); }
}
@end_script

アイドル状態でピヨリ値1ずつ減少。AnimのFrameが最後の方まで描画されたら
減少するようになってます。または、Anim Sleepを設定しておいて、
そちらで下がるようにしても良いかも。

324 :名前は開発中のものです。:2022/04/13(水) 01:17:03.20 ID:aDur5ZAn.net
script @script
#include "data/scripts/escript.c"
void main()
{
void self = getlocalvar("self");
void par = getentityproperty(self,"parent");
void vict = getentityproperty(par, "playerindex");
void vict2 = getplayerproperty(vict,"entity");
int HP = getentityproperty(self,"health");
int HPmax = getentityproperty(self,"maxhealth");
if(HP>=80) {
spawn01("dmsuper", 0, 0, 1);
executeanimation(vict2, openborconstant("ANI_Follow11"));
bindentity(self, NULL());
killentity(self);
} else if(playerkeys(vict, 2, "moveleft")) { // Left is pressed?
changeentityproperty(self, "health", HP+4);
} else if(playerkeys(vict, 2, "moveright")) { // Right is pressed?
changeentityproperty(self, "health", HP+4);
} else if(playerkeys(vict, 2, "attack")) { // Attack is pressed?
changeentityproperty(self, "health", HP+2);
} else if(playerkeys(vict, 2, "jump")) { // Jump is pressed?
changeentityproperty(self, "health", HP+6); } }
@end_script
レバガチャ部分もシンプルで、方向キーで+4、アタック+2、ジャンプ+6で
80以上溜まったら成功(Follow11、リバーサル攻撃)

325 :名前は開発中のものです。:2022/04/13(水) 01:25:34.49 ID:aDur5ZAn.net
2行目で #include "data/scripts/escript.c" してるのは、
成功時の演出 spawn01("dmsuper", 0, 0, 1);の為だけです。

anim spawn
@script
void self = getlocalvar("self");
changeentityproperty(self, "health", 1);
@end_script
最初に Health 100(MaxHP)などと設定しておき、Anim Spawn時に
現HPを1にしています。
これを プレイヤーにBindEntity するのですが、スクリプト上方のSelf,Par,Vict,Vict2
ここを理解するのに頭こんがらがるかも知れませんね、元々他のモッダーさんが組んだ
スクリプト(古くからあるのでBloodBane氏でしょうか?)をアレンジしましたです。

326 :名前は開発中のものです。:2022/04/13(水) 04:05:16.91 ID:aDur5ZAn.net
元々、仕様とバグのギリギリいってる手法なので、
ピヨリ中にもう一回敵からのBindEntityを利用した攻撃を受けると
OpenBoRが落ちますw
やっぱり標準コマンドで何とかしたほうが良さそうですね。
レバガチャで回復早めるとかしなければ、EntityVarを使って
値を蓄積して、一定時間無防備になるというのは
バグの危険なく可能です。
中々難しいものですね。

327 :名前は開発中のものです。:2022/04/17(日) 02:42:23.91 ID:xLR26ELd.net
なんか煮詰まったので、プレイアブルキャラ作成に逃避。
ムゲンからキャラのインポート(聞こえが良いですね)。
ここで新たに、光弾問題に遭遇、どうもDBキャラはいろいろ撃ちますが、
単純に弾を撃つならCustKnifeなりで作ればよいし、誘導弾ならType NPCのSubType Chaseとかで
追尾させればよいのですが、なんとなく弾幕作りたいな〜とかやってドハマリ中。
通常攻撃とシンプルな特殊技はこんな感じかな?
tu.be/_xQBhCUit8c

328 :名前は開発中のものです。:2022/04/17(日) 03:48:50 ID:xLR26ELd.net
SpawnEF S{vName} {X} {Y} {Z} {S} {A} {R} {Ani}
ナニコレ?
私個人のスクリプトですが、上の動画でも多用されています。
XYZは単純に座標、SはScale(Zoom)AはAlpha(透明度)R(回転)Ani(Anim)
本来、複雑な手続きを簡略化するのもスクリプトのメリットの一つだと思いますが
色々出来るようにして、かえって煩雑になった悪例w
ちゃんと設計やらしない大雑把な性格そのままです。
怪我の功名とでもいいますか、一つAnimがあれば回転拡大縮小をつかって
さまざまなエフェクトに活用出来そう。
ただし、ソースを見ないと意味不明、ですが、自身のオリジナルではないので
アップは憚れるという、ムゲンと共通のジレンマ。
オリジナルの作者様には尊敬しかないです。

329 :名前は開発中のものです。:2022/04/17(日) 16:44:32.78 ID:xLR26ELd.net
openBoRには標準でsin cos atanなど揃っていたので、扇弾を弄ってたのですが
考えてみれば敵はそんなのお構いなしですし。
自分が敵にやられたらイラだつだろうしで、全方位弾にしました。
おおよその敵の方向に撃つ直進弾がたまに止まっちゃいますがご愛嬌w
一見おおっ!となっても実は使い道の無い技ということで。
特に敵以外との衝突判定はしてないので32×4射ってますが
さすがopenBoR処理落ちなどしないですね。
セブンティーン氏が洪水おこしてますが、技が思いつかないので適当です。
Krrnはサポートに飛び込んできて、入力に連動して攻撃を繰り出すように出来ないか考え中。

330 :名前は開発中のものです。:2022/04/18(月) 12:39:49 ID:+se/Swu+.net
何の事だと思ったら、動画の話しなんですね。
まだ、何も分かりませんが、日本語での解説ありがたいです。

331 :名前は開発中のものです。:2022/04/19(火) 03:14:29.19 ID:a3xIrRSp.net
>>275
Anim Death 中に SpawnFrame を実行させれば
倒されるたびに新たな敵({Entity}なら何でも)を出現させられます。
Anim Deathを必ず実行させる為に Falldie 1or2(Death 1or2)
nodieblink はお好みで設定すればOK。
ですが Level(ステージやBranch)の中で Group 1 2 など出現キャラ数に
制限をしていると、SpawnFrame が実行されないので注意です。
Weapon で設定した場合、一定数転んだら別キャラ({Weapon})のような感じだったり
任意のタイミング(Freespecialなど)で切り替えたりして変身的に使えます。
{Weapon や Entity}で継承される技(Anim {xxx})が被ったりすると
上書きされたり(止める事もできますModelflag)するので気をつけないと
謎の技が暴発したりしますw
Weapon を使うなら Animal も研究すると面白いかもしれませんね。

332 :名前は開発中のものです。:2022/04/19(火) 03:24:07.55 ID:a3xIrRSp.net
>>別キャラ({Weapon})
({WeaponFrame} や{WeapLoss} などを設定して切り替わるようにする)。です。
このあたりの設定の細かさは流石です。

333 :名前は開発中のものです。:2022/04/20(水) 21:43:31.43 ID:PW9VJXxm.net
weaponの技の上書きというより、マージと言ったほうがわかり易いかも?
Anim Freespecial1のみプレイヤーキャラにあって、weaponにAnim Freespecial2があった場合、武器を拾ったプレイヤーは両方使えるようになります。
Modelflag{0,1,2}を設定してないと、混ざったままになってしまうことがあるということですね。

334 :名前は開発中のものです。:2022/04/22(金) 01:04:20.67 ID:g9+olsrt.net
算数も割り算の時点で微妙な私は、もちろんプログラムなんて全く分からなかったけれど
kt住江さんの作品に出会ってOpenBoRを知って、なんとか拡散砲を撃てるようになりました。
リソースは全部ひと様のものなので本来動画すら微妙なんですが、
スクリプトの中身見たら四則演算って知ってる?って感じですが
そんな私でも、For文とDrawmethodを組み合わせると、
こんな感じも演出出来てしまう。そしてすっごく軽いOpenBoR凄いという話です。

tu.be/hpDEMufHzC8

335 :名前は開発中のものです。:2022/04/25(月) 03:51:31 ID:vu/W7WGq.net
NO18さんの体力低下時スペシャルKRRN
最初はプレイヤーは空中に退避、各ボタン押下でMPに応じて技を繰り出す
というような感じにしたんですが、操作が煩雑になるので連打に
なんか連打も面倒(ピヨリで十分イライラですし)。
結果、全ての敵のそばに出現して勝手に暴れるように
ただ、これをやると、その後MPの回復を0か遅くする、
またはタイマーセットで規制しないと
体力下げてスペシャル連打でいいよね?になってしまうのですが、
そのへん作り込むのは面倒、良いアイデアないでしょうか

tu.be/iCGEtG9JQ8w

336 :名前は開発中のものです。:2022/04/25(月) 19:15:40.23 ID:vu/W7WGq.net
だんだん脳内で設定してスクリプトを切り張りしても、収拾つかなくなってきたので
ルールのまとめをしてゆこうかと思います。
拡散するショットはMPの消費を激しくして、さらに3回を限度に。
KRRNの呼び出しはHP20%以下、1回きり。しかし、KRRNの攻撃力は高い。
KRRNを呼び出すとMAXMPは3分の1程度に(大技不能)、ただしMP回復力大幅アップ。
HP20%以下からプレイヤーキャラがHPを50%以上回復すると、
上のペナルティ(メリット)はリセットされる。
ピヨピヨから回復するための操作でMPをマイナスされる、
ただし回復に成功すればMPは回復する。
回復操作でMPが減り、時間切れではマイナスのままです。
敵の捕縛攻撃時に回復操作した場合、MPとHPはマイナスされる。
成功してもMPはマイナスのまま。
しかし、敵に大きなダメージを与えられる(今回の動画では映っていません)。

あとは追撃作成すればだいたい良いかな?

tu.be/KkTDOyFT9hw

337 :名前は開発中のものです。:2022/04/26(火) 01:26:17.09 ID:tRI20Ut9.net
>>336
とやったら弱くなりすぎた。
ピンチ状態(HP20%以下)ではMP回復2倍は良い感じに思える。
その辺を分かり易くするエフェクトが必要かも?
ピンチからHP50%まで回復すると、MP回復2倍のまま
MaxMP100のハイパー状態に、でも拡散攻撃を実行すると
MaxMP70MP回復25%ダウン(標準は "mpset" 100 0 0 8)
なぜ、こんな事が気軽にできるかというと
@cmd changeentityproperty getlocalvar("self") "mpset" 70 0 0 6
で即座に変更できるからです。

拡散攻撃に混ぜた挙動がおかしい弾は、
Range 0 100で追尾(SubType Chace)のType NPC のお手軽誘導弾。

これまでLocalVarで管理してたフラグを EntityVarで管理できるように。
Set(Get)EntityVar({Entity}{Index}{Var})というように使うのですが
{Entity}毎の管理なのでとても便利です。このへんは以前からOpenBoRに存在してました
私が知らなかっただけですw

追撃については動画のボス・アダーさんに抱きつくような仕草をして
直後に「渦」のようなエフェクトが発生しますが、あれが原型で
スクリプト的には、攻撃で吹き飛んだキャラがプレイヤーの攻撃範囲で
HPが残っていた場合、プレイヤーまで引き寄せ再度攻撃するというもの
「鞭」を装備したキャラを想定した攻撃なので素手では変な見た目になりますね。

338 :名前は開発中のものです。:2022/04/26(火) 01:47:14.17 ID:tRI20Ut9.net
>>337
最後の追撃ですが、
FindTarget や Opponent、 Grabbing(Grabbed)で選んだ対象が
ANI_Fall で A=Base のType Enemyだった場合、
そしてプレイヤーの攻撃範囲であったら
スクリプト SlamStart して地面を蹴りつける動作でダメージを与えるというものを
作ったのですが、ちょっと見た目的に結構エグかったので削除。
まあそれまでにナグるわケるは好き放題にしてたくせに、何故か引いてしまいました。

別キャラの相手の背後にテレポートしてキりつけるは別にOKなんですが、
人それぞれ結構苦手なシーンがあるかもしれませんね。

339 :名前は開発中のものです。:2022/04/26(火) 03:20:57.85 ID:tRI20Ut9.net
>>313
Drawmethod Rotate を使った回転について
マニュアルには −45 とすればマイナス方向の45度に回転させられるとあり
実際出来るのですが、画像の欠けが発生し易いようなので
素直に 315と設定したほうが良さそう。

Type Enemy の設定
Anim JumpAttack は
これとRange 設定(0〜100など)だけで自動で前方ジャンプ攻撃を行います。
Anim JumpAttack2 は
同じく Range 設定で 垂直ジャンプ攻撃になります。

Type Enemyも結構いろいろ設定できるので、凝りだすとキリが無さそうです。

340 :名前は開発中のものです。:2022/04/26(火) 07:34:52 ID:tRI20Ut9.net
こちらがコンボを繰り出していると、たまに敵が無敵技で逃げたり
反撃してきたりしますが、
EscapeHits {#} ここで設定した数値+1連続で攻撃を受けると
Anim Special2 が実行されます。
Falldie # やDeath # を1にしておくと、Health 0 で必ず
Anim Death が実行されるので、フラグや演出にも使えそう。
Walk Idle Pain Fall Riseなどの各Anim はほぼ必須な Animなので
通常の利用だけでなく、必ず実行される特性を利用した演出や
フラグの処理などに。ヘッダーで NoMoveを設定しておくと移動しなくなるので
こちらも便利に使えそう。

341 :名前は開発中のものです。:2022/04/28(木) 01:47:31.28 ID:k34JWO6S.net
anim rise
@script
if(frame==2) {
void self = getlocalvar("self");
int MHP = getentityproperty(self, "maxhealth");
if(getentityvar(self,"PNC")==NULL()&&getentityproperty(self, "health")<(MHP/5)) {
setentityvar(self,"PNC","On");
setentityvar(self,"PCT",openborvariant("elapsed_time")+1500);
spawnAni("FightEF4", 0, 0, 0, "ANI_Follow48");
spawnbind("piyo4", 0, 100, 1); }

int incDM = getentityvar(self,9);
if(incDM!=NULL()) {
if(incDM>20 && getentityproperty(self, "health")<MHP/4) { executeanimation(self,openborconstant("ANI_Follow8")); }
if(incDM>20) { executeanimation(self,openborconstant("ANI_Follow9")); }
setentityvar(self,9,incDM-=2);
}
}

@end_script

これで、攻撃を受けて倒れた時、Healthが20%以下ならピンチモードになり。
蓄積ダメージがあったらピヨリに。
この辺は、Anim Painなどにも記述しておきます。

342 :名前は開発中のものです。:2022/04/28(木) 01:51:47.77 ID:k34JWO6S.net
Anim Idle
@script
if(frame==4){
void self = getlocalvar("self");
if( getentityvar(self,"PNC")=="On" ) {
int MP = getentityproperty(self, "mp");
int MHP = getentityproperty(self, "maxhealth");
if(getentityproperty(self, "health")>MHP/2||openborvariant("elapsed_time")>getentityvar(self,"PCT")) {
changeentityproperty(self, "mpset", 100);
changeentityproperty(self, "mp", MP);
spawnAni("ALLSP", 0, 0, 0, "ANI_Idle");
changeentityproperty(self, "health",MHP*0.75);
setentityvar(self, "PCT", NULL());
setentityvar(self, "PNC", NULL());
setentityvar(self, "SSP", NULL());
setentityvar(self, "KSP", NULL());
}
}
}
アイドル状態になるたび、回復のチェックをして
ピンチになってから自力でHP50%以上か、または一定時間経過で自動回復。
EnergyCost {#} {#}これでMPのみで必殺技始動にしておかないと
Specialガンガン使ってHealth減らせば、一定時間後に自動回復しまくりで
超イージーにw キャラの調整って難しい。

343 :名前は開発中のものです。:2022/04/28(木) 02:03:08.09 ID:k34JWO6S.net
Type Enemy や NPCは
Range を設定する事で、一定距離内に入ったら攻撃を始めますが
彼我の距離が変わらないとずっと同じことを実行します。
int Crnd=rand()%20;
if(Crnd>10) {
changeentityproperty(getlocalvar("self"),"animation",openborconstant("ATK_Normal2"));
} else if (Crnd>0) {
changeentityproperty(getlocalvar("self"),"animation",openborconstant("ATK_FreeSpecial"));
}
こんな感じにランダム要素を入れてみたり。
Anim Idleも2〜3フレームしか実行されないことが多いので、Anim Attack#に
Idleの内容と同じアニメを用意して、たまにはボーっとさせるのも一興。
EnemyやNPCに Anim Get を用意してると、回復アイテムを拾います。
気をつけましょうw
まあそれを利用して回復アイテムを放置、
拾いに行く無防備Enemyをコテンパンにするのもあり。

344 :名前は開発中のものです。:2022/04/28(木) 02:14:43.42 ID:k34JWO6S.net
changeentityproperty(getlocalvar("self"),"animation",openborconstant("ATK_Normal2"));
上の"ATK_Nomal2"は"ANI_Attack2"とかで良いかもしれないけれど、
フリースペシャルは"ANI_FreeSpecial"でないとエラー
即興で適当に書いてしまいました。
ANI_ とATK_ てよく間違えるんです。

setentityvar(self,"PCT",openborvariant("elapsed_time")+1500);
これは結構便利で、Anim Fallなどのタイミングで設定して
openborvariant("elapsed_time")>getentityvar(self,"PCT")
こんな感じで現在時刻(OpenBoR内の)が「設定した時間を超えたら
何かする」というような使い方ができます。

345 :名前は開発中のものです。:2022/04/28(木) 02:24:25.39 ID:k34JWO6S.net
setentityvar(self, "PCT", NULL());
setentityvar(self, "PNC", NULL());
setentityvar(self, "SSP", NULL());
setentityvar(self, "KSP", NULL());

このへん、いちいち NULL()にしてますが、
if 条件で GetEntityVar(self, "KSP")!=NULL() というように
"KSPの"中身が空(NULL)ではなかったら「値をプラスする」や
==NULLだったら条件の始動にするなど、フラグとして便利
ただデフォは少ないのでScript.txt (注 Scriptsではない)の設定で増やそう。
あまり増やすとメモリ消費が激しいので、4096とかしないようにw

346 :名前は開発中のものです。:2022/04/28(木) 03:53:19.54 ID:k34JWO6S.net
ステージの設定で
Spawn {Entity}
Health 200
Aggression 30
Item Food
Coords 300 180 0
At 300
こんな感じに記述して、ステージ上に様々なキャラ{Entity}を登場させます。
もともとのキャラ{Entity}でHealth を50などと設定してあっても
上の例だと Health 200で出現します。
Spawn {Entity}の部分は特にキャラである必要はなく{Entity}でさえあれば
(Models.txtで設定)OKなので、特定の場所の演出用{Entity}でも良いわけです。
Item Food の所、そのキャラを倒すとドロップするのですが
演出用{Entity}でも、敵キャラでもOKなので色々ドロップさせると面白いですね。
ただ、1ステージで使える Spawn {Entity}は上限600個程度のようなので
ほどほどで、次のステージに移行しましょう(ステージが切り替わると各種リセットされる)。
上の方のレスでもあった@Script も使えば、かなり様々なことができそうです。

347 :名前は開発中のものです。:2022/04/30(土) 01:52:33.20 ID:rxj78wqY.net
anim spawn
@script
{
if(frame==2) {
void self = getlocalvar("self");
void sprite = getentityproperty(self, "sprite",getentityproperty(self,"animpos"));
int max_scale = 256;
if ( getentityvar(self,"size") == NULL() ) { setentityvar(self,"size", 16); }
int size = getentityvar(self,"size");
if( size <= max_scale ) {
changedrawmethod(self, "flag", 1);
changedrawmethod(self, "tintmode",5);
changedrawmethod(self, "tintcolor", 0x40ff40);
changedrawmethod(self, "scalex", size);
changedrawmethod(self, "scaley", size);
size += 16;
setentityvar(self,"size", size);
}
}
if(frame==3) {
void self = getlocalvar("self");
changedrawmethod(self, "reset", 1);
setentityvar(self,"size", NULL());
}
}
@end_script

348 :名前は開発中のものです。:2022/04/30(土) 01:53:21.89 ID:rxj78wqY.net
delay 40
drawmethod scale 0.3
offset 66 154
frame data/chars/plant/puke2.gif
delay 16
frame data/chars/plant/puke2.gif
@cmd looper 1 16
frame data/chars/misc/empty.gif

結局こーんな感じで愚直に拡大処理して敵を出現させたりしてるのです。
各{Entity}のデータを取得してスクリプトでスポポーンと処理したいものですが、
ひとつひとつ手動でやったほうがエラーも無く早いという。
エイティーンさんは、一回だけ自動回復付けて、なんか、もう、こんな感じで良いかなとラインに来たので
また別キャラに逃避します。

tu.be/C-_sJr-DUXM

349 :名前は開発中のものです。:2022/04/30(土) 02:15:26.77 ID:rxj78wqY.net
void sprite = getentityproperty(self, "sprite",getentityproperty(self,"animpos"));

ここは機能していないので削除です。こうして手探りで各コマンドの効能を調べてます。

切実にに情報が欲しいのが
int Swidth = getgfxproperty(sprite, "srcwidth");
int Sheight = getgfxproperty(sprite, "srcheight");
この辺の使い方で、GetGfxProperty でSprite情報を取得して
Swidth、Sheightでスプライト画像の幅やYの長さが取得できればいいなと
勝手に想像してるんですが、結果OffSetは0,0になってしまうので
まったく成功の兆しがありません。

例えば、Animの特定フレーム((AnimPos)のSprite(画像)の情報を取得して
その画像のキャンバス情報(横100*縦200ドットとか)を取得できる手段がありましたら
ご教授ください。宜しくお願いいたします。

350 :名前は開発中のものです。:2022/04/30(土) 02:33:43.50 ID:rxj78wqY.net
anim idle
@script
if(frame==2) {
void self = getlocalvar("self");
int MHP = getentityproperty(self, "maxhealth");
if(getentityvar(self,"PNC")==NULL()&&getentityproperty(self, "health")<(MHP/5)) {
setentityvar(self,"PNC","On");
setentityvar(self,"PCT",openborvariant("elapsed_time")+1500);
spawnAni("FightEF2", 0, 0, -1, "ANI_Follow12"); }
}
if(frame==3) {
void self = getlocalvar("self");
int incDM = getentityvar(self,9);
if(incDM!=NULL()) { setentityvar(self,9,incDM-=2); }
if (incDM<=0) { setentityvar(self,9,NULL()); }
if( getentityvar(self,"PNC")=="On" && getentityvar(self,"REV")!="On" ) {
int MP = getentityproperty(self, "mp");
int MHP = getentityproperty(self, "maxhealth");
if(getentityproperty(self, "health")>MHP/2||openborvariant("elapsed_time")>getentityvar(self,"PCT")) {
changeentityproperty(self, "mpset", 100);
changeentityproperty(self, "mp", MP);
spawnAni("ALLSP", 0, 0, 0, "ANI_Idle");
spawnAni("FightEF2", 0, 0, 0, "ANI_Follow29");
changeentityproperty(self, "health",MHP*0.75);
setentityvar(self,"REV","On");
setentityvar(self, "PCT", NULL());
setentityvar(self, "PNC", NULL());
setentityvar(self, "SSP", NULL());
setentityvar(self, "KSP", NULL()); } } }
@end_script

351 :名前は開発中のものです。:2022/04/30(土) 02:47:59.07 ID:rxj78wqY.net
>>301 さんのレスから
そんなに難しい事なんかないよ!と言いたくて、
すこしスクリプトを書いてみましたが、ポンコツな私の能力では
結局こんなんなっちゃって、もうなんと申したら良いかって感じです。
やりたいことは
HPが一定数減ったか?
HPが減った状態から回復したか?
強力な必殺技を一定数使ったか?
だけなんで、内容はシンプル。ただ、関連するAnimが他に
Anim Faint、Anim Fall、Anim Pain、Anim Rise
少なくとも4つあるので、記述そのものはコピペでOKとはいえ面倒だなーと思いました。
手前味噌ですが、やってみたら意外とアクセントになって良かったかも?
という感想です。

352 :名前は開発中のものです。:2022/05/07(土) 01:55:26 ID:NmRbFI7S.net
スクリプトで Looper を紹介しましたが
標準コマンドの Loop も十分に活用できるものです。
基本は Loop 1という感じで 1と0でOn/Offの関係です。
Loop 1 5 とすると10FrameあるAnimの場合、一回10Frame目までAnimを
実行した後、次は5Frame目から繰り返しでAnimを実行します。
例えば、Anim Runで0〜4Frameまでは走り始めのアニメ、5〜10Frameは
走っているアニメとすれば、最初の一回だけ0〜4Frame、以降5〜10Frameの
繰り返しでスムーズに走っている状態のアニメを再生できるわけですね。
Anim WalkやAnim Idleといったお馴染みの動作を想像していただければ分かり易いかと。
Walk Idle Run などはいつでも別な行動でキャンセルまたはリセットできるので
問題ないのですが、Anim FreeSpecialなどキャンセルできない行動にLoop 1と
してしまうと 延々と同じ動作(Anim)を続けてしまいます。
そんなときは、ChangeEntityProperty({Self}、"Animation"、"")や
ExecuteAnimationなどを@Cmdを使って実行し、強制的に別Animに移行したり
Cancel を使って別なFreeSpecialに移行したりします。

353 :名前は開発中のものです。:2022/05/07(土) 02:01:51 ID:NmRbFI7S.net
上の閉じたLoopでも
BBoxで喰らい判定や、Attackコマンドと付随するFollowコマンドがあれば
別なAnimに移行できます。
なので、あえて閉じたLoopを使って、チャージの真似事をさせたり
CancelでA2ボタンを押すたび別なFreeSpecialに跳んで、A2を押した数だけ
べつな技を出す。なんてことが可能になります。
もちろん別な方の受け売りですが、Loopひとつで技のヴァリエーションが
増えるのはなかなか便利です。

354 :名前は開発中のものです。:2022/05/10(火) 06:46:43.73 ID:ANAGzemE.net
Jenniferで思ったけれど
ゴオン・リーラ・ディ・ディオとか
グリズリーコークスクリューマグナム
みたいな巨大すぎる手だけの背景技が作りたいのと
バットルサーキットみたいにショップに入れたりしたら面白いのにね

355 :名前は開発中のものです。:2022/05/11(水) 03:15:52.16 ID:5CHTfmx4.net
背景技に関してはどこまで凝るかによりますが
name {waza}
type text
subtype noskip

こんな感じでEnityを作ると、このEnityがSpawnFrame などで呼び出されている間、
ゲームが一時停止されるのを利用するのが単純でよいかも?

スクリプトで存在している全てのEntityに対してFreezeやStun状態にして
プレイヤーのAnimをDrawmethod Scale {倍率}で巨大化させるという手もありますし。
PlayAnim(うろ覚え)でGIFアニメを再生するコマンドもあったはず。
画面一杯に演出を表示してボム的な技を繰り出す事に関してはかなり自由にできると思います。

お買い物に関しては、
DungeonsDragons Rise ofWarduke2015(Rise ofWardukeは少なくとも2種類ある)
MIX Mastersあたりが、とても参考になります。

うろ覚えですがTekkenのDemoが装備品としてプレイヤーのステータスをアップする
スクリプトを組んでいたような?

356 :名前は開発中のものです。:2022/05/12(木) 03:20:11.72 ID:4lLWq45r.net
PlayAnim(うろ覚え) => X
Animation data/scenes/scene.gif 0 0 こちらが正しい表記 最後の 0 0 はXY座標
このコマンドでGIFアニメを再生できます。主にDEMOシーンなどに使います。
インゲーム中は普通に{Entity}を作ったほうが早そうです。

357 :名前は開発中のものです。:2022/05/14(土) 02:02:26.01 ID:3oAON5YM.net
動画でOVERLOADをあげましたが、
何でかというとハンドガンの弾薬数を数字で表示したかったからです。
件のMODはハンドガンがプレイヤーに標準装備というなんとも掟破りな感じで私は大好きですw

@script
if(frame==0) { void self = getlocalvar("self"), gun = getlocalvar("G"+self);
if(gun==NULL()) { gun = 0; setlocalvar("G"+self,0); }
int Blt=(8-gun);
settextobj( 9, 30, 200, 4, 0, Blt, openborvariant("elapsed_time")+600);
}
@end_script
これをAnim Idleなど必ず1回は実行されるAnim に記述しておくと
画面左下に 数字がチョコンと表示されます。

このスクリプトの肝は settextobj のところで、どうもこれは標準コマンドっぽいのです。
{Index} {X} {Y} {Font} {Layer?} {表示したい内容} {表示する時間}
DCManualに載ってなかったので手探りですが、意外と便利(Update,Updated を使わなくてすむ)
似たものに drawstring(int x, int y, int font#, text, layer) というのものがあるのですが
ちょっと使いにくいので settextobj を専ら使っています。

358 :名前は開発中のものです。:2022/05/14(土) 02:07:27 ID:3oAON5YM.net
動画のMODでは基本無限に撃ててしまうので、8発ごとにリロードを挟むようにしました。

anim freespecial
@script
void self = getlocalvar("self");
void gun = getlocalvar("G"+self);
if(frame==0) { if (gun==NULL()) { setlocalvar("G"+self,1); } else {
if(gun>=8) { performattack(self,openborconstant("ANI_FOLLOW5",1)); }
else { gun = gun+1;
setlocalvar("G"+self, gun); } }
}
@end_script

Ani_Follow5に跳んでる部分がリロードアニメです。
このスクリプトでは LocalVar GlobalVar を使ってますが
少し上のレスの EntityVarを使えばもっと単純にできますね。

359 :名前は開発中のものです。:2022/05/14(土) 02:32:09.60 ID:3oAON5YM.net
以前にも紹介しましたが

@cmd clearspawnentry();setspawnentry "name" "test"
@cmd bindentity spawn() getlocalvar("self") 60 1 40 1 0 1

こんな感じでたった2行でBindEntityが使えるので、
キャラクターと一緒に移動するエフェクトを表示したい場合などに便利です。

360 :名前は開発中のものです。:2022/05/14(土) 02:37:55.00 ID:3oAON5YM.net
SpawnFrameと同様の動作をする

spawn(); ですがこの場合は座標の補正や向きなども指定しないとならないので
@ScriptやScriptsで定義したほうが使い勝手が良くなります。

361 :名前は開発中のものです。:2022/05/14(土) 03:25:29.49 ID:oWC+YZhm.net
テラワロス
syodai.g3.xrea.com/ura/patch.htm
どうせならいつでもメニューを開けるようにできればPCゲームに負けないインパクトを出せそう

362 :名前は開発中のものです。:2022/05/14(土) 14:26:04.17 ID:3oAON5YM.net
ポーズメニューで難易度や同士討ちの設定など出来るようになってるのが
ベア・ナックルX{#}で大元はChronoCrashでお馴染みクラタス氏だったような?
tekken何とかdemoやknights and dragonsの何作目だったかポーズメニューで
装備品を切り替えてプレイヤーの攻撃や防御を変化させてたような?
メニュー作りの基礎はRocketViper2やTMNTの何作目だったかBonus氏のMODが参考になるかと

363 :名前は開発中のものです。:2022/05/14(土) 23:56:15.60 ID:3oAON5YM.net
RVGM set OprnBOR PACK

Open BoR Game Club
この辺で検索するとメージャーなMODがリンクと共に紹介されています。
それぞれモッダーさんによって標準コマンドのみであったり
そこまでスクリプト使わなくてもって感じに作成されています。
興味を持ったMODをアンパックしてDATAの中身を覗いてみれば
自分が作りたいMODの良いヒントが見つかるんじゃないでしょうか。

364 :名前は開発中のものです。:2022/05/15(日) 11:25:46.85 ID:pXw15ZHa.net
もうすぐこの文章も消えますので保管します
古いリスト一覧表
(閲覧できるだけ)
m.vk . com /pages?oid=-156200484&p=Y
(空欄3個)

ia904502.us.archive . org /view_archive.php?archive=/1/items/OpenBOR-Launchbox-Pack/Game%20Paks.7z
(空欄3個)

mugenarchive . com /forums/archive/index.php/f-5-p-15.html
(空欄3個)
3706 Ladies of Rage 不足分?

365 :名前は開発中のものです。:2022/05/15(日) 11:44:51.33 ID:pXw15ZHa.net
もうすぐこの文章も消えますので保管します2
www.afeidj . com /tag/openbor/
(空欄3個)
パス afeidanji

366 :名前は開発中のものです。:2022/05/18(水) 01:21:30.91 ID:2bJvsfcm.net
ツールなども開発しているクラタス氏
スクリプトを覗かせていただくと、最近のものはDeffine などを駆使して
省略形を使ったりしてちょっと癖が強いので、
すこし前のSoR2XMegaMixあたりだと読みやすくとても勉強になります。
getentityproperty(self,"animhits") こういった Propertyの使い方なども
とても参考になります。

367 :名前は開発中のものです。:2022/05/18(水) 01:29:14.80 ID:2bJvsfcm.net
performattack(self, openborconstant("ANI_FOLLOW8"), 0);
changeentityproperty(self, "aiflag", "jumping", 1);
changeentityproperty(self, "takeaction", "common_jump");
こういった処理を見つけて、こうすればANI_Follow8はジャンプ扱いになるのかな?
と予想して自身の処理に組み込んでみたり。

changeentityproperty(self, "takeaction", "common_grabattack");
これだとAnim Grabattack 扱いになるのかな?などと色々実験してゆくうちに
夜が明ける感じです。

368 :名前は開発中のものです。:2022/05/22(日) 22:22:15.61 ID:VlDnYkVW.net
保管させてください
mk2k.net/releases/psp/games/
ameblo.jp/shoanddiggy/entry-12224585029.html
3943668BiiEff
www.juwanshe . com /roms/bor/91-2-0-0-1.html
同人射撃遊戯東方射手5
mega.nz/file/LcQmQIjY#UOxB_BnsaJdT9uAIU9hI6VUBl5qcfXP_rsaPSr69NR0

369 :名前は開発中のものです。:2022/05/22(日) 22:35:25.61 ID:VlDnYkVW.net
寝ぼけてすごく間違えちゃった

370 :名前は開発中のものです。:2022/06/01(水) 02:50:36.94 ID:JmmaEfzE.net
くにおくんLAが流行のExtraMenuも導入されて、Ver3.1.6になってますね。
海外の くにおくん人気は凄まじいものがありますが、やはり元が良いからでしょうか。

371 :名前は開発中のものです。:2022/06/02(木) 00:15:15.40 ID:Jne9s08k.net
ハイスクルーのやんちゃな男女が大暴れっていう、
くにおくんの系譜は現役で作られているようですね。

372 :名前は開発中のものです。:2022/06/02(木) 00:42:54.95 ID:Jne9s08k.net
>>358
射撃武器を使った場合、弾薬の演出で簡単に済ますなら
Anim Attack{#}のコンボ途中にリロードアニメを混ぜればよいかもですね。
例えば、
Anim Attack5に射撃アニメ Anim Attack6にリロードアニメ
ヘッダーの設定で AtChain 5 5 5 6 0 のようにすれば4発撃ったらリロードになります。
Range を設定すれば、AtChain 1 1 2 3 0 5 5 5 6 0 これで
近距離(1 1 2 3)殴り、遠距離射撃(5 5 5 6)にできるかも?
ふと思いついたのでまだ試してませんがw

373 :名前は開発中のものです。:2022/06/03(金) 02:24:03.03 ID:9BJR8uXf.net
何度目になったか、もう数えてませんが
くにおくんLA 最後まで遊ばせていただきました。
kt住江 氏の間の取り方、適度な演出、攻撃とHPのバランスの妙
最高ですね。Ver3.1.6などのEdit作品も原作リスペクトのアレンジでよいのですが
アンバーちゃん氏の巣穴ページからDLできる初期オリジナルが至高ですね(個人の見解)。

374 :名前は開発中のものです。:2022/06/03(金) 21:14:08.99 ID:7Ag/1Egm.net
ちゃん氏ワロス
さすが日本人!全てに数字の鍵がかかってるね!

375 :名前は開発中のものです。:2022/06/03(金) 21:46:04 ID:7Ag/1Egm.net
そして書き込みエラーワロス
mrbdn316.bl
og36.fc2 . com /bl
og-en
try-1186.ht
ml?sp

376 :名前は開発中のものです。:2022/06/03(金) 22:49:14 ID:9BJR8uXf.net
Pass はDLページの一番上に書いてありますよ?
Edit作品は ChronoCrash にあります(要Login)。

377 :名前は開発中のものです。:2022/06/04(土) 00:43:37.98 ID:dPRWKu7b.net
#define OBC openborconstant
#define GEP getentityproperty
#define CEP changeentityproperty
#define SLV setlocalvar
#define GLV getlocalvar
#define GEV getentityvar
#define SEV setentityvar
#define CLP changelevelproperty
#define OBV openborvariant
#define COBV changeopenborvariant
#define GPP getplayerproperty
#define CPP changeplayerproperty
#define SGV setglobalvar
#define GGV getglobalvar
#define self GLV("self")

こんな感じにスクリプトで宣言しておく事で

378 :名前は開発中のものです。:2022/06/04(土) 00:50:34.82 ID:dPRWKu7b.net
void rotation()
{
changedrawmethod(self,"enabled",1);
changedrawmethod(self, "rotate", GGV("rotation"));
if(GEP(self,"type") == OBC("TYPE_NONE") )
{
if(playerkeys(0, 3, "moveup"))
{
float xpos = openborvariant("xpos");
float x = GEP(self,"x");
CEP(self, "velocity", (cos(GGV("rotation")) * 95)*0.01 , (sin(GGV("rotation")) * 95)*0.01, NULL() ); //Move!
if( x > xpos+310 ){ CEP(self, "position", xpos+310, NULL(), NULL());}
if( x < xpos+10 ){ CEP(self, "position", xpos+10, NULL(), NULL()); }
} else { CEP(self, "velocity",0,0,0); }
} }
こんな風に略することができるんですが、
浅慮な私には逆にデバグ面倒になってない?と思ったり。思わなかったり。
#define GLV getlocalvar
#define self GLV("self")
この辺は便利そう。

〜/Data/Scripts/〜.c とか〜.h の中で使います。

379 :名前は開発中のものです。:2022/06/04(土) 23:36:23.17 ID:/SuZQTlg.net
先生の先生?374?ux.getuploader . com /gikotakurpg/

380 :kt住江 :2022/06/08(水) 04:53:27.40 ID:wI0LZaee.net
皆様、お久しぶりです。
2022年も相変わらず能天気なkt住江です。
ダブルドラゴン番外編やくにおくんLAを遊んでくれた方、本当にありがとうございます。
最近、ようやく新たなOpenBORゲームの開発をスタートしましたので、ほんの少し告知します。

くにおくんの新たなる戦いが、中国は龍海で繰り広げられる!
その名も『熱血硬派くにおくん 中国龍海編』
3〜4か月後の完成を目指しています。僭越ながら宜しくお願いします。

323 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver.24052200