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

316
(1): 2022/04/09(土)02:45 ID:huMt1Pej(1/2) AAS
>>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 ID:huMt1Pej(2/2) AAS
>>316
なので、いわゆるピヨリ値などはGlobalVarよりEntityVarに収納したほうが
管理しやすいかも知れませんが、いまのマシンパワーならメモリ効率とか考えなくても
とくに支障はなさそうなので、使い易いほうで良さそうです。
318: 2022/04/11(月)03:53 ID:mFlGfZLx(1) AAS
プレイヤーが敵の情報を取得して、その敵を投げた際にdrawmerhod rotateを
使って回転しながら吹き飛ぶようにしようとスクリプト組んでたんですが
ぜーん全上手くゆかないので、プレイアブルキャラ作成に逃避
319: 2022/04/12(火)01:32 ID:vWluw1zD(1/3) AAS
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 ID:vWluw1zD(2/3) AAS
思ってたんと違ったけど、まあなんとか必殺投げが出来たので
最後の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 ID:vWluw1zD(3/3) AAS
上のスクリプトは汎用性はほぼ無し、条件設定として
Health が25%切った相手を投げた際に30%の確立で発動な感じです
(動画ではテスト用に発動条件ユルユルですが)。
なのでやっぱり
攻撃者のAttack5 などに、相手側がリアクションとして Pain5 や Fall5 を
設定しておいたほうが結果手間が掛からないかと思います。
322: 2022/04/13(水)00:14 ID:aDur5ZAn(1/5) AAS
ピヨリについて、面倒だと思うよーとか適当な事言っておいて
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 ID:aDur5ZAn(2/5) AAS
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 ID:aDur5ZAn(3/5) AAS
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 ID:aDur5ZAn(4/5) AAS
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 ID:aDur5ZAn(5/5) AAS
元々、仕様とバグのギリギリいってる手法なので、
ピヨリ中にもう一回敵からのBindEntityを利用した攻撃を受けると
OpenBoRが落ちますw
やっぱり標準コマンドで何とかしたほうが良さそうですね。
レバガチャで回復早めるとかしなければ、EntityVarを使って
値を蓄積して、一定時間無防備になるというのは
バグの危険なく可能です。
中々難しいものですね。
327: 2022/04/17(日)02:42 ID:xLR26ELd(1/3) AAS
なんか煮詰まったので、プレイアブルキャラ作成に逃避。
ムゲンからキャラのインポート(聞こえが良いですね)。
ここで新たに、光弾問題に遭遇、どうもDBキャラはいろいろ撃ちますが、
単純に弾を撃つならCustKnifeなりで作ればよいし、誘導弾ならType NPCのSubType Chaseとかで
追尾させればよいのですが、なんとなく弾幕作りたいな〜とかやってドハマリ中。
通常攻撃とシンプルな特殊技はこんな感じかな?
tu.be/_xQBhCUit8c
328: 2022/04/17(日)03:48 ID:xLR26ELd(2/3) AAS
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 ID:xLR26ELd(3/3) AAS
openBoRには標準でsin cos atanなど揃っていたので、扇弾を弄ってたのですが
考えてみれば敵はそんなのお構いなしですし。
自分が敵にやられたらイラだつだろうしで、全方位弾にしました。
おおよその敵の方向に撃つ直進弾がたまに止まっちゃいますがご愛嬌w
一見おおっ!となっても実は使い道の無い技ということで。
特に敵以外との衝突判定はしてないので32×4射ってますが
さすがopenBoR処理落ちなどしないですね。
セブンティーン氏が洪水おこしてますが、技が思いつかないので適当です。
Krrnはサポートに飛び込んできて、入力に連動して攻撃を繰り出すように出来ないか考え中。
330: 2022/04/18(月)12:39 ID:+se/Swu+(1) AAS
何の事だと思ったら、動画の話しなんですね。
まだ、何も分かりませんが、日本語での解説ありがたいです。
331: 2022/04/19(火)03:14 ID:a3xIrRSp(1/2) AAS
>>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 ID:a3xIrRSp(2/2) AAS
>>別キャラ({Weapon})
({WeaponFrame} や{WeapLoss} などを設定して切り替わるようにする)。です。
このあたりの設定の細かさは流石です。
333: 2022/04/20(水)21:43 ID:PW9VJXxm(1) AAS
weaponの技の上書きというより、マージと言ったほうがわかり易いかも?
Anim Freespecial1のみプレイヤーキャラにあって、weaponにAnim Freespecial2があった場合、武器を拾ったプレイヤーは両方使えるようになります。
Modelflag{0,1,2}を設定してないと、混ざったままになってしまうことがあるということですね。
334: 2022/04/22(金)01:04 ID:g9+olsrt(1) AAS
算数も割り算の時点で微妙な私は、もちろんプログラムなんて全く分からなかったけれど
kt住江さんの作品に出会ってOpenBoRを知って、なんとか拡散砲を撃てるようになりました。
リソースは全部ひと様のものなので本来動画すら微妙なんですが、
スクリプトの中身見たら四則演算って知ってる?って感じですが
そんな私でも、For文とDrawmethodを組み合わせると、
こんな感じも演出出来てしまう。そしてすっごく軽いOpenBoR凄いという話です。

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

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

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

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

別キャラの相手の背後にテレポートしてキりつけるは別にOKなんですが、
人それぞれ結構苦手なシーンがあるかもしれませんね。
339: 2022/04/26(火)03:20 ID:tRI20Ut9(3/4) AAS
>>313
Drawmethod Rotate を使った回転について
マニュアルには −45 とすればマイナス方向の45度に回転させられるとあり
実際出来るのですが、画像の欠けが発生し易いようなので
素直に 315と設定したほうが良さそう。

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

Type Enemyも結構いろいろ設定できるので、凝りだすとキリが無さそうです。
340: 2022/04/26(火)07:34 ID:tRI20Ut9(4/4) AAS
こちらがコンボを繰り出していると、たまに敵が無敵技で逃げたり
反撃してきたりしますが、
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 ID:k34JWO6S(1/6) AAS
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 ID:k34JWO6S(2/6) AAS
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 ID:k34JWO6S(3/6) AAS
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 ID:k34JWO6S(4/6) AAS
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 ID:k34JWO6S(5/6) AAS
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
1-
あと 313 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.013s