したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

改造・制作スレ part8

1名無しさん@桜花爛漫:2016/05/21(土) 22:17:05 ID:1hw1nxVw
改造・オリシナ制作などはこちらで。
過去に似たような質問があるかもしれないので、極力調べてから質問しましょう。

ヴァーレントゥーガまとめ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/

744名無しさん@寒露:2017/11/06(月) 22:53:47 ID:???
うーむ、すごい検証数だ。お疲れ様です

745名無しさん@寒露:2017/11/07(火) 00:16:53 ID:???
ユニットを出し過ぎて大規模戦闘をし過ぎるとクラッシュする対策はないでしょうか
確か死んだユニットにも何かデータ割り当ててたと思うのですが、それを無効にしたりなど出来ませんか

746名無しさん@寒露:2017/11/07(火) 19:49:23 ID:???
参考までに聞きたいのですが、ユニット出しすぎって何体くらいでなりましたか?

747名無しさん@寒露:2017/11/09(木) 20:52:33 ID:???
>>745
自分は本家シナリオや「きのたけ」で召喚しまくっても、ユニット数の制限で出せなくなる事はあっても、クラッシュはしませんでした。それで不思議に思って、召喚しまくる実験をしてみました。

陣営ごとのユニット制限を btl_unitmax = 1000 に増やした上で、敵ユニットに範囲攻撃を使わせて、召喚されたユニットを一気に掃除することで、ユニット数の制限に関わらずに、大量に召喚することができます。(掃除しないと、表示されてるユニット数が制限を越えた時点で、それ以上の召喚ができなくなる。)召喚し続けると Vahren.exe のメモリー消費量が増えて行き、ユニット数が多過ぎるとゲームが落ちました。終了時に OS のエラー通知が無かったので、アプリケーション側で状況を見て自ら正常終了した感じです。

次に実験データを例示し、最後に私の結論を載せます。メモリー消費量はタスクマネージャーの数値ですが、微妙に上下するので厳密ではありません。戦場のオブジェクトやエフェクト、BGM、効果音、顔絵などで、実際のゲームではもっと消費が増えるはずです。スキルやエフェクトによる違いは試してないので、それらがユニット数に影響するかはわかりません。

748名無しさん@寒露:2017/11/09(木) 20:53:27 ID:???
[ 最新の v7.00 2017-10-12版 ]
敵は1ユニット、自軍は8ユニットで 1000 * 8 = 8000ユニット召喚しました。メモリー消費量は、召喚前は 332,748 KB、召喚終了時は 1,315,692 KB でした。(1315692 - 332748) / 8000 = 122.7 なので1ユニット当たり 123 KB ぐらいです。

敵は1ユニット、自軍は8ユニットで 1400 * 8 = 11200ユニット召喚しました。メモリー消費量は、召喚前は 326,152 KB、召喚終了時は 1,701,876 KB でした。ユニットを召喚するたびに増えるメモリー量は 123 KB で一定してます。

敵は1ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しました。メモリー消費量は、召喚前は 326,228 KB、召喚終了時は 1,741,600 KB でした。

敵は1ユニット、自軍は8ユニットで 1450 * 8 = 11600ユニット召喚しようとすると、途中で落ちました。召喚できるユニット数の限界は 11500 ぐらいのようです。

敵ユニットを1体から80に増やしてみました。敵は80ユニット、自軍は8ユニットで 1420 * 8 = 11360ユニット召喚しました。メモリー消費量は、召喚前は 336,484 KB、召喚終了時は 1,732,724 KB でした。

敵は80ユニット、自軍は8ユニットで 1430 * 8 = 11440ユニット召喚しようとすると、途中で落ちました。初期配置ユニットが多いと、召喚できるユニット数が減るようです。

味方ユニットも8体から80に増やしてみました。敵は80ユニット、自軍も80ユニットで 141 * 80 = 11280ユニット召喚しました。メモリー消費量は、召喚前は 345,092 KB、召喚終了時は 1,731,812 KB でした。

敵は80ユニット、自軍も80ユニットで 142 * 80 = 11360ユニット召喚しようとすると、途中で落ちました。陣営や召喚かに関係なく、戦場に登場した累計ユニット数に限界があるようです。

[ v7.00 の古い 2017-08-28版 ]
敵は1ユニット、自軍は8ユニットで 1000 * 8 = 8000ユニット召喚しました。メモリー消費量は、召喚前は 326,920 KB、召喚終了時は 558,408 KB でした。古いバージョンの方が、明らかにメモリー消費量が少ないです。

敵は1ユニット、自軍は8ユニットで 1400 * 8 = 11200ユニット召喚しました。メモリー消費量は、召喚前は 326,832 KB、召喚終了時は 650,632 KB でした。(650632 - 326832) / 11200 = 28.9 なので1ユニット当たり 29 KB ぐらいです。

敵は1ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しました。メモリー消費量は、召喚前は 326,912 KB、召喚終了時は 659,420 KB でした。古いバージョンでは、ユニットを召喚するたびに増えるメモリー量は 29 KB で一定してます。

敵は1ユニット、自軍は8ユニットで 1450 * 8 = 11600ユニット召喚しようとすると、途中で落ちました。メモリー消費量が少なくても、同じように落ちるので、メモリー不足はクラッシュの原因じゃないです。

敵ユニットを1体から80に増やしてみました。敵は80ユニット、自軍は8ユニットで 1430 * 8 = 11440ユニット召喚しました。メモリー消費量は、召喚前は 330,204 KB、召喚終了時は 660,548 KB でした。新バージョンだと落ちたのに、古いバージョンだと、最後まで召喚できました。

敵は80ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しようとすると、途中で落ちました。最大数は微妙に違いますが、古いバージョンでも、累計ユニット数には限界がありました。

味方ユニットも8体から80に増やしてみました。敵は80ユニット、自軍も80ユニットで 142 * 80 = 11360ユニット召喚しました。メモリー消費量は、召喚前は 331,240 KB、召喚終了時は 661,620 KB でした。やはり、古いバージョンの方が少し多くユニットを出せます。

敵は80ユニット、自軍も80ユニットで 143 * 80 = 11440ユニット召喚しようとすると、途中で落ちました。80 + 80 + 11440 = 11600 なので、累計ユニット数は 11500 ぐらいまでみたいです。

[ 開発版の v6.85v 2017-06-16版 ]
敵は1ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しました。メモリー消費量は、召喚前は 329,340 KB、召喚終了時は 661,108 KB でした。

敵は1ユニット、自軍は8ユニットで 1450 * 8 = 11600ユニット召喚しようとすると、途中で落ちました。メモリー消費量や限界は 2017-08-28版と同じようです。

[ 正式版の v6.90 2017-03-27版 ]
敵は80ユニット、自軍も80ユニットで 142 * 80 = 11360ユニット召喚しました。メモリー消費量は、召喚前は 331,492 KB、召喚終了時は 662,436 KB でした。

敵は80ユニット、自軍も80ユニットで 143 * 80 = 11440ユニット召喚しようとすると、途中で落ちました。メモリー消費量や限界は 2017-08-28版と同じようです。

749名無しさん@寒露:2017/11/09(木) 20:54:30 ID:???
実験の結果、最新版(2017-10-12) の問題点を発見しました。ユニット・データのメモリー消費量が古いバージョンに比べて4倍もあります。古いバージョンは1ユニットごとに 29 KB ぐらいだけど、最新版では1ユニットごとに 123 KB ぐらいです。したがって、ユニットを大量に出したいなら、最新版(2017-10-12) を使わない方がいいです。64-bit OS ならともかく、メモリー空間が狭い上に共有されてる 32-bit OS では、ユニット数の限界が来る前に、メモリー不足で動かなくなります。古いバージョンでも1ユニットに 29 KB もメモリーを使ってるのは謎です。数値データだけならもっと少ない筈なので、ユニットごとに画像データを保持してるのか、あるいは不要になったスプライトを解放してないのかもしれません。context や class の設定を変えたり、画像の大きさを変えたりしてみましたが、特に違いはありませんでした。

どうも、「死んだユニットにも何かデータ割り当ててる」のではなく、死んでもデータが丸ごと残ってるような気がします。その証拠に、スクリプトでは死亡ユニットのデータも取得できますし、死亡ユニットにスキルを使わせることもできるみたいですし、死体が消えずに残る不具合(沈んだユニット画像の上端が残る)もあります。スクリプトでユニットを取り除いた場合も、単に死亡扱いになるだけで、データは残ってました。ユニット数の限界に関しては、バグでは無いので、開発者に対応してもらうのは難しいように思います。

とりあえず、オリシナ作者ができる大規模戦闘時のクラッシュ対策としては、戦場に登場する累計ユニット数を 11500 ぐらいまでにするしかありません。守備側の初期配置数や援軍、攻撃側の出撃数や増援、それに双方が召喚する、全てのユニット数の合計です。無限召喚スキル(遠隔攻撃から召喚への連鎖)は、召喚数自体は設定できませんが、スキル使用間隔と連射数から、戦闘時間内に出せる数が決まります。予め、どれだけのユニットが戦場に出てくるかを計算して、その合計が限界以内に収まるようにすれば、クラッシュを避けれるでしょう。

750名無しさん@寒露:2017/11/10(金) 06:36:19 ID:???
これはかなり参考になるデータ
ありがたいです

751名無しさん@寒露:2017/11/10(金) 16:13:02 ID:???
メモリ的な限界は予想できてなかったのでうれしい

752名無しさん@寒露:2017/11/10(金) 17:16:04 ID:???
いや、メモリ的な限界が1番考えられただろ
その限界がどこまでかいまいちわからんかったのが問題だったわけで
それにしてもありがてえ検証だ

753名無しさん@寒露:2017/11/14(火) 17:00:11 ID:5622DLwA
setStatus(unit,move,hoge)が上手く動きません
talent=offのユニットだとうまく動かないでしょうか?それともほかの原因がありますか?

754名無しさん@寒露:2017/11/14(火) 17:27:13 ID:5622DLwA
少し気になって実験したのですが

unit notlnt
{
talent = off
name = ノータレ
}

setv(@aaa,notlnt)
msg(&notlnt&)→notlntと出力される

setv(@wanko,notlnt)
//この勢力にnotlntが存在するとする
storeUnitOfPower(pow,@bbb)
set(idx,0)
while(idx<count(@bbb)){
index(@bbb,idx,@bbb_get)

msg(&@bbb_get&)→notlntに当たった場合ノータレと出力される

if(@bbb_get == @wanko){

msg(同じものだよ!)→notlntが存在するはずなのに@wankoに合致するものがない
}

add(idx,1)
}

どういった問題を解決すればいいでしょうか・・・

755名無しさん@寒露:2017/11/14(火) 17:29:42 ID:???
連投すいません
目的としては、データベースとして使用しているtalent=onのユニットのステータスをtalent=offのユニットに移行するという目的です
データベースのmprecの数値でunitの種類を特定し、addUnitして追加したユニットにその他ステータスを落とし込むというのをやりたいと思っています

756名無しさん@寒露:2017/11/14(火) 17:55:36 ID:???
さらにすいません
>>754
誤;msg(&notlnt&)→notlntと出力される
正:msg(&@aaa&)→notlntと出力される
でした

757名無しさん@寒露:2017/11/14(火) 19:54:34 ID:???
unit構造体で定義された人材じゃないユニットを後からスクリプトでどうこうしようとするととんでもなく厄介だった記憶がある
dead_eventに疑似死亡イベント(レベルリセットして隠し領地に移動とか)を仕込んだ人材とかにした方が楽じゃないだろうか

758名無しさん@寒露:2017/11/14(火) 20:15:02 ID:???
>>757
talentなユニットだと困ることがあるのであえて外しています
具体的にはaddUnitした際に陪臣になってしまうことがやりたいシステムに致命的な邪魔になってしまうので

先日色々やってみましたが無理だったので、talentを外す方向で対応しました

とりあえずstoreUnitOfPowerとかで取得したユニットとして使えばマトモに使えて、setvで直接文字列突っ込んだのは使えないって感じになってますね

で、ユニットを外して入れ直す際のやり取りが

1・talent=onのダミーユニットを隠しspotに入れる
2・talent=offのユニット(以下メインユニット)のステータスを取得してダミーユニットに性能をコピー
3・メインユニットをeraseUnitで全部消す
4・メインユニットを再び発生させる、この際ダミーユニットを参照
5・ダミーのステータスを取得してメインユニットに反映

で、setLevelがこれまたダミーユニットにうまいこと反映しないみたいで、これはaddLevelを1づつするしかないのかな

759<あぼーん>:<あぼーん>
<あぼーん>

760名無しさん@寒露:2017/11/15(水) 20:42:51 ID:???
>754
unit 構造体の名前(notlnt)と、ユニットの名前(ノータレ)の使い分けが難しいです。

wiki によると、setv は文字変数に文字列を代入します。
>> setv(@wanko,notlnt)
この行では @wanko に構造体の名前として「notlnt」を代入してます。

その一方で、storeUnitOfPower は「ユニットの識別子」を文字変数に代入します。そして、unit/classの識別子における文字変数要素とは name で指定した文字列のようです。
>> index(@bbb,idx,@bbb_get)
この行では @bbb_get にユニット名として「ノータレ」を代入してます。

>> if(@bbb_get == @wanko){
「notlnt」と「ノータレ」は異なるので、この比較で合致しない訳です。setv(@wanko,ノータレ) として、ユニット名で探したらどうでしょうか。

761名無しさん@寒露:2017/11/16(木) 16:52:33 ID:???
>>760
なるほど、全角文字をスクリプトでも使えるのですね
ちょっとそれ念頭においてやってみます

色々目からウロコでした、ありがとうございます〜

762名無しさん@寒露:2017/11/25(土) 21:04:37 ID:???
ユニットが遠隔攻撃しながら前進&後退するのが嫌で、スキルの減速率を大きくしたり(slow_per = 1 で99%減速するはず)、地形の影響を大きくした(consti = 1 で移動力が20%になるはず)のですが、じわじわ動くようにはなりませんでした。

それで不思議に思って調べたのですが、移動速度には最低値があるみたいです。2種類のユニットの移動力をそれぞれ 1 と 50 にしても同じ速さで動きますが、1 と 51 は微妙に違います。移動速度の最低は 50 と思われます。それなら最高値もあるのかと、移動力を上げて試してみました。移動力 1250 と 2000 は同じ速さで動きますが、1240 と 2000 は微妙に違いました。移動速度の最高は 1250 ぐらいです。

まとめると、地形やスキルの影響で変化した後の移動速度は0(完全に停止)か50〜1250の間になるようです。動きが速すぎると当たり判定が難しそうですが、遅すぎるのも駄目とは意外でした。

763名無しさん@寒露:2017/11/29(水) 16:10:18 ID:???
どなたかお知恵をお借りしたいのですが、無敵突進スキルを作る方法ってありませんか?
光の目の「幽鬼の浸透」を流用できればよかったのですが、私の勘違いでなければ、
chargeスキルだとslideしても無敵になってくれない(進路上の攻撃にボコボコにされる)ように見えます
nextでmissileスキルに渡してslideさせたら今度は動いてくれませんし、バフをかけることもできませんし…
charge使いたいのは助走の有無を判定したいからなので、missileでもそちらの代替ができるなら構いません
どなたか解決法をご存知ありませんでしょうか

764名無しさん@寒露:2017/12/01(金) 19:05:50 ID:???
>> 763
chargeスキルで実現する方法をいろいろ考えてみました。

A)高速移動で避ける。
光の目の「幽鬼の浸透」のスクリプトを見ても、どうやって無敵にしてるのか判りませんでした。とりあえず、スライド速度を、敵の発射する魔法・矢・弾よりも速くすれば、スライド中に攻撃されても避けれそうです。ただし、長距離を高速でスライドする必要があるので、思ってる動きと違うかもしれません。

B)バリアーを張る。
本家シナリオのリリスが敵の攻撃を相殺しながらスライド移動します。敵の攻撃に属性を付ければ、遠隔攻撃・魔法攻撃だけなら相殺で無効にできるでしょう。しかし、接近攻撃は防げなさそうです。

C)分身を送り出す。
敵陣をゆっくり往復したいなら、本体はスライドさせずに、攻撃モーションだけ動かす手もあります。「image = @@」にすれば自分のユニット画像になるので、resize_s と resize_s_start で途中から速度をマイナスにして、発射した画像が戻ってくるようにできます。その間、本体は攻撃位置で停止させておけば、分身がスライドしてるように見えそうです。分身は矢・弾と同じ扱いなので、敵に攻撃されません。ただし、本体は普通に攻撃を受けます。

D)回復しまくる。
敵から攻撃されることを前提にして、受けたダメージを直ぐに回復すれば、無敵と同じになります。「attack_us = 7」で自分を命中対象に変えてから healスキルに繋ぐと、敵を攻撃しながら自分を回復できます。ただし、一撃で死ぬような攻撃(即死・大ダメージ)には対処できません。また、回復量の数値がユニットの頭上に湧き上がるのは奇妙に見えるかもしれません。

どの案にも問題がありますが、参考になれば幸いです。

765名無しさん@寒露:2017/12/03(日) 13:06:47 ID:???
>>764
アドバイスありがとうございます。
そうですね、自分も実現可能なのはその4つだと思っています。

しかし、Aだと一瞬で多数のモブを斬り殺すサムラーイみたいな技になっちゃいますし、
Bは自分もやってみましたが、やはり接近攻撃は相殺できませんでした。
Dも思いつきはしましたが…突進よりむしろ全回復が便利な技になっちゃいますからねぇ。

Cなら工夫次第で、例えば自キャラを画面外にスライドさせて、
しばらくして戻ってこさせたら実質無敵に…等と考えましたが、
やはりヴァーレンの仕様を考えると「往復」にどうしてもなってしまうので、
無敵突進(一定距離まで何があっても突き進む)という自分のイメージとはちょっと合いませんでした。
色々すいません。

766名無しさん@寒露:2017/12/06(水) 23:02:12 ID:???
>>765
近接攻撃全部を近接で発動してダメージ判定をMissileにしたらどうですかね
近接後に一瞬だけ判定する小さいMissile攻撃を判定する感じです
ごく特殊なパターン以外でほかのユニットにあたることはないかと

767名無しさん@寒露:2017/12/08(金) 12:05:19 ID:ZVSUzBMM
シナリオを作っていて時折Vahren.exeを立ち上げてもエラーメッセージすら吐かないで消える事があるんだけど何なのかな?

768名無しさん@寒露:2017/12/08(金) 12:32:12 ID:???
datファイル開きながら起動すると落ちるよ
exe起動してからなら開いても大丈夫だけど

769名無しさん@寒露:2017/12/08(金) 14:50:59 ID:???
>>768
それはエディタ次第
terapadだとdat開きながらでも起動できるよ

770名無しさん@寒露:2017/12/08(金) 19:43:07 ID:???
メモ帳最強

771名無しさん@寒露:2017/12/09(土) 01:04:13 ID:J8woA3Go
プレイヤー勢力以外がみんな同盟結んでせめてくるんですがどうすれば解消されますか?
幼稚な質問ですいません。
diplo系を弄くろうとしたんですがコンテンツの解説にもなくて困っています。
hostil設定はしていません。

772名無しさん@寒露:2017/12/09(土) 18:56:34 ID:???
>>771
シナリオ製作講座に「外交について」という、そのものずばりの解説ページがあります。

プレイヤーが最強国になると、残りの敵が同盟を結びやすくなるのですが、その判定を diplo_most_power で調節することができます。最強国じゃないのに仲間外れにされるなら、相性の違いの影響かもしれません。敵同士の相性を悪くするとか、敵マスターの野望を高くして、お互いに争うように仕向ければいいです。

773名無しさん@寒露:2017/12/09(土) 21:52:57 ID:J8woA3Go
ありがとうございます。
できました。

774名無しさん@寒露:2017/12/11(月) 20:57:48 ID:???
RPGツクールなどのように
音楽用のOGGやMIDIをあらかじめ決めたループ地点からループするようにしたいのですが、
どなたか方法や改造の仕方をご存知でしたら教えてください。

775名無しさん@寒露:2017/12/11(月) 21:20:39 ID:???
原曲のファイルとは別にもう一つ、ループ再生用のファイル作っといて、
通常の再生が終わったらそのファイルに繋げるとかどうだろう
再生終了→次ファイルの再生開始がうまいこと繋がるように編集して、2週目以降はループ再生、って感じで

776名無しさん@寒露:2017/12/13(水) 19:50:33 ID:???
ウィンドウ枠の角を丸く表示する方法を見つけました。

RPGツクールVXのウィンドウスキン素材をそのまま使うと、左上のスキン画像がウインドウ全体に引き伸ばされるので、せっかく右上の枠画像を丸っこくしても、背景が四角に表示されて台無しです。(ツクールでは周囲の 2 dot には表示しないけど、ヴァーレントゥーガは全面に表示する為)

解決策は単純で、左上のスキン画像の四隅を枠の丸みに合わせて透明にするだけです。ウィンドウ枠の丸い角の透明部分は、背景画像でも透明になるので、綺麗に表示されます。(スキン画像は拡大されるので、透明部分も大きくなることに注意)

ほんの少しの修正で見栄えが良くなるので、ツクール仕様のウィンドウスキンを導入してる方は、ぜひ試してみてください。

777名無しさん@寒露:2017/12/14(木) 23:24:21 ID:???
>>775
灯方式で初回しか流す気がないイントロ部と、
ループさせたい主演奏部を別ファイルに分割する方が容量は軽くなりそうだな…

778名無しさん@寒露:2017/12/24(日) 19:43:57 ID:vV5Wt982
そういえばVTになってスキルやユニットで大きな画像を使えるようになったけど、スポットや旗だと大きな画像は使えないんだよね。
色々と画像に情報を詰め込もうとすると32×32だと足りない。

779名無しさん@寒露:2017/12/31(日) 17:12:34 ID:???
そういう意味じゃ旗の大きさ変えたり同じ勢力でも違う旗にできる方法があればいいんだけどねぇ

780名無しさん@寒露:2018/01/03(水) 13:31:17 ID:???
>>778
旗は仕様が決まってますが、スポット(領地)の画像は大きさを指定できます。
wiki の「シナリオ製作講座」の「spot構造体(領地の設定)」ページを参考にしてください。画像サイズを指定してやればいいだけです。

更にスクリプトで後から領地画像を変更することもできます。「関数(イベントの設定2)」ページの changeSpotImage です。
内政によって街が発展したり、戦乱で荒廃したりするのを、画像で表現すると面白そうです。

781名無しさん@寒露:2018/01/12(金) 22:16:57 ID:???
質問です

指定勢力の指定一般ユニットを別一般ユニットに変更することはできますか?
レベルによるクラスチェンジは無しで内政コマンドによって上位ユニットが開放されると自動で上位ユニットにクラスチェンジ……
と言うことがしたいのですが、制作講座見てもそれっぽいのがないので……

782名無しさん@寒露:2018/01/13(土) 00:25:52 ID:???
そういうのが有るなら俺も使いたいな
少なくともwikiにも無いしスクリプトで見た覚えも無いから多分無い
内政コマンドのイベント内でwhile使って全員changeclass処理するしかないと思う

783名無しさん@寒露:2018/01/13(土) 09:16:14 ID:???
changeClassにしても特定の勢力の特定の一般ユニットを変数に代入できるのかって問題が……

784名無しさん@寒露:2018/01/13(土) 10:48:32 ID:???
特定の一般ユニットってのがどういう範囲なのか分からないから何とも言えない
特定のクラスならstoreclassofunitで選り分ければいいし、領地ならstoreunitofspotでいい
特定のイベントで加入したユニットとかなると面倒くさいが、加入する時に識別用のスキルでも追加しておけばstoreskillofunitで判別できる

785名無しさん@寒露:2018/01/13(土) 13:35:15 ID:???
while,storeClassOfUnit,changeClassを使えばできる
勢力の標準雇用ユニットも合わせて変えるならerasePowerMerceとaddPowerMerce2でできる
それとクラスチェンジ前後でステータスが変わるならレベルは振り直した方が良いかもしれない

786名無しさん@寒露:2018/01/13(土) 15:33:46 ID:???
event classchange
{
storePowerOfUnit(@PowerAUnit, PowerA)
set(idx, 0)
while(idx < countVar(@PowerAUnit)){
index(@PowerAUnit, idx, @idx_unit)
storeClassOfUnit(@idx_unit, @idx_unit_class)
if (@idx_unit_class == classA){
changeClass(@idx_unit, classB)
pushLevel(@idx_unit, idx_unit_lv)
setLevel(@idx_unit, 1)
sub(idx_unit_lv, 1)
addLevel(@idx_unit, idx_unit_lv)
}
add(idx,1)
}
}

たぶんコレでいける
勢力Aの全ユニットのクラスを調べて、クラスAだった場合クラスBにクラスチェンジさせる
レベルを振り直さないならpushLevel以降はいらない

787名無しさん@寒露:2018/01/13(土) 16:06:22 ID:???
なにこれ凄い

レオーム家のソルジャーをボウマンにすると仮定するならば
まずレオーム家のソルジャー数を数え@PowerAUnitに代入、
レオーム家全ユニットに対してソルジャーかどうか確認しソルジャーならボウマンにクラスチェンジしidxに1加算。idxが@PowerAUnitを越えたら終了

って認識であってますかね……?組み合わせ次第でこんなことも出来るなんて目から鱗です!もっとスクリプト学ばないと……!
(完成するかはともかく)作成中のオリシナにこのスクリプトを改変(する部分が無さそうですが……)使用させて頂いてもよろしいでしょうか?

788名無しさん@寒露:2018/01/13(土) 16:32:53 ID:???
whileループは基礎中の基礎だからこのくらいは改変して使っても何も問題ないよ
シナリオ制作がんばれー

789768:2018/01/14(日) 00:02:02 ID:???
使用する関数が間違っていたので訂正
× storePowerOfUnit
◯ storeUnitOfPower

790名無しさん@寒露:2018/01/14(日) 00:06:50 ID:???
名前を間違ってしまった
もうだめだー

791名無しさん@寒露:2018/01/18(木) 15:01:22 ID:???
event ほにゃらら
{
storeUnitOfSpot(spot1,@s1haitiunit)
//spot1に配置されたユニットの種類を調べる
pushCon(spot1,@s1haitiunit,heisisuu)
//spot1に配置されたユニットの数を調べる(直接配置ユニット数のみを調べる関数は無いらしい?)
if (heisisuu >= 100)
//spot1に配置されたユニット数が100以上ならイベント発動
{
イベント処理
}
}
spot1に100ユニット以上が配置されていてもイベントが発動してくれません
毎ターン読み込まれ、毎ターン100ユニット以上つめこんでいるのでスクリプト自体に問題があるようなのですがどこが問題なのでしょうか?

792名無しさん@寒露:2018/01/18(木) 15:42:09 ID:???
spot1に2種類以上のユニットが配置されてませんか?
一部の関数以外は、複数の要素が入った文字変数は先頭を参照するので、例えばAが10体、Bが100体いて@s1haitiunitの先頭がAなら反応しないはずです
pushCon使ったこと無いけど

793名無しさん@寒露:2018/01/18(木) 15:44:32 ID:???
あ、あとユニットの種類に関係なく100体以上で発生ならcountvar(今はcountだっけ)でもいけると思います

794名無しさん@寒露:2018/01/18(木) 16:33:02 ID:???
ああ、ああ!引数の領地が持つ「全てのユニットの【識別子】」を〜と書いてあったから勘違いしてました!
storeUnitOfSpot(spot1,@s1haitiunit)
if (count(@s1haitiunit) >= 100)
で行けました!ありがとうございます!

795名無しさん@寒露:2018/01/25(木) 14:54:26 ID:???
addPowerMerce2( 勢力 , ユニット , ユニット , ‥)勢力に標準雇用ユニットを追加します。
addPowerMerce( 勢力 , ユニット , ユニット , ‥)こちらはマスター関連のデフォルト雇用情報がリセットされるので非推奨となりました。

とのことですがmerce2を使用すると本来雇用できない様に設定したマスターと同クラスユニットが、追加されるよう設定していないにも関わらず勢力の標準雇用ユニットに追加されます
反面merceを使用した場合その現象は起きず本来追加したいユニットだけが追加され、デフォルト雇用情報は別にリセットされません
これはwikiの情報が古い、或いは間違っているだけで本来はmerceの方を使用すれば良いんでしょうかね?

796名無しさん@寒露:2018/01/27(土) 17:13:02 ID:???
ほぼ愚痴

addLevelでフリーズする。AI勢力ターン開始時にフリーズするのでその勢力開始時に発動する内政スクリプト削除を総当りで試すと何度目かのaddLevelでフリーズすることを確認
AI用内政値をブーストして1ターン目にレベル上げると正常作動。正規挙動の20ターン程度で発動するaddLevelでのみフリーズする。なんで?

797名無しさん@寒露:2018/01/27(土) 17:15:00 ID:???
そのターンで上限超えてたりするんでない?

798名無しさん@寒露:2018/01/27(土) 17:44:44 ID:???
ごめん上限って何の?
ユニットレベルは上限に達しない。AI用内政値は数値変数使ってるけど20ターン時点でせいぜい内政値1000程度。挙動確認に1ターン目に50000打ち込んだ場合問題なし
後何故かaddBaseLevelでレベルを10以上に底上げしてもフリーズする。クラスチェンジ自体には問題ないのは確認済み
スクリプトでクラスチェンジするとフリーズ?って言うのも意味がわからんし数値変数いじれる回数に上限がある?もうやだなにこれいみわかんない

799名無しさん@寒露:2018/01/27(土) 21:04:17 ID:???
ああ、ユニットレベル上限のつもりで言ったよ
それで引っかかった覚えはうっすらとあったんだけど、それじゃないならわからないなぁ
それなりに使う事はあるけどこっちは引っかかった事ないねぇ

800名無しさん@寒露:2018/01/28(日) 09:45:59 ID:???
ホント申し訳ない。特定イベント制御用ユニットのクラスチェンジがおかしくて止まってるだけだった笑えよもうなんでクラスチェンジ設定してんだよいらんだろこんちくしょう
そら1ターン目から追加されるユニットじゃないんだから1ターン目にレベルアップコマンド打ってもバグらないはずだよ死にたいふええ

801名無しさん@寒露:2018/01/28(日) 15:23:33 ID:???
他でやれよと思ったけど意外と愚痴スレとか無いんだな

802名無しさん@寒露:2018/02/06(火) 20:14:04 ID:???
戦闘中イベントの発生についての質問です

scenario s1
{
fight = fight_ev
}
event fight_ev
{
if(inBattle(unitA,unitB) == 1 && isPlayer(unitA) == 0){
event(ev1)
}
}
event ev1
{
msg(テスト1)
if(isAnyDead(unitA) == 1){
}
}
event ev2
{
msg(テスト2)
}

こんな感じで作り、戦闘前に(テスト1)のメッセージが出た後、戦闘中にunitAを倒しても(テスト2)のメッセージが出ませんでした
(テスト2)を出すための条件のif(isAnyDead(unitA) == 1)をif(inBattle(unitA,unitB) == 1 && isPlayer(unitA) == 0)に変えたら(テスト2)のメッセージが戦闘前に出ました
他の条件でも試してみましたが、戦闘開始前に条件を満たせたら(テスト2)のメッセージが出て、
戦闘中に条件を満たす形では(テスト2)のメッセージが出ないようでした

wikiでは戦闘中にイベントを発生させるにはbattleEventを使うと書かれていましたが、
battleEventでイベントを指定すると条件を満たせていてもイベントを読み込めませんでした

間違っている部分があったら教えてください

803802:2018/02/06(火) 20:48:29 ID:???
自己解決しました
スレ汚し申し訳ないです

804名無しさん@寒露:2018/02/08(木) 18:24:26 ID:96zZx1eY
ヴァーレンでリアルな兵站システムって作れる?
自分は分裂した場所を独立させて再併合できるようにするくらいしか思いつかない……

805名無しさん@寒露:2018/02/08(木) 20:05:18 ID:???
どこまでリアルを追求するか、どういう兵站システムを作りたいのかよくわからないけど、遠くの領土ほど兵站の維持が難しく軍隊が多く配置できないって言うなら

ゾーン制使って移動制限、isnext使って本土から離れる土地程setcapaで配置部隊数下げる
ついでにある程度遠い領地にいつユニット数に応じて追加支出す
setcapaでの変更時、配置限界よりユニットが多く配置されてたらマイナス効果部隊スキル付与…とか?

806名無しさん@寒露:2018/02/08(木) 22:49:20 ID:???
質問です
敵の弓兵にこちらのヒーラーを狙わせるAIを作っているのですがうまくいきません
event yumihei_ai
{
rif(isInterval(100) == 1){
if(isDead(healer) == 0 && getDistance(healer,yumihei) <= 670 && isSameArmy(healer,yumihei) == 0){
routine(healer_aim)
} else if(inBattle(eventyou) == 0){
routine(aim_lp)
}
}
}
event healer_aim
{
msg(敵の弓兵が味方のヒーラーを狙います)
aimTroop(yumihei,healer)
}
event aim_lp
{
msg(弓兵の標的位置をリセットします)
aimTroop(yumihei,-1,-1)
}
こんな感じのスクリプトを作ってみました
これだとちゃんとこちらのヒーラーを狙って攻撃してくれて、味方のヒーラーがいなくなったら通常通りの動きをしてくれるようになりました
しかし、こっちの軍に敵と同じクラスの弓兵がいた場合、敵にもこちらと同じクラスのヒーラーがいた場合に処理がおかしくなってしまいます
味方の弓兵をyumiheiA、敵の弓兵をyumiheiB、味方のヒーラーをhealerA、敵のヒーラーをhealerBと分けてやったところ正常動作したので、イベントの処理で敵と味方で同じ一般クラスが居てもそれぞれ区別できる方法があれば教えてください

807名無しさん@寒露:2018/02/09(金) 04:58:48 ID:???
イベント戦闘なら
evhealer:healer
{
}
みたいな同能力別構造体のユニット配置すれば解決しないかな?

808名無しさん@寒露:2018/02/09(金) 12:30:53 ID:???
storeRectUnit&storeBaseClassOfUnitで選別してくとかstoreAliveUnitとかでクラスそのものでなくユニットを対象にするようにすればいけるかもしれないけど
戦闘中のスクリプトって人材にしか効かないのがあったりするから保証はできない
むしろクラス名直接ぶち込んで動いたと聞いてびっくりしたくらいだ

809名無しさん@寒露:2018/02/09(金) 14:54:55 ID:???
>>807
実は通常戦闘なんですよね……
今のところは、他の勢力とクラスが被らないラスボス勢力に限定して使うという事にしました
>>808
「敵」を一発で識別できる何かがあれば楽かな〜と思いますね
ちなみですが>>806でスクリプトでは人材ユニットは対象外のようでした

余談ですが、どうにかして敵と味方の区別をつける方法がないか試行錯誤してた時発見したものがあります
味方のヒーラーと敵のヒーラー、味方の弓兵と敵の弓兵の構造体の名前が違えば正常に動作するなら、
味方のヒーラーと弓兵の構造体名を変えてしまえばいいと思い、
>>786のスクリプトを使わせていただいて味方のヒーラーと弓兵の構造体の名前自体を変えてみました
これで動作するだろうと思ったら、この場合でも正常に動作しませんでした
あれこれ試した結果、どうやら変更前の構造体で判別してるそうです
例えば
ソルジャーをボウマンに変え、その元ソルジャーのボウマンでボウマン用のイベントを起こそうとしても動作せず、
ボウマンをソルジャーに変え、元ボウマンのソルジャーでボウマン用のイベントを起こそうとしたら動作した、と言った感じです
通常戦闘でのみの検証だったため、普通のイベントではどうなるか分かりませんが。
といった報告でした

810名無しさん@寒露:2018/02/10(土) 06:35:45 ID:???
>>804,805
ナチガリアさんの最新作が本国から兵を進軍させる感じになってたはず
ほかに、ふつうのRTSみたいに戦闘シーンで演出する手もあるんちゃうかな
天候ユニットが敵味方問わず移動Debuff、工兵ユニットが道路召喚して移動Buffとか

「リアルな兵站」という言葉からは仕様の定まらなさを感じる
まずは具体的なルールを列挙するところから始めては?

811名無しさん@寒露:2018/02/27(火) 17:51:20 ID:P04AsZwk
プレイヤー勢力では上手く雇用できるのに、NPC勢力がまったくユニットを雇用しないのって何か原因があるものなんでしょうか…

812異界:2018/02/27(火) 18:11:45 ID:???
NPCの雇用には大きく分けて二つがあります。
①リーダーユニットの部下を雇用する
②勢力に新たなリーダーユニットを雇用する

①は人材や複数のクラスを雇用可能な一般ユニットでも行われますが、「同一クラスを雇用する」がONになっていると同じ基底クラスしか雇用しません。
これはNPCの上位雇用をONにした場合、雇用クラスの1段階目の金額で2段階目などのクラスが雇用されます。
NPCに多種多様なクラスを雇用させたい場合は同一クラス雇用をOFFにして、かつ複数のクラスが雇用可能な状態でなければなりません。

②はpower構造体に書かれているmerceから雇用率に合わせてランダムでリーダーを雇用します。
なのでプレイヤーのように「ユニットから雇用」ではそもそもないと思われます。
なのでそのクラスを雇える人材もユニットもいないのにpower構造体に書かれているユニットが雇用されていたりもします。

>>811さんの状態ではおそらく②が行えていない状態ではないかと思いますのでpower構造体を見直してみてください。
staffにクラスが記載してあっても種族が抜けていることやmerceの記入が間違っていることなどが考えられます。

あまりに直らない場合は小物入れに該当するスクリプトをアップロードすれば間違いを見つけてもらえるかもしれませんよ。

813名無しさん@寒露:2018/02/27(火) 18:45:22 ID:???
ありがとうございます!
merceの記入が間違っていたようです。
そのままコピペして勢力を量産してしまっていたので全勢力で雇用していなかったようです

814<あぼーん>:<あぼーん>
<あぼーん>

815名無しさん@寒露:2018/03/04(日) 04:10:37 ID:uyj8PXAk
特定領地から特定クラスのユニットだけを取り出す方法ってありませんか?
どうしてもわからない……

816名無しさん@寒露:2018/03/04(日) 10:18:36 ID:???
こんな感じで行けませんかね
スポットで選ぶ→1ユニットずつクラス判定して文字変数に格納

storeUnitOfSpot(特定領地, @unit_spot)
pushv(@unit_spot, sum_unit_spot)
set(i, 0)
while (i < sum_unit_spot)
{
index(@unit_spot, i, @unit)
storeClassOfUnit(@unit, @class) or storeBaseClassOfUnit
if (equal(@class, 特定クラス))
{
addv(@class, @class_spot)
}
}

817名無しさん@寒露:2018/03/04(日) 10:19:34 ID:???
(あっ i足すの忘れてる...)

818名無しさん@寒露:2018/03/04(日) 12:59:03 ID:uyj8PXAk
サンクス。
試してみる。

819名無しさん@寒露:2018/03/05(月) 21:34:20 ID:niGx2MVk
パース・クインカンシャル図法を使ったら世界一周を無理なく表現できることに気づいた。
もっと早く気づけていれば……

820名無しさん@寒露:2018/03/14(水) 12:19:03 ID:???
プレイヤーとは別の部隊を作り、プレイヤーが参戦した時にaddtroopで援軍として参戦させるイベントを作っているのですが、addtroopした一般兵を死亡した時に消滅するようにするのってclassにdead_event仕込んでイベントで消す以外に方法ありませんか
isdead()もgetlife()も一般兵だと使えない上、modなのであまりクラスデータを書き換えられないのです

821名無しさん@寒露:2018/03/18(日) 11:02:26 ID:???
>>820
召喚ユニットとして援軍の一般兵を出せばいいんじゃないでしょうか。
1)ユニーククラスの隊長ユニットを戦場に追加する。
2)その隊長ユニットが、部下の一般兵を援軍として呼び出す。
3)プレイヤーが死ぬ(逃げる)と、スクリプトで隊長ユニットを消去する。
4)隊長ユニットが召喚していた援軍部隊も一緒に消滅する。

822名無しさん@寒露:2018/03/19(月) 10:01:44 ID:???
東西ともに1位2位は決まった感あるな

823名無しさん@寒露:2018/03/20(火) 17:39:22 ID:???
>>821
すみません、意図が正しく伝わっていなかったようです
死んだとき消滅というのは「プレイヤーの死亡時に戦闘シーンから」ではなく「一般ユニットの死亡時に世界地図から」です
普通に出撃した一般兵は死亡すると消滅しますが、addtroopした兵は一般でも人材と同じく死亡時に世界地図から消滅しませんよね(まずここから間違ってたらすみません)
これを通常の兵と同じように死んだら世界地図からも居なくなるようにしたいということです

824名無しさん@寒露:2018/03/20(火) 18:03:01 ID:???
人材プレイ時に自由にできる自分の部隊をもう一つ作りたいって事

825名無しさん@寒露:2018/03/20(火) 18:08:43 ID:???
ミスった

人材プレイ時に自由にできる自分の部隊をもう一つ作りたいって事なら普通にやったんじゃ無理だと思う

部隊全員に個別の構造体engun1,engun2……みたいに割り振って名目上人材扱いにして、ソルジャーとして雇用したならソルジャーにクラスチェンジしつつ存在フラグオン……みたいな?
実際やったこと無いスクリプトだからうまくいくか走らないし保証はできない

826<あぼーん>:<あぼーん>
<あぼーん>

827名無しさん@寒露:2018/03/21(水) 08:02:40 ID:???
俺もやろうとしたことだが、例えば「大国同士の決戦」みたいなイベントを作るとする
すると大国同士のユニットを関数で拾って戦闘マップにtroopで出現させる事になる
だが、その戦闘イベントでtroopしたユニットはその戦闘中死んでも戦後に普通に存命である

これと似た問題だと思う.良く分からんがaddtroopしたユニットはsleepとか受け付けてくれないし
>>821はcountUnitで数えて後で疑似的に消すとかしか思いつかない

828名無しさん@寒露:2018/03/21(水) 18:12:20 ID:???
>>824そういうことです
やっぱりかなり無理がありそうですね
ひとまず諦めて別の方法を探ります
ありがとうございました

829名無しさん@寒露:2018/03/28(水) 19:14:42 ID:Pzo4ccF.
夏休みの思い出にオリジナルシナリオ作りたいんで一通り必要なツール教えてくれませんか?
今のうちに予習しておきたいです

830名無しさん@寒露:2018/03/29(木) 15:30:49 ID:???
大体はヴァーレン本体に同梱されてるよ
もちろんふりーむとかじゃなく大物入れのやつね
エディタとかは好きなの使えばいいし

831名無しさん@寒露:2018/03/29(木) 16:39:29 ID:???
先にMODとか作ってみると良いかも

832名無しさん@寒露:2018/03/29(木) 17:45:51 ID:0M1JrhSg
大物入れですか、フリームからダウンしてたので改めて確認してみます

MODから。か
途中行き詰ったらそうしてみます

833名無しさん@寒露:2018/03/29(木) 19:51:16 ID:???
絶対行き詰まる(確信)

834名無しさん@寒露:2018/03/29(木) 20:24:17 ID:???
嫌味なモブキャラみたいな台詞でモチベ落そうとするのやめよう
何事もまずは実際に当たってからだ

835名無しさん@寒露:2018/03/29(木) 23:15:17 ID:???
というか初めてなら今からやり始めないと始業式には間に合わないんじゃないかなあ…
素材全部フリーで揃えるにしてもスクリプト打つだけで結構時間かかるぞ

836名無しさん@寒露:2018/03/30(金) 01:01:48 ID:???
スクリプト打つだけなら慣れればどんどんペース上がる
問題は大量に打った後にエラー起きて何が原因かわからず頭抱えることだ

837名無しさん@寒露:2018/03/30(金) 05:09:43 ID:AS4CV4v2
自勢力の領地を青色
他勢力の領地を緑色ってカーソルを合わせると光ってますが、どこで変えれますか?
中立勢力みたいにカーソル合わせても緑色、青色にも表示させたくないです
よく分からなくて。

838名無しさん@寒露:2018/03/30(金) 07:01:40 ID:???
そういうUI表示とかエフェクトみたいなのはcontext構造体で指定する
circle_alpha_perで透明度変えられるはずだから0にすれば消えると思う
聞くだけじゃなくてそれをやってるシナリオとやってないシナリオのスクリプト比べて調べたりしてみてね
どこのシナリオもやってないことは多分できないことだし

8390M1JrhSg:2018/03/30(金) 16:06:56 ID:enZs5fy2
大物入れから本家ヴァーレンダウンロードしてきました。Javaの導入も普通にできた
PicEncoder.jar 改変を防ぐためにファイルを暗号化
mapMaker マップを作るエディタ、操作大丈夫そう
imageView imagedata.datが見つからないって出たので試しに名前だけ同じファイル作ってみたけど意味不明、名前からしてイメージビューアなのかな?これは必要ないかも
imageMaker ふええ何これなんかヴァーレンでよく見かけるエフェクトがたくさん並んでるよこれはとっても重要そう、画像データはimage.datに入ってるみたいだねこのエフェクト流用したいな使い方わかんないけどこれは重要そう
CharaChipMaker ユニットのキャラチップでも作るものかな?説明書にはツクール規格と書いてあるし太古の遺産の企画はどうでもいいかな、よくわかんないけどこれは重要度低そう

というとこまで進展しました。
(進展と言えるのか

840名無しさん@寒露:2018/03/30(金) 16:28:08 ID:???
そしたらソースコード嫁話はそれからだ
本家のコードは辞めといたほうがいいが

841名無しさん@寒露:2018/03/30(金) 16:31:45 ID:???
>>839
進捗報告はtwitterでやれ
わからん所が出てきたらここに書き込め

842名無しさん@寒露:2018/03/30(金) 20:10:43 ID:???
質問です。初めてキャラMODを作ろうとしていますがドット改変したキャラチップが黒くなって表示されません
何かしないといけない手順があるのでしょうか

843名無しさん@寒露:2018/03/31(土) 00:28:41 ID:???
解決しました。質問です。割合強化のリーダースキルにmp回復直接アップを混ぜるにはどうすればいいでしょうか




掲示板管理者へ連絡 無料レンタル掲示板