レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
改造・制作スレ part9
-
改造・オリシナ制作などはこちらで。
過去に似たような質問があるかもしれないので、極力調べてから質問しましょう。
ヴァーレントゥーガまとめwiki シナリオ製作講座
http://www28.atwiki.jp/vahren_ency/pages/411.html
改造・制作スレ
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1250722590/l50
改造・制作スレ part2
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1282244590/l50
改造・制作スレ part3
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1305281909/l50
改造・制作スレ part4
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1331214703/
改造・制作スレ part5
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1350187379/
改造・制作スレ part6
http://jbbs.shitaraba.net/bbs/read.cgi/computer/42292/1372172557/
改造・制作スレ part7
http://jbbs.shitaraba.net/bbs/read.cgi/computer/42292/1396009373/
改造・制作スレ part8
http://jbbs.shitaraba.net/bbs/read.cgi/computer/42292/1463836625/
-
>>949さん、ありがとうございます。
文面通りにやってみたのですが、不慣れで理解が追い付いていない部分があります。
問題点等ご指摘いただければ幸いです。
event battle_deadcount
{
1)勢力の勢力名を文字変数Aに格納
storePlayerPower(@base_power)
2)領土を文字変数配列Aに格納
storeSpotOfPower(@base_power, @base_area)
3)ユニットを文字変数配列Bに格納
storeUnitOfSpot(@base_area, @base_unit)
4)文字変数配列Bの要素数を数値変数Aに格納
pushv(@base_unit, base_unit_numA)
5)戦闘を行う&6)戦闘終了後、該当する勢力に対し1〜3を繰り返す(ここからが不明瞭)
while(inBattle(@base_power)){
storePlayerPower(@base_power)
storeSpotOfPower(@base_power, @base_area)
storeUnitOfSpot(@base_area, @base_unit)
pushv(@base_unit, base_unit_numA)
}
7)戦闘終了後に更新した文字変数配列Bの要素数を数値変数Bに格納
pushv(@base_unit, base_unit_numB)
8)数値変数AとBの差を求める。
sub(base_unit_numA, base_unit_numB)
set(base_unit_numA, dead_num)
}
-
横からだけどまず死者カウントに同盟勢力の援軍を考慮するかどうかでスクリプトの難度が変わって来ると思う
自勢力限定ならそもそも繰り返しがいらないので一発でOK。しかし今回はいらなくなるとはいえwhile文の使い方が間違ってるのでそこはちょっと気になる
援軍を考慮する場合、援軍で戦闘に参加した勢力を代入する関数は存在しないのでそれを判定する処理を自力で組み上げる必要がある
-
どーも>>949です
>>952さんが既に書いていますが、自勢力の戦死者数だけでいいならループ処理は不要です
(ループを用いるのは、「生存している全勢力」の戦死者数を、それぞれ数える場合のみ)
◇個人的な修正案(正直合ってる自信はない)
▼戦闘前に呼び出すイベント
event battle_deadcount_get
{
・まず戦闘前に、自勢力の全てのユニット数をカウントし、数値変数Aに保持する。
1)プレイヤーの勢力を文字変数Aに格納
(※可能であれば自勢力の文字変数格納は、ゲーム開始時に済ませておくと良い。)
storePlayerPower(@base_power)
2)自勢力が持つ全ての領土を、文字変数配列Aに格納
storeSpotOfPower(@base_power, @base_area)
3)文字変数配列A内の領土に居る、全てのユニットを文字変数配列Bに格納
storeUnitOfSpot(@base_area, @base_unit)
4)文字変数配列Bの要素数を数値変数Aに格納
pushv(@base_unit, base_unit_numA)
}
5)戦闘を行う
▼戦闘後に呼び出すイベント
event battle_deadcount_set
{
・戦闘終了後に、自勢力内の全てのユニット数を改めてカウントし、数値変数Bに保持する。
6.1)プレイヤーの勢力を文字変数Aに格納
→すでに(1)で獲得しているので、そちらを利用
6.2)改めて自勢力が持つ全ての領土を、文字変数配列Aに格納。
(※戦闘結果により、自勢力の所持領地数が変更されている可能性がある為)
storeSpotOfPower(@base_power, @base_area)
6.3)文字変数配列A内の領土に居る、全てのユニットを文字変数配列Bに格納
storeUnitOfSpot(@base_area, @base_unit)
7)戦闘終了後に更新した文字変数配列Bの要素数を数値変数Bに格納
pushv(@base_unit, base_unit_numB)
8)数値変数Aと数値変数Bの差を求める。
sub(base_unit_numA, base_unit_numB)
9)その差を死亡カウント用の変数に加算
add(dead_num, base_unit_numA)
}
自勢力だけ数えるならこんな感じでいい。
以下補足、無視していい。
他勢力も数えたいなら、storePlayerPowerをstoreAllPowerに変えて、加えindex用いて
それぞれの領土獲得とそこのユニット獲得をして、それぞれの差を求めればよい
但し処理が重くなるし、ゲーム上の勢力数が安定しないなら、その為の数値変数枠を
あらかじめ作っておく必要や、数値変数と勢力を照合する必要がある為、正直おすすめしない
-
この場合簡易戦闘は別に考える必要があるな
普通の戦闘終了ならisWorld()でイベントを起こせばいいけど、
簡易戦闘中が終わったときのアプローチが存在しないからね
銃魔はその辺どうクリアしてるんだろ
-
あーまじですかー
確かに今ざっと調べてみたら、簡易戦闘前後だとアプローチ・トリガーがないなぁ
となるとdead_event活用する感じかなぁ
でもdead_eventって簡易戦闘でも機能するんだろうか?
-
「今簡易戦闘終了後のタイミングか」を判定する条件式がないだけでワールドイベントは読み込まれるから
戦闘イベントのどこかに
set(sentoushita,1)
ワールドイベント直下に
if(sentoushita==1)
{
/*
戦闘後イベント諸々
*/
set(sentoushita,0)
}
で引っ掛かるくない?
-
>>949
>>956
質問者です。いろいろとありがとうございます。
battle_deadcount_setはif(sentoushita==1)の時、でいけそうですね。
銃魔のレザネーションのスクリプトを確認したらbattle_resultを似た方法で起こしていました。
国語の問題で恐縮なのですが、
▼戦闘前に呼び出すイベント(event battle_deadcount_get)
の「戦闘前」は、isPlayerTurn()とisComTurn()と、それぞれ開始時に起こせば良いということでしょうか?
-
>>956さん
自分もそれぱっと思いついて
例えばdead_eventとの組み合わせで(過剰にはなるんだけど)兵士が死んだら
set(sentoushita,1)すればできそうだなって思ったんですけど
「ワールドイベントって簡易戦闘が終わった直後に読み込まれるのか?」って不安がありまして
ただ、>>957さんのを見た感じ行けそうですね
ワールドイベントって簡易戦闘直後に読み込まれるんですね勉強になる〜
でしたらまぁ全てのマップに開幕時即死亡するユニットをマップチップで置いて
deat_eventでset(~)すればいけるかな?
>>957さん
とりあえずおつかれさまです
戦闘前というのは、「マジで全ての戦闘が始まる」直前をさします
すなわち、「○○が侵攻しました」のダイアログが出て
ダダダダッと「自分またはCPU問わず何らかの勢力」が「どこぞの領地」に攻め込むたびに
イベントを起こしてほしいです
戦闘は攻撃戦だけでなく、防御戦、援軍戦もあります
もし「自勢力が攻める直前だけイベントを起こす」となると、攻める時は死亡数カウントされますが
攻め込まれたときや援軍に行ったときに、死んだ兵士をカウントし損ねます
ですので「あらゆる戦闘が始まる直前」に必ず、当該イベントを起こしてください
-
>>958さん、無事に作っていただいたスクリプトが機能しました!
ありがとうございます。
-
なによりでーす
製作、頑張ってくださいな
-
ヴァーレン制作ミリしら勢ですが、ヴァーレンで将棋を再現することって結構難しいのでしょうか?今考えていることとしては、
・領地を実際の将棋盤に見立てて駒の取り合いを再現する
・同じユニット(駒)でも先手か後手かによって移動できる領地が変わる
・駒が敵陣に入ったり、出たりしたときに成ることができる(成不成の確認コマンドが必要)
・ユニットの種類によって移動・出陣可能なエリアを個別に設定する(駒の動きを再現)
・手番が変わるたびにユニットが移動可能エリアの再判定を行う
・進路上に味方や敵ユニットがいる場合はそれ以上先に進めない、という判定が必要
・攻撃側は必ず勝ち、防衛側は必ず敗北する
・防衛側のユニットはターン終了後、攻撃側のユニットになり攻撃側の駒台に移動する
・取られたユニットは敵味方の領地にかかわらずどこにでも移動・出陣が可能(ただしユニットが存在しない領地に限る)
・各領地に配置可能なユニットは一体のみ
・先手と後手がそれぞれユニットを一回動かした時点でそのターンは強制的に終了する
・偶数ターン、奇数ターンなどで厳密に先手と後手を分けるか、同じターン内で必ず先手が先行して動けるようにする
・一回でもマスターが戦闘で敗北した時点でゲーム終了、勝敗が決まる
・マップ上で領地にいるユニットが見えるようにする(いちいち領地を開いてユニットを確認する手間を省くため)
・初めは、完全解析されているどうぶつしょうぎや3x3将棋から実装すると良いかもしれない
などを考えています。政策を使ってもこれを再現するのって厳しいですよね?
-
>>961
将棋はルール的にエンジン側と致命的に相性が悪い要素があまりにも多いし、
わざわざヴァーレンを使ってやる理由がないだろうなあ…
いつぞやウディタで要素追加型の将棋作ってる人もいたし、他エンジンを当たった方がいいと思う
-
ツクールやウディタでもRTSは作れるけどヴァーレンで作った方がいいよね
-
楽ではあるだろうけど目的自体ではお勧めしない
-
ヴァーレントゥーガの最新版の戦闘シーンで
部隊長の上に旗が表示されるんだけど
あんまり好きじゃなくて、表示しないようにする方法とかありますかね
-
制作お疲れ様です。
勢力選択画面で旗が表示されなくなりますが次のような方法があります。
現バージョンではchangePowerFlag()で旗を変更しても戦闘画面では以前の旗が表示されるのを利用し、
何も書いていない64×32の透明な旗を用意してシナリオ構造体のpowerにはそれを設定、
ゲーム開始時のイベント等でchangePowerFlag()で表示したい旗に変更する。
-
>>966
なるほどなぁ、そんな方法があったんすね。
回答に感謝します。
-
addUnit()で追加されたユニットって、追加されたターンだと
所属する勢力の情報とかを持たない状態になるんですね
(一度ターンを跨ぐと、所属勢力情報などが追加されている)
ユニットが持つ情報ってどのタイミングで補完されるかご存知の方っていますか?
-
いやっほう
-
上げてしまってすみません
統合素材集ってもう更新されていない感じでしょうか?
後日に素材を登録したいのですが
-
>>970
流石に最終更新10年前なので更新されてないと見て良いのでは…
大人しく小物入れに上げてWikiの素材リンクページに追記するとヨロシ
-
戦闘中ってwhile使えないんでしたっけ?
戦闘中に反復処理したいんですけど、どうすればいいでしょうか?
-
>>972
どんなイベント作るか言わないと住民も助言できないと思うのだが
過去の制作スレか、まとめwikiの if〜elseと条件式関数 か 関数(戦闘シーン)でも読んでみたら?
-
>>973
ご返答感謝です
どんなといわれましても、文字変数の配列を用いる全ての戦闘イベントで用いますので
個別に対応するというより、反復処理のアイデアだけでも頂ければ助かりますね
wiki確認しましたけど、探した限りでは記載なかったんですよね
ただこのスレさかのぼったら普通に使えないとありました
失敬失敬
-
CPU勢力のターン終了時に処理を入れたいんですけど
そうするために必要なif分の条件式が見つからないのですが
もしかしてそもそものやり方が存在しない?
-
おま環かもしれないがBluetoothヘッドホンで一部シナリオをやったとき酷い音ズレになったがケーブルでヘッドホン繋いだらよくなった
どこに書くか迷ったが記録として残しておく
-
>>975
手番勢力を毎回取得してチェックするしか・・・
結構面倒だと思う。文字変数はセーブされないので
ストーリー勢力ならワールドイベントの追加あるから勢力判定できるかな?
-
>>977さん、返答ありがとうございます
あと、すいません、私の書き方が悪かったです
以下に長々と書きますが、要は「何らかの勢力のターン終了時にイベントを発動できるトリガー(条件式)が欲しい」という事ですね
wikiの「if〜elsenと条件式関数」において「プレイヤー勢力のターン終了時か」を調べられる
isPlayerEndという関数はあるのですが、CPU勢力に関しては、ターン開始時(isComTurn())はあるのですがターン終了時が無いのですね
貴方のおっしゃるように、手番勢力の勢力名を確保できれば、CPUに限らず
「何らかの勢力ターン終了時に発生させる条件式」があれば問題は解決するのですが、それも無いようで……
あと、試しに「isPlayerEnd()」がそもそも「ターン終了時に、その終了した勢力がプレイヤー勢力であるか」
という条件式であるという可能性を仮定してテストしてみたのですが、普通にターン終了時のタイミング以外もイベントが読み込まれました
-
storeNowPower(文字変数) で
@pre_power = @power
storeNowPower(@power)
if(@power!=@pre_power) {
勢力が変わったときの処理
}
という感じで行けると思います。たぶん
ただこの処理だと@pre_powerが空のときヒットする
特にロード直後はすべての文字変数が空なので常にヒットしてしまう問題が・・・
-
977さん、貴重なお時間を使ってくださり、ありがとうございます
その勢力のターン終了時ではなく、次の勢力のターン開始時に処理を行うというのは
確かに良いアイデアですね
その場合(isPlayerTurn || isComTurn)で行けそうです
しばらくこれで様子を見て見ようと思います
改めてご返答、ありがとうございます
-
質問です
勢力A・Bが勢力Cに対して共闘する関数もしくは処理はありませんか?
-
雇用関係で詰まってます
あるユニットが、別のクラスを持つユニットを雇えるようにしたいんですけど
同時に、その雇ったユニットを配下に持ちたくないんですね
(同僚として雇いたいが配下にはしたくない)
同クラスのユニットであればsamefriend,samecallでできるのですが
別クラスの場合、どうすればよいでしょうか?
-
戦闘マップの侵攻位置ってワールドマップの座標で固定なのでしょうか?
初歩的なことですみません。どうしても変な位置から始まるもので…
-
マップメーカーにて「@@」で部隊配置してください。
その地点が侵攻部隊の出現位置になります。
-
マップメーカーにある部隊名を入力する所の上の「部隊名」という文字をクリックしたら
少し幸せになれると思いますよ
-
終盤の中だるみを解決するため、スクリプトをつくってみました。
・マスターから3マス離れた地点を「遠征地」として補給が乱れる(弱体化LS)
・ただし重臣がいるエリアは、弱体化除外
if (isNewTurn() == 1)
{
storePowerOfForce(1, @p_top1)
storePowerOfForce(2, @p_top2)
if (@Player == @p_top1)
{
pushForce(@p_top1, v_top1_force)
pushForce(@p_top2, v_top2_force)
if (v_top2_force > 0)
{
set(v_ratio, v_top1_force)
mul(v_ratio, 100)
div(v_ratio, v_top2_force)
if (v_ratio >= 300)
{
storeMasterOfPower(@Player, @u_master)
storeSpotOfUnit(@u_master, @s_capital)
storeSpotOfPower(@Player, @s_spots)
set(v_i, 0)
while (v_i < count(@s_spots))
{
index(@s_spots, v_i, @s_now)
// 首都から3マス以上離れている場合のみ判定
if (isNext(@s_capital, @s_now, 2) == 0)
{
clear(@u_tmp)
storeUnitOfSpot(@s_now, @u_tmp)
set(v_has_jushin, 0)
// 【追加修正】その地点にマスター自身がいるか確認
if (inVar(@u_tmp, @u_master) == 1) {
set(v_has_jushin, 1)
}
// マスターがいない場合のみ、中のユニットのRankを精査
if (v_has_jushin == 0) {
set(v_j, 0)
while (v_j < count(@u_tmp))
{
index(@u_tmp, v_j, @u_one)
if (isUnit(@u_one) == 1)
{
set(v_rank, 0) // 毎回リセット
pushRank(@u_one, v_rank)
if (v_rank >= 2)
{
set(v_has_jushin, 1)
set(v_j, 999)
}
}
if (v_j < 999) { add(v_j, 1) }
}
}
// 判定結果の出力
if (v_has_jushin == 1)
{
scroll(@s_now)
talk(@s_now, &@s_now&:重臣・君主統治エリア)
}
else
{
if (count(@u_tmp) > 0)
{
scroll(@s_now)
talk(@s_now, &@s_now&:遠征弱体化を適用)
addSkill(@u_tmp, ls_bad2) ※弱体化LS
storeUnitOfSpot(@s_now, @u_tmp)
}
}
}
else
{
scroll(@s_now)
talk(@s_now, &@s_now&:本国近郊(対象外))
}
add(v_i, 1)
}
storeUnitOfPower(@Player, @player_allunit)
}
}
}
}
終盤の消化試合回避・人材の結集部隊による1点突破を難しくしようと考えてみました。
もしよかったら感想などください。
-
>>986さん
スクリプト拝見しました
isVarとかisUnitとか、Wikiで不明といわれてたり
そもそも記載されてない条件式を扱ってるあたり、かなりの猛者とお見受けします
条件付きの弱体化処理、面白いアイデアだと思います
終盤の消化試合じみた占領作業に対して、マスターや重臣の配置配分の考慮や
失った手応えを取り戻せるように兵士を弱体化させるというのは
手応えを持続させる上での一つの在り方だと思います
ただ、第三者目線からの感想として理不尽さと不必要性を感じる要素だとも思います
まずイベント発生の条件面で、プレイヤー勢力が圧倒的な戦力を持っているとありますが
頂点をつかむよう、貴方のゲームに真摯に向き合ったプレイヤーのその労力対し
対価としてペナルティを課す様は、とても理不尽だと感じました
また、条件式を見るに
「プレイヤー勢力の戦力が全勢力内で最大で、かつ二番手の戦力の三倍以上」とありますが
この条件を満たしてる場合、すでにそのゲームをやりつくしている状態にあるように思います
個人的には、そこにペナルティを課すよりも、そこで勝利条件を満たさせて
また一からニューゲームさせた方が、プレイヤーも楽しめるのではと考えます
対案として、そのオリシナの領地数にもよりますが
そもそも巨大勢力は必然と領地数が増すので、このイベントの適用範囲を
「プレイヤーの戦力が一定のラインを越えたら発動する枷」ではなく
「全ての勢力に常時課される補給線という枷」とした方が良いと考えます
そうすればざっと考えても以下のメリットが見いだせます
・補給線という、一種のリアリティをゲーム内でシステムとして表現できる
・仕様が全勢力に当てはまる事なので、理不尽さが軽減される
・プレイヤーが巨大勢力に追い詰められた際の救済措置になる
・直線的な侵攻を行った場合も弱体化するので、侵攻戦略として地盤を固める事が重要視され戦略性が増す
・プレイヤーが優勢の際にも発生するので、「プレイヤーに対する枷」という元の目論見通りの働きも十分こなせる
当イベントを「プレイヤーにのみ課されるペナルティ」ではなく
「あなたの作るオリシナ要素の一つ「補給線」という個性」に昇華してみてはいかがでしょうか?
いきなり出てきて踏み込んだ発言、失礼しました
素人意見ではありますが、ご参考にして下さると幸いです
-
isVarなどの旧構造体を知らない人へ
ヴァーレントゥーガ小物入れ1から「VT_material_1400」をDL
解凍後「_Tool」→「SAVT」とフォルダを開けて、そこにある「VTDk.khp」ファイルを
サクラエディタ(無ければメモ帳でも可)で開くと旧構造体などの解説一覧があるので
目を通しておくと参考になるかも
-
>>988さん
早速確認しました
確かにWikiでは把握できない情報もあり、とても頼りになりそうです
ただなんというか、すごくVT製作者としての覚悟が問われそうな内容ですね
時間をかけて情報整理しつつ、必要に応じてWikiに反映させていこうと思います
素敵な情報をありがとうございます
-
>>989
ここの利用者たちの合意形成なしに勝手にWikiに反映させるのは流石にマナー違反だろ
旧い構造体には、どのverまで正常に機能するかが不明なモノも多い
使われなくなった構造体には、使われなくなった理由があると思え
-
>>990
気持ちは分かるけどその言い方はないやろ
-
リンク切れがあるから新しくスレ立てするときは>>937に書き直すべきだと思う
次のスレで終わりそうな雰囲気もあるし記録として残しておきたい
-
>>991
慌てていて語気が強くなったのは謝る
ただ、ver8で今までどおりには機能しない構造体やそれに伴うバグが増えたし、
これからも機能しない構造体が増える可能性を考えたら、wikiの改竄はやはり慎重に取り扱って貰いたかった
個人的な案として、備考として掲載するのであれば今のwikiには、「このページヘのコメント」の項目があるので
コメント欄に記載する程度で十分だと考えている
-
よく分からんけどWIKIってちょこちょこ追加・改変していくものじゃないの?
昔あんな情報あったなーって探しに行くとちょこちょこ消されてるよ
それを改竄ってかなり言葉強いしWIKI信仰でもしてるの?
-
>>994
>>WIKI信仰でもしてるの?
関係各位(ななあしさんや管理人さん、各素材の提供者さんなど)に迷惑かけないでねって言ってるの
989は「VT_material_1400」のデータを「Wikiに反映させていこう」と言っているが、問題はそのやり方だ
「VT_material_1400」の ReadMe.txt には
・著作権
(´・ω・`|∀・)っ|) ◆RS5djDtutMに帰属します。
の一文がきちんと明記されており、989が「◆RS5djDtutM」氏に「引用」「転載」の許可を取ったのか
外野である我々からは不明であり、後から揉めないか住民として気になるのが、まず1点目の問題
更に、上記「引用」「転載」の問題をクリアしていたとして、「動作確認の検証」を行ったか否かも不明であり、
開発者向けのwikiとしての信憑性に欠ける点が、2点目の問題
加えて、「動作確認の検証」を行っていたとしても、旧構造体自体が何時まで使えるかが不明瞭であり、
場合によっては、旧構造体が使えなくなった際に生じるクレームが、ななあしさんや管理人さんにまで及ぶ
可能性を引き上げているのが、3点目の問題
これらの問題を避けるために、ここの住民たちの間では、
「権利者に許可を取る」「他の利用者に意見を聞く」「管理人さんに相談する」などの合意形成が行われてきたし、
それらを怠った強引な改変だったから「改竄」と評価したんだ
それを言葉強いとか手前勝手な価値観で被害者ぶり、相手を信者扱いして煽るとか、オレどころか住民(特に権利者)
全体に喧嘩売ってるのか?それともハナっからココの荒らしや私物化が目的か? キッチリ答えろ
-
>>991だけど>>994とは別人だよ
-
別人て・・・今更・・・
とは言え確認しなかった俺も悪かったし、そこはスマンかった
それと、これ以上この問題引っ張るとこっちも荒らし認定されそうなんで、この件からっ手を引く
問題点に関しては995で述べたし、何かあったら989が処理するだろう
wikiにもバックアップもあるし、アタマ冷やすつもりで当面は読む専に戻るわ
-
質問と要望です
スパロボ風の会話って実装できますかね?
event構造体でやるにしても喋っていないキャラの立ち絵を暗くする処理が分からなくて
-
もしその機能がなく、ななあしさんが見ておられたら実装をお願いしたいです
-
1000
|
|
|
掲示板管理者へ連絡
無料レンタル掲示板