目次
知識10くらいからできるボスの作成心得
ボス。
ダンジョンの奥にいたり、イベントでなんか襲ってきたり、依頼でこっちから襲いに行ったりするもの。
これの作り方についてです。
だいたいwipな。
せっと_えねみー
「SET_ENEMY」という関数を呼び出すことで、敵を配置することができます。
=||
CALL SET_ENEMY,9,キャラ:ピクシー,3,0,1
CALL SET_ENEMY,14,4503,10,1,1
| = |
このように記述します。
この場合、「9番(前列中央)に、ピクシーを、Lv3で、ボスとして配置」、「14番(後列中央)に、たまきちゃんを、Lv10で、ボスとして配置。死体が残る」という記述になります。
「SET_ENEMY」に続くカンマ区切りの数字には、以下の数値を設定します。
ポジションセット
1番目はセットするポジションです。
「7〜16」の数値を設定します。
7〜11が前列(味方に近い方)、
12〜16が後列(味方から遠い方)になります。
キャラクター指定
2番目はキャラクターの番号です。
CSVの番号、または、[[キャラ:ピクシー]](※半角カッコで指定するが、wiki記法上全角にしています)といった記述が可能です。
例の場合、ピクシーを名前指定形式で呼び出しています。
4503はたまきちゃんとなりますので、たまきちゃんがセットされます。
レベル
3番目はLvとなります。
数字を入れますが、ここについてはちょっと後述します。
例の場合はそれぞれ3と10を入れているので、LVはその数値になります。
なお、「SET_ENEMY」でレベルを本来設定されているものから変更した場合(たとえばLv100のピクシーを出現させる場合)、
能力値は「SET_ENEMY」内で下記のように補正されます。
=||
能力値=元能力値×(18 + 設定Lv * 3 / 2) / (18 + CSVでのLv * 3 / 2)
| = |
元能力値が「Lv3、力〜運が3.5.1.6.6」をLv100でセットすると、能力値は「22.37.7.44.44.44」になる…………ハズです。
死体消滅
4番目は死体残存フラグとなります。
これが1の場合、HPがゼロになった敵が残ります。
リカーム等で敵が復活させることができるようになります。
必要がなければゼロでよいでしょう。
ただし、人間キャラである場合や、「ネームド」である場合は残しておいてもいいかもしれません。
あなたはボスですか?
5番目はボスフラグとなります。
ボスフラグが立っていると、HPや能力値補正がさらに強化されるほか、戦闘中、状態異常にかかりにくくなったりします。
これが立っていないと即死などが効いてしまうため、そういう「抜け道」を用意するつもりでない限り、ボスはきちんとボスフラグを立てたほうがよいでしょう。
敵の設定
セットした敵には、色々と設定できることがあります。
例えば、名前を変更する、能力値補正、相性を変更する、追加のスキルを持たせる、などです。
=||
LOCAL = 100 + RAND:10
CALL SET_ENEMY,9,キャラ:ピクシー,LOCAL,0,1
NAME:(CHARANUM-1) = 脳筋ピクシーちゃん
CALLNAME:(CHARANUM-1) = 脳筋ピクシーちゃん
ABL:(CHARANUM-1):種族 = 43
CSTR:(CHARANUM-1):種族名 = ボディビルダー
CFLAG:(CHARANUM-1):HP補正 += 6000
CFLAG:(CHARANUM-1):MP補正 += 10000
CFLAG:(CHARANUM-1):行動回数 = 2
BASE:(CHARANUM-1):剣撃 = 50
BASE:(CHARANUM-1):飛具 = 0
BASE:(CHARANUM-1):打撃 = 999
BASE:(CHARANUM-1):戦技 = -25
BASE:(CHARANUM-1):44 = 200
BASE:(CHARANUM-1):61 -= 100
BASE:(CHARANUM-1):SHOCK += 50
BASE:(CHARANUM-1):力 += 100
BASE:(CHARANUM-1):知恵 = 100
ABL:(CHARANUM-1):攻撃相性 = 3
ABL:(CHARANUM-1):最低攻撃回数 = 1
ABL:(CHARANUM-1):最大攻撃回数 = 3
ABL:(CHARANUM-1):射程 = 2
ABL:(CHARANUM-1):攻撃範囲 = 3
ABL:(CHARANUM-1):スキル1 = 222 ;バトルラッシュ:全体ランダム打撃
ABL:(CHARANUM-1):スキル2 = 225 ;神等去出八百万撃:全体打撃
ABL:(CHARANUM-1):スキル3 = 246 ;バルカンキック:前列ランダム打撃
ABL:(CHARANUM-1):スキル4 = 0
ABL:(CHARANUM-1):スキル5 = 0
ABL:(CHARANUM-1):スキル6 = 0
ABL:(CHARANUM-1):スキル7 = 0
ABL:(CHARANUM-1):スキル8 = 0
CFLAG:(CHARANUM-1):不死身フラグ = 1
CSTR:(CHARANUM-1):思考パターン = テスト_脳筋ピクシーちゃんAI
CALL SYNC_STATUS,(CHARANUM-1)
CALL HEALTH_CHARA,(CHARANUM-1)
| | = |
上から順番に見て行きましょう。
Lv
LOCALに「100+RAND:10」を設定しました。
ポジション9に、Lvが「LOCAL」のボスピクシーを配置しました。
数字での指定なので、LVに関してはこういうこともできます。
例えば「戦闘前選択肢によって強さが変更される」とか、「あなたのLVによってLvが変動する」とか、そのように使うことができます。
(キャラ指定も結局のところ数字での指定なので、ここもランダム性を持たせることができますが、それをするならRANDでの分岐にしてあげたほうがいいでしょう)
★ポイント!
あなたやPTの最大Lvに依存する敵(レベル変動型のボス)は、倒せるならかなり美味しい敵になります。
また、想定外の超高レベルになった場合、スキルに変化がなければ、「アギラオを使うLv80のボス」というものが生まれてしまうため、基本的には「超高レベル想定の場合」にのみ、レベル変動型にしましょう。
名前
名前と呼び名を、「脳筋ピクシーちゃん」と変更しました。
これで、画面上にも「脳筋ピクシーちゃん」と表示されます。
戦闘に具体的に影響はありませんが、「中身はエンジェルだけど名前はブラックマン」など、CSVを新たに作成しなくともよい、ということでもあります。
★ポイント!
「CHARANUM-1」としているのは、「さっき生成されたキャラクター」という意味です。
もう一回「SET_ENEMY」を行った後で「脳筋ピクシーちゃん」を弄りたい場合は、「CHARANUM-2」とする必要があります。
種族
ShinEraTenseiでは、人間と悪魔のステータス計算に大きな違いがあります。
種族は具体的には下記の通りになっています。
=||
0:人間 1:地母神 2:女神 3:魔王 4:天使
5:妖魔 6:妖精 7:妖鬼 8:龍王 9:魔獣
10:妖鳥 11:外道 12:マシン 13:精霊 14:御霊
15:鬼神 16:魔神 17:邪神 31:狂人 32:怪異
36:半魔 42:魔人 43:超人 44:英雄 45:造魔
73:悪魔人
| = |
「脳筋ピクシーちゃん」は43番で超人になっています……いやお前実はピクシーじゃないだろ……。
ともあれ、悪魔(正確には「人間以外」)であれば大きな問題はありません。
通常の人間は、「装備をして悪魔と同等」という数字設定を想定されているので、「種族:人間」のエネミーはかなり弱いです。
人間キャラのボスを生成する際は、内部的には「超人」などにしてあげるのがよいでしょう。
(逆に言えば、「人間のボスだがきちんと武器防具を装備させてあげる」ことで、そこそこの強さにはできます)
また、人間エネミーは、「異能者」や「達人」といった素質がなければMPがなくなってしまうため、スキルを使用できなくなってしまいます。
そういう意味でも、「超人」や「魔人」「英雄」などの扱いにしてあげたほうがよいでしょう。
種族名は「ボディビルダー」に設定していますが、これは名前と同様、特に戦闘に影響はしないので好きにしてしまっていいでしょう。
「内部的には超人扱いだが、種族は人間」という具合に変更できます。
HP・MP補正
HP補正・MP補正は、純粋にその数値ぶんだけ、HP・MPを上昇させます。
ボスである場合、もともとHP補正があるので、あまり大きな補正は必要ないかもしれません。
ただ、すぐMPが切れて行動できなくなる……というのもかわいそうな話なので、MP補正はちょっと設定してあげたほうがいいかもしれません。
もちろん、「相手の攻撃を全部無効か反射してMP切れまで待つ」という戦術もあるので、あまり多いのも考え物ですが……
行動回数
通常は1回ですが、2回以上行動させることが可能です。
具体的な数は、Lvと取り巻きの出現数……つまるところゲームバランスの話になってくるので、後述します。
相性耐性
上記では下記の通り設定しています。
剣撃50%、飛具0%、打撃反射、戦技吸収(-25%、つまり4分の1回復します)、44番=火炎200%
61番=HAPPY耐性-100(=付与率0%)、SHOCK耐性+50(=付与率150%)
相性耐性はもちろん、万能まですべての相性を変更可能です。
状態異常も、HAPPY〜BRANDのすべてを変更可能です。
ただし、GOOD、ORGY、HEAT耐性は持たせない方がよいでしょう。
これらの相性は、「BASE.CSV」の数字を指定することができます。
能力値補正
上記例では、「力+100、知恵は100に固定」となっています。
基本的には、「プラス」で作った方がよいかと思います。
ただし、ShinEraTenseiは能力値にLvがかなり関わってきます。
強くしたいなら、素直にLvを上げたほうが「Lv相応に強い」感が出るのでいいと思います。
攻撃方法
通常攻撃の方法を設定することができます。
「脳筋ピクシーちゃん」は、「戦技相性で、1〜3回、全体に攻撃」という通常攻撃になります。
まあ、ここは攻撃相性以外はあまりいじらない方がよいかと思います。
下手に攻撃回数とか増やすと大変なことになるので……ほんと……
スキル
スキルを覚えさせることができます。
「脳筋ピクシーちゃん」は、下記のスキル「のみ」を覚えさせています。
=||
バトルラッシュ:全体ランダム打撃
神等去出八百万撃:全体打撃
バルカンキック:前列ランダム打撃
| = |
「ABL:(CHARANUM-1):スキルXX」に、スキル番号を代入してあげると、そのスキルを習得している……ということになります。
ちなみに「敵かつボス」ならスキルは20個まで持てます。
レベルアップに伴いスキルを覚える場合、明示的に「0」を設定、すなわち「何も持ってないよ」としておく方が無難です。
(ボスがディアラハンを使ったりする事故が発生します)
戦闘中のスキル選出は、特にAIを搭載していない場合、ランダム行動になります。
★ポイント!
スキルは同じものを持っていても特に問題はありません。
例えば、「スキルAを3個、スキルBを3個、スキルCを1個」持っている場合、使用比率は「3:3:1」にでき、簡易的なAIになります。
その他フラグ
「脳筋ピクシーちゃん」は、不死身フラグが立っています。
即ち、「HPが1以下になりません」。つまりこのままでは勝てない状態になっています。
このあたりはAIで後述しますが、ともあれ、このようなフラグがいくつかあります。
くわしくは「CFLAG.CSV」を確認していただくとして、使いそうなものはこのあたりになるでしょうか。
(記述方法は、不死身フラグの部分と同様です)
不死身フラグ
HPが1から減らなくなります。
1で表示なしで不死身。HPは1で止まります。
2で「食いしばった」メッセージが表示され、HP1で復活します。
3で「立ち上がった」メッセージが表示され、HP最大で復活します。
4以上になっているとうまく動かなくなるので、0〜3を設定しておきましょう。
食いしばりフラグ
「食いしばりが既に発動している」場合、1になります。
二回以上食いしばりや不屈の闘志が発動しないようにするフラグになります。
敵で使う場合は、AIで「食いしばっていた場合、〜〜のスキルを使う」などの条件文で使うか、素直に不死身フラグをオンにした方がよいかと思われます。
善悪値、秩混値
LD軸、LC軸を設定できます。天罰系攻撃を使用する場合に設定しましょう。
行動回数
上述。行動できる回数です。
HP補正、MP補正
上述。HP、MPが増加します。
速度補正
「行動速度」が上昇します。
ただし、「速度のステータス」が上昇するわけではないので、命中率などには影響しません。
あまり「ステータスの速度」を上げすぎると命中回避が大変なことになるので、「素早いキャラ」を表現する場合に使いましょう。
マイナスの数字を入れることもできます。
クリティカル補正
クリティカル率が上昇します。
ボスであれば上昇させてもいいでしょうし、マイナスの値を入れてワンモアをなるべく発生させない手加減をしてもいいでしょう。
回復不能フラグ
回復ができなくなります。
使うならAIを絡めてになるかと思われます。
単独リンケージ
単独でリンケージスキルを使用できます。
敵にリンケージスキルを使わせる場合、「リンケージ参加者はそのターン『なにもしない』、リンケージ発動者が単独リンケージを発動」としてやると、ちょっと見栄えがマシになるかもしれません。
思考パターン
「テスト_脳筋ピクシーちゃんAI」など、文字列で指定を行います。
これを受けて、「@SET_ACTION_テスト_脳筋ピクシーちゃんAI」という関数が動きます。
詳しくはAIのあたりで。
ともあれ、名称は被らないように、「EVENTXX_01_VS_脳筋ピクシーちゃん_AI」といった名称にするのがよいかと思われます。
おまじない
最後に、この二行を入れておきましょう。
「CALL SYNC_STATUS,(CHARANUM-1)」
「CALL HEALTH_CHARA,(CHARANUM-1)」
シンクステータスは、「能力値の再補正」となります。
能力値をプラスしたりなんだりした分、魔法威力や攻撃力などを補正してくれます。
ヘルスキャラは、HPを全回復します。
まあ色々やったらきちんとしようね!というおまじないなのでした。
戦闘開始/終了時
戦闘開始時、フラグに応じて様々な状況を発生させることができます。
まあ下記フラグの名前を見ると分かると思いますが……
=||
FLAG:逃走不可フラグ = 1
FLAG:会話不能フラグ = 1
FLAG:先制不意打ちキャンセル = 1
CALL BATTLE_START
FLAG:逃走不可フラグ = 0
FLAG:会話不能フラグ = 0
FLAG:先制不意打ちキャンセル = 0
| = |
……ボス相手の場合、上記みっつが基本セットになるかと思います。
「逃げられない」「交渉で切り抜けられない」「先制攻撃や、逆に不意打ちなどもされない」状態です。
戦闘終了後はかならずゼロに戻しておきましょう。
(連戦である場合も、「明示的に」設定したほうがいいでしょう)
このあたりのフラグは下記の通りです。
=||
会話不能フラグ
逃走不可フラグ
先制攻撃フラグ
不意打ちフラグ
バックアタックフラグ
先制不意打ちキャンセル
悪魔解析率上昇不能フラグ
| = |
AIについて
「適切な時に適切なスキルを使用する」だけで、ボスの強さは跳ね上がります。
また、「不適切なスキルは使用制限をかける」ことも重要です。
例えば、ボスが毎ターン全回復してきたらプレイヤーはだいたい憤死します。
ランダム行動ではできないことを、AIでは実行することができます。
どんな感じにできるの?
=||
CALL SET_ENEMY,9,キャラ:ピクシー,LOCAL,0,1
NAME:(CHARANUM-1) = 脳筋ピクシーちゃん
CALLNAME:(CHARANUM-1) = 脳筋ピクシーちゃん
CSTR:(CHARANUM-1):思考パターン = テスト_脳筋ピクシーちゃんAI
| | = |
=||
@SET_ACTION_テスト_脳筋ピクシーちゃんAI, ARG
#DIM 脳筋ピクシーちゃん本気度
;入力行動を-1とターゲットを-1にしておく
CFLAG:ARG:入力行動 = -1
CFLAG:ARG:ターゲット = -1
IF 脳筋ピクシーちゃん本気度 >= 99
;色を変更\\ SETCOLOR 0x770000\\ PRINTFORML ┏> 脳筋ピクシーちゃんさん ━━━━━━━━━┓\\ PRINTFORML ┃うぬには死んでもらうぞ ┃\\ PRINTFORMW ┗━━━━━━━━━━━━━━━━━━━━━━┛\\ ;色をリセット\\ RESETCOLOR\\ PRINTFORML ┏> MASSAGE ━━━━━━━━━━━━━━━━━┓\\ PRINTFORML ┃劇場でなんか死ぬまで殺された……! ┃\\ PRINTFORMW ┗━━━━━━━━━━━━━━━━━━━━━━┛\\ FLAG:勝利フラグ = 0\\ FLAG:敗北フラグ = 1\\
ENDIF
;自分のHPが50%を切っている場合、かつ不死身フラグがまだ立っている場合
IF 現HP割合(ARG) ⇐ 50 && CFLAG:ARG:不死身フラグ == 1
PRINTFORML ┏> MASSAGE ━━━━━━━━━━━━━━━━━┓\\ PRINTFORML ┃脳筋ピクシーちゃんさんが構えを変えた! ┃\\ PRINTFORMW ┗━━━━━━━━━━━━━━━━━━━━━━┛\\ ;ディアラハンを使用し、自分を一回だけ全回復する\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_ディアラハン|スキル:ディアラハン]]\\ ;行動回数が3に増加し、不死身フラグが消える\\ CFLAG:ARG:行動回数 = 3\\ CFLAG:ARG:不死身フラグ = 0\\
ENDIF
;ワンモア(クリティカルか、弱点を突いた場合の行動)
IF CFLAG:ARG:1moreフラグ > 0
;おしおき\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_メギドラオン|スキル:メギドラオン]]\\ ;ワンモアが入るとちょっと強くなる\\ 脳筋ピクシーちゃん本気度 += 2\\
ELSEIF 脳筋ピクシーちゃん本気度 ⇐ 10
;行動した回数に応じて行動を変化させる\\ ;行動1回目\\ IF CFLAG:ARG:行動した回数 == 0\\ ;マスターが前衛にいる場合\\ IF CPOS(MASTER) > 3\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_ひっかき|スキル:ひっかき]]\\ ELSE\\ IF RAND:2 == 0\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_メギドラ|スキル:メギドラ]]\\ ELSE\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_メギド|スキル:メギド]]\\ ENDIF\\ ENDIF\\ ;行動2回目以降\\ ELSE\\ IF RAND:2 == 0\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_アギダイン|スキル:アギダイン]]\\ ELSE\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_ブフダイン|スキル:ブフダイン]]\\ ENDIF\\ ENDIF\\
;本気度が10以上になった場合
ELSE
;イベントフラグによって行動を分岐させる\\ IF イベントフラグ:XX:YY <= 3\\ ;経過したターンを2で割って余り1=奇数ターンの場合\\ IF FLAG:経過ターン数 % 2 == 1\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_フォッグブレス|スキル:フォッグブレス]]\\ ELSE\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_気合|スキル:気合]]\\ ENDIF\\ ;イベントフラグで行動を制御\\ イベントフラグ:XX:YY += 1\\ ELSEIF イベントフラグ:XX:YY == 4\\ ;HPが1500以下の場合\\ IF BASE:ARG:HP < 1500 == 0\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_アギダイン|スキル:アギダイン]]\\ ELSE\\ CALL CHECK_ACTIONABLE_AND_SET, ARG, [[スキル_ブフダイン|スキル:ブフダイン]]\\ ENDIF\\ イベントフラグ:XX:YY += 1\\ ELSE\\ FOR LOCAL,1,7\\ CHARA = POS(LOCAL)\\ SIF CHARA < 0\\ CONTINUE\\ LOCAL:1 = ( CFLAG:CHARA:攻撃強化 + CFLAG:CHARA:防御強化 + CFLAG:CHARA:命中強化 + CFLAG:CHARA:回避強化 + CFLAG:CHARA:魔法威力強化 + CFLAG:CHARA:魔法効果強化 ) / 6\\ ;強化ランク平均が16(突撃の狼煙2回分)を越えている場合\\ IF LOCAL:1 >= 16\\ CALL CHECK_ACTIONABLE_AND_SET,ARG,[[スキル_デ・カジャ|スキル:デ・カジャ]]\\ ELSE\\ CALL CHECK_ACTIONABLE_AND_SET,ARG,[[スキル_気合|スキル:気合]]\\ ENDIF\\ NEXT\\ イベントフラグ:XX:YY = 0\\ ENDIF\\
ENDIF
;行動が決定していなかった場合
SIF CFLAG:ARG:入力行動 = -1
CALL ランダム行動 , ARG\\
SIF CFLAG:ARG:ターゲット == -1
CALL RANDOM_TARGET, ARG, CFLAG:ARG:入力行動\\
ENDIF
| = |
作り方
ハイまずは長々ごめんね。
以上のように、マー色々とできます。
一個一個、やること、できることを確認していきましょう。
1.AI名称の設定
まず、AIを設定します。
キャラクターを生成時、下記のように設定します。
=||
CSTR:(CHARANUM-1):思考パターン = XXXX
| = |
これで、このキャラクターは「XXXX」というAIを持つ、ということになります。
2.AIの設定
「@SET_ACTION_XXXX」という関数を設定します。
「XXXX」部分は、AIとして設定した文字列、となります。
以下、具体的なAIを設定していきます。
3.おまじない
AIを設定していると、たま〜に、ウッカリ条件漏れが発生したり、想定外の挙動を取ろうとする場合があります。
そのため、「実行する行動とターゲットを初期化」「途中で決まらなかったらランダム行動をさせる」といった構文が必要になります。
具体的には、下記の部分です。
=||
;入力行動を-1とターゲットを-1にしておく
CFLAG:ARG:入力行動 = -1
CFLAG:ARG:ターゲット = -1
〜〜〜〜〜〜
;行動が決定していなかった場合
SIF CFLAG:ARG:入力行動 = -1
CALL ランダム行動 , ARG\\
SIF CFLAG:ARG:ターゲット == -1
CALL RANDOM_TARGET, ARG, CFLAG:ARG:入力行動\\
ENDIF
| = |
AI行動は、この間に何かを書く(「〜〜〜〜〜」の部分に書く)イメージでイきましょう。
4.DIMなどフラグについて
eraで使用される言語、ERBでは、「DIM」と付けることで、「その関数でだけ使える変数」を設定できます。
「その他の場所からは触ることができないが、自由に使える変数」です。
脳筋AIでは、「#DIM 脳筋ピクシーちゃん本気度」と設定しています。
ワンモアで2づつ増えていき、10を超えると行動が変化する、99を超えると強制敗北させてくる……という挙動をさせています。
もちろん複数個使用できます。
例えば、「ディアラハン使用回数」や「特定のスキルを使った回数」、「本気フラグ」として使うことができるでしょう。
また、「外から触ることができる」フラグを使用するのもアリです。
上記AIでは、「イベントフラグ」によっても行動が分岐する部分がありますね?
AI内でも、イベントフラグを変化させることは可能です。
「事前に挑発していた場合(イベントフラグがXXの場合)、メギドラオンがランダム行動内に追加される」といったこともできるでしょう。
5.行動指定
行動の指定は、いくつか指定方法があります。
=||
CFLAG:ARG:入力行動 = 1
CFLAG:ARG:入力行動 = スキル:メギドラオン
CALL RANDOM_TARGET, ARG, CFLAG:ARG:入力行動
| = |
行動を直接入力します。
数字で指定するか、スキル:XXXXの形で指定します。
数字でもいいのですが、二重カッコ式のほうが「121番ってなんのスキルだっけ?」というのが起こりにくくなるため、名称指定のほうが好ましいでしょう。
ターゲットなどの指定が必要になる場合があるため、この形式はあまりおススメしません。
=||
$RAND_ACTION
IF RAND:2 == 0
CALL CHECK_ACTIONABLE,ARG,[[スキル_メギドラオン|スキル:メギドラオン]]\\ SIF RESULT == 0\\ GOTO RAND_ACTION\\ CFLAG:ARG:入力行動 = [[スキル_メギドラオン|スキル:メギドラオン]]\\
ELSE
CFLAG:ARG:入力行動 = 0\\
ENDIF
| = |
一歩進んで、「コレ行動できます?」と聞くのが「CHECK_ACTIONABLE」です。
MPが足りないなどで行動できない場合、「RESULT」にゼロが返ってきます。
ここでは、「行動できない場合再選択」「最終的には入力行動ゼロ=通常攻撃を実行」という形ですね。
=||
CALL CHECK_ACTIONABLE_AND_SET, ARG, スキル:メギドラオン
| = |
「チェックしてオッケーだったらセット、ダメだったら覚えてるスキルからランダムでスキルをセット」してくれる関数です。
基本的には、これを使って指定してあげればOKでしょう。
ただし、「ランダム行動できるスキルを覚えさせてない」ような場合は、上記の「CHECK_ACTIONABLE」を使った形にしましょう。
6.分岐について
戦闘特有の分岐群です。
上記のAI、控えめに言ってクソ分かりにくいと思うので、ちょっと書き直しますね。
結論、「まあ色々できます」「戦闘中にしか見ないようなのも結構多いですよ」です。
=||
IF 0
PRINTFORMW 絶対に出ない選択肢です。\\ PRINTFORMW ELSEIFを多くする場合、最初にこれを作っておくと楽かも。\\
ELSEIF CFLAG:ARG:1moreフラグ > 0
PRINTFORMW ワンモアが発生した場合です。\\ PRINTFORMW 上の方に置くのがセオリーですね。\\
ELSEIF BASE:ARG:HP < 1500 || 現HP割合(ARG) ⇐ 50
PRINTFORMW HPが条件のものです。\\ PRINTFORMW HPが1500以下、または50%以下の時、ですね。\\
ELSEIF FLAG:経過ターン数 == 0
PRINTFORMW 経過「した」ターン数です。最初の行動選択時点ではゼロになります。\\
ELSEIF FLAG:経過ターン数 % 5 == 0
PRINTFORMW 経過ターンを5で割って余りがゼロのとき=5ターンに1回、この分岐に入ります。\\
ELSEIF CFLAG:ARG:行動した回数 == 3
PRINTFORMW 行動「した」回数が3のとき、1回目の行動選択の時です。\\ PRINTFORMW なお、下記のように行動した回数を弄ることで、行動回数を増やすことができます。\\ CFLAG:ARG:行動した回数 = 0\\
ELSEIF CPOS(MASTER) > 3
PRINTFORMW 「キャラクターのポジションが4以上の時」になりますね。\\ PRINTFORMW 「特定のキャラがどこそこにいる場合」というのも作ることができます。\\
ELSEIF CFLAG:ARG:不死身フラグ == 1
PRINTFORMW イベントフラグや、DIMで作ったフラグ、不死身フラグや行動回数などを条件にもできます。\\ PRINTFORMW こんな感じで「本気を出したら耐性が変化する」とかもできますよ!\\ IF BASE:ARG:HP < 1500 && CFLAG:ARG:不死身フラグ == 1 && BASE:ARG:剣撃 == 100\\ BASE:ARG:剣撃 = 25\\ BASE:ARG:飛具 = 25\\ BASE:ARG:打撃 = 25\\ BASE:ARG:戦技 = 25\\ ENDIF\\
ELSEIF RAND:2 == 0
PRINTFORMW ランダムで、1/2で分岐します。\\
ELSE
PRINTFORMW RAND:2すらも潜り抜けてきた「その他」ですね。\\
PRINTFORMW 以下、味方PTの状態を確認してみましょう。\\
PRINTFORMW 味方PTは、ポジション1から6番のキャラです。FORで確認してみましょう。\\
FOR LOCAL:1, 1, 6\\
IF POS(LOCAL:1) == *1 || CFLAG:POS(LOCAL:1):ステート == GET_STATE_NUM("DYING")\\
PRINTFORMW そこにキャラがいなかったり、死んでいた場合は次のキャラをチェックします。\\
CONTINUE\\
ELSEIF CFLAG:POS(LOCAL:1):攻撃強化 >= 16\\
PRINTFORMW 攻撃強化が2段階以上ならここに入ります。\\
LOCAL:2 += 1\\
ELSEIF (CFLAG:POS(LOCAL:1):防御強化 + CFLAG:POS(LOCAL:1):命中強化) >= 16\\
PRINTFORMW 防御強化と命中強化の合計が2段階以上ならここに入ります。\\
LOCAL:3 += 1\\
ELSEIF CFLAG:POS(LOCAL:1):物理反射フラグ == 1\\
PRINTFORMW テトラカーンなどで物理反射状態ならこちら。\\
LOCAL:4 += 1\\
ELSEIF CFLAG:POS(LOCAL:1):打撃無効化回数 > 0\\
PRINTFORMW 打撃を無効化する壁が張られている状態ならこちら。\\
LOCAL:5 += 1\\
ELSEIF MAXBASE:(LOCAL:1):2 <= 0 || MAXBASE:(LOCAL:1):2 == 999\\
PRINTFORMW 打撃が無効以下、または反射である場合です。\\
LOCAL:6 += 1\\
ELSE\\
LOCAL:7 += 1\\
ENDIF\\
NEXT\\
IF LOCAL:2 > 0\\
PRINTFORMW 攻撃力強化が乗っているキャラがいました。\\
ELSEIF LOCAL:3 > 0\\
PRINTFORMW 防御強化と命中強化の合計が2段階以上のキャラがいました。\\
〜〜〜\\
ENDIF\\
ENDIF
| = |
使いやすいのは、HP条件、イベントフラグ、経過ターン数が奇数か偶数かでパターン変化、あたりでしょうか。
構文参考例
死んでるやつがいたらリカームしてポジション変更
>ERB\RPG\闘技場\CLOSSEUM_14_VS陰陽師の末裔.ERB
166行目の「スザクの思考パターン」にて、「死んでるキャラがいたらリカーム」「前衛にいたら後ろと交代」というAIが組まれています。
コロシアムのサタン様
>ERB\RPG\闘技場\COLOSSEUM_55_サタン\COLOSSEUM_55_AI.ERB
敵の弱点をサーチするなど、様々な行動を行っています。
ターンエンド時のあれこれ
AIとはちょっと話がズレますが、ターンエンド時などにイベントを発生させることができます。
ダンジョン52_空の科学館で、「ターン終了時火炎ダメージを受ける」などですね。
このあたり筆者詳しくないです。ガンバレ。
どんくらいの強さがいいの?
原作と同程度、というのがいいかもしれません。
ただし、単純に原作の行動やLvをだいたい再現してやればいい……というわけでもありません。
単純に、「原作で使ったスキルがShinEraTenseiでは実装されていない」とか、あるわけですしね。
その場合は「作ればいい」となるわけですが、専用にスキルを作るのも憚られる場合、似た立ち位置のスキルに置き換える、という手があります。
「原作と、体感での強さはだいたい同じ」……くらいになればよいのかなと。
具体的に
結局のところ、テストをしてみて、強さが適正かどうかを確かめねばなりません。
しかしながら、ShinEraTenseiでゲームバランスを取るのは、ぶっちゃけ無理です。
いくらでも寄り道ができますし、作ったボスが寄り道側であることもあり得ます。
そんなわけでとりあえずの指針となりますが、「想定Lvになったけど、育成があまり上手くいっておらず、情報を持っていない1周目」の状態を想定してテストをした方がよいでしょう。
その状態を作ってみて、「たまに誰か死ぬけど、問題なく倒せる」くらいの状態が、たぶんいい具合のバランスです。
まず、あなたはサマナーとしておきましょう。
ShinEraTenseiの基本バランスは、あなたがサマナーであることを前提にしている……とされるためです。
人間キャラなどイベント加入キャラはあまり入れず、悪魔をメインにしたPTを組むのがいいと思われます。
ただし、一連のイベントで、事前に仲間になったキャラがいるのなら、そのキャラをくわえるのもよいでしょう。
P3系のイベントなら、タルタロスで仲間になったペルソナ使いを入れてみる……などです。
このあたりは、自分のバランス感覚を信じて、「適当に」PTを何パターンか組んでみるのがよいかと思われます。
人間キャラの装備は、そのレベル帯で可能な装備から一段下げた店売り品。
魔晶剣などは装備せず、ガンスリンガー用の弾丸も弱点が突けるものをわざわざ持っていかない、くらいのつもりで。
PTの最大レベル・平均レベルはボスと同程度かそれ以下くらいがよいでしょう。
Lv40のボスなら、PTの平均レベルは35かそれ以下くらい、という塩梅ですね。
ステータスについては、バランス型に近いような育成にしておいた方がいいかもしれません。
可能なら、悪魔全書からテキトーにLvが近い悪魔を呼び出してそのまま連れていくといい感じかも。
特に低レベル帯では、MAG強化でのステータス上昇や耐性強化、スキルカード使用、調教を行わない(ステータス補正がかかります)といった縛りも設けてもいいかもしれません。
殺意の搭載
高レベルのボスを作ったとき、攻撃がヌルいと、「死ぬ要素がないダラダラした緊張感のない戦闘」になりがちです。
かといって、「攻撃が猛烈すぎて、適正レベル想定では毎ターン死者がドバドバ出る」のもちょっとねぇ。
ボスというなら、「乗り越えられそうな障害」ではあるべきなんですよね。
障害ですらない……というのはちょっと情けない状態ですし、乗り越えられそうもない、というのも、モチベーションの低下を招きがちです。
ランダム行動だと、攻撃が苛烈かどうかは運に左右されてしまうので、このあたりはAIを組むといい感じにできる、かもしれません。
つまり、ボスの行動にローテーションを設けて、「ぶっころターン」「攻撃が緩むターン」「普通のターン」「ぶっころターン」……というループをさせるわけですね。
3ターンに1回くらい死者は出るけど立て直しはなんとかできて、攻撃をやり返せるかも。
ぶっころターンに防御しておけば次のターンは回復しながらの殴りでOK。
……みたいな塩梅です。
