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

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住江です。
長らくスレから遠ざかってしまい、申し訳ありません。
現在新作としてダブルドラゴンのゲームを創意開発中です。 
↓開発中のダブルドラゴン用敵キャラ
Twitterリンク:ktsuminoe

そして、kt住江のゲーム保管庫が出来上がりましたので、
皆さま、僭越ながら宜しくお願いします。
外部リンク:amberusagi.theblog.me
Twitterリンク: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
途中経過画像。開発は順調です。
Twitterリンク:ktsuminoe

>>110さん
いつもお疲れ様です。
アークシステムワークスの格闘ゲームによくある、
ストライカーまで実装可能とは、スクリプトは本当に凄いですねぇ。
Twitterリンク: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に登録しておかないとエラー落ちします。
1-
あと 546 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.012s