レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
改造・制作スレ part8
改造・オリシナ制作などはこちらで。
過去に似たような質問があるかもしれないので、極力調べてから質問しましょう。
ヴァーレントゥーガまとめ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/
>>612
少なくともwikiのログにはないけど
setPowerHomeは前スレでちょっとだけ出てたね
興味があったら試してみたらいいんじゃない?
更新のところにあるやつ、時々シナリオ製作のところに書かれずに流れちゃうことあるからねー
領地ウインドウを開いた時にイベントを発動させたいのですが、方法はないでしょうか?
また、領地を開いたり閉じたりする関数、開いている領地を取る変数、開いてる領地を条件にする・・・とかできれば助かるのですが・・・
もし仕様的にできないのであれば、ななあしさんに要望として目を通して頂ければとても助かります
もう機能追加はないと公式に宣言されてるで
公式に宣言されてるからといって完全に望みが絶たれたわけじゃないと思う。
少なくともmidiやoggのループ指定を組み込んでくれれば
RPGツクールやSRPGSTUDIOと同じくらいになるはずだから
それだけは是が非でも搭載してほしい。
変な数字入れるとバグって固まるとかでも全然いいんでAI設定の説明が欲しい
バグで思い出したけどスキルヘルプでアイコン出るようになったバージョンで何かスキルヘルプにバグあった気がしたけど
あれ直ったんだっけ?
スキルヘルプのバグなのか仕様なのかは分かりませんが、最新版でもそのままですね
ver7.00以降、func未指定の無効スキルのヘルプがスキルアイコンとスキル名が重なる
ワールド画面でユニットのスキルにオンマウスした時、
スキルヘルプ内にマウスカーソルが入っているとヘルプが開閉を繰り返す
>>621
このスレの過去ログにもある程度は出てくるけどそれ以外?
どの変数のことか書かにゃアドバイスしようがないと思う
scriptそのものが初心者な私に教えてください。
後々整理し易いように、作り始めた今のうちから先人のまとめかたを
参考にしたいんですけど、どの方のを参考にするのが皆さんオススメですか?
ヴァーレン派生のゲームで教えてください。
本家、むなしい努力、光の目は覗いてみました。
どれもすごいんでしょうけどわからなくて・・
整理しやすいまとめ方ってんならGreatEuropeWarとかスマブラ戦記とかかな
ジャンル別に細分化して個別にファイル作られてる
見やすいかどうかは別だけど
あと、もう使ってるかもだけど、サクラエディタ便利だよ
無いと何もできないレベル
自分がいちばん長く遊んだシナリオを読むのもいいよ
遊んで楽しいシナリオは自分の理想にも近い
ゲーム本体に詳しいほうがスクリプト読むのも楽しいし
vs codeの方がサクラより便利だよ
スクリプト覗くなら
本家ときのたけと銃魔と迫真は止めといたほうが良い
本家は作者がすっごいバラバラで書き方も統一されてない
きのたけと銃魔は国策関連が複雑過ぎて初心者には向かない
迫真はきのたけの流れを受けているから……
光の目は戦闘AIの書き方でいずれお世話になるが初心者にはどうだろう よくわからない
作者のコメントが多いのは祖国と銃と
むなしいも悪くない
まあ、こんなこと書いたけど一番良いのは>>627 さんの書いた通りスクリプト書きたいと思ったきっかけの作品を見ることだね
一番好きな作品なら愛を持って取り組めるはず
きのたけについて悪く書いたけどこれでMOD作成に入門したから好きであることがやっぱり大事だと思う
まぁでも、何をしたいかによるよね
挙動イメージとか掴まないままに見たらどのシナでもきっと鼻血が出る
皆さん色々教えてくれてありがとうございます!
書いてもらえたこと全部試してみますね。
今日scriptの種類?とか色々あることを知ったんですけど、
ヴァーレン系のscriptフォルダ内にある.datのファイルって
javascriptで合ってますか?
>>632
スクリプトはjavaではなく独自の言語で書くけど
構造体のことかな?
そうです構造体です。
あれは独自の言語だったんですね!
続けて答えてくれて皆さんありがとうございました。
Visual StudioとC#使える人にしか使えない(デバッグモードで例外周辺の変数を覗いて問題のファイルの場所を特定する)ヴァーレンの構文チェッカー作っててそれなりーにはできたんだけど私以外に需要ある?
>>635
ありますあります
Vの次はWだよね的なネーミングセンス
ヴァーレントゥーガ用構文チェッカー
Wahren ver0.0.0
ttps://ux.getuploader.com/vahren/download/4336
前にpushDeathの使い方wikiに載ってたような気がするんだけどなぁ
「なんか関数追加されたらしいけどよくわかんねーや」
→「銃魔ってシナリオが公開された、なるほどこう使うのか」
→「あれ、説明が消えてる」
みたいな感じだったと覚えてる
銃魔のために特注されたような関数だから時期としてはその前後だと思うんだけど
そのあたりを編集履歴やらアーカイブやらで探ってもさっぱりだ、あれは夢だったんだろうか
IFやWhileにも対応しました
実感としてかなりバグ取りが楽になりました
ttps://github.com/pCYSl5EDgo/Wahren
storememberofunit(test,@member)
storealltalent(@talent)
subv(@member,@talent)
上記のようにして人材以外の部隊メンバーに適用するイベントを作ろうとしたのですが人材が除かれませんでした
istalentでwhileループすれば除外できたのでこのイベント自体は問題ないのですが、storealltalentは他でも結構頻繁に使っているので使い方の認識を間違っているのだとしたら不安です
なぜ上の式では除外できなかったのでしょうか
>>639 すげえ
>>640
subvかも
以前使ったとき動作がおかしかったような。定かじゃないけど
>>640
subvとかaddvは変数に格納されている内容の、一番頭の内容しか見ていないからじゃないかな?
(@talentに「あ、い、う、え、お」と格納されているとしたら最初の「あ」しか見ていない)
だからwhileループで@talentの中に格納されている内容を、一つずつ取り出してやらないと意図した動作にならないハズ
>>641
>>642
まじかよ…やべえよやべえよ
複数要素の文字変数でのsubvaddv使いまくってました
今まで特に問題なかったけど大幅な修正が必要そうですね
ありがとうございました
まじか
俺のも直さにゃ
最終的な動作だけじゃなくて間にmsg&@変数&やら挟んで中身みながら特定してみてもいいと思う
他でうまく回っていたのならそこだけ実はoh! spell miss!してる可能性とか
>>588
スクリプトの暗号化はexeだから無いけど
画像の暗号化はPicEncoder.jarっていうやつを使うんだ
jarファイルってのは実はzipと同じフォーマットになっているから解凍をすると中からImageChg.javaっていうソースが出てくる
>>そもそも画像やスクリプトとかの暗号化の部分以外をオープンソースにして欲しい
とのことだが、実は画像の暗号化部分はオープンソースだったんだ
喜べ!
>>646
済まないが知ってた
艦隊コレクションの二次創作ヴァーレンでやってくれないかな〜(/ω・\)チラッ
昔、海戦再現した派生シナリオなかったっけ?
「何これ」のことだな
そこの作者のれどめも書いてるけど艦これは二次創作をゲームで発表するのは公式からNG
なんか、艦これキャラの絵を描いたトランプを出すだけでも動いてきた事がとかあったとかなかったとかあった気がする
>>648
ゲーム性があったらアウトなんじゃなかったっけ
フリーだとどうなんだろ
艦これのゲーム化権はDMMが独占してるから、艦これの窓口の角川側で勝手に許可が出せない
が、例の騒動もファンが勝手に騒いで勝手に自粛しただけだから、刺されない限りやるのは自由
だ、が、近年のヴァーレン界隈はクリーンに行こうとしているので、たぶん横槍入れられまくると思う
何これの艦載機スキルは正直面白いと思ってた
でも、マップが海だけだと代わり映えしないのが難だねぇ
極限まで簡素化した提督の決断4みたいだったなあれは
一例とした以下のような文字変数の要素数を数えて、その範囲内で乱数値を得る処理を実行していたのですが、特定の条件下で0ばかりが出力される現象に遭遇しました。
どんな原因が考えられるでしょうか。
setv(@str,a)
addv(@str,b)
addv(@str,c)
addv(@str,d)
addv(@str,e)
...etc(変数の要素数は可変です)
pushRand2(int1) ←ここは毎回乱数が出力されます。
pushv(@str, int2) ←ここも正しく取得されます。
mod(int1, int2) ←おそらくここで問題が発生します。なんで?
msg(&int1&)
結構前のバージョンの時にpushRand2について検証したことがあるんだけど、確かpushRand2で出力される乱数って必ず8の倍数だったはず
当時と仕様がが変わってなければ、それが関係しているんじゃないかな
>>655
剰余算で得た値にやたら偏りがあるのできになっていたんですがそういうことだったのですか。
ありがとう。
たしか許可さえ取ればかんこれは販売も二次創作ゲームもオッケーだった気がする
ただ、ゲームの画像とかbgmをそのまま使用したらアウトなだけでまねて描いた絵とかまねて演奏したやつならたしかおk
spotを陸と海に分ければ南方作戦とかできそう陸に上がれば船は動けない、みたいにすれば…
たしかGEWでなんか海軍と陸軍の移動の制限について語ってた気がしなくもない
スレチの雰囲気があったしあまり触れたくはなかったから静観してたけどよく調べもせず作って変な問題になって他のシナリオまで波及したらいやだから書いとくけど
「艦これ」の同人誌やイラスト・漫画・小説・コスプレ(全年齢)等の一般慣例的な【同人活動】については…公序良俗に反するもの・ゲームシステムのあるもの・ゲーム内の音源/画像を使ったもの・関係各社/者に迷惑を与えるもの以外は…【現時点】では基本【OK】と考えています
だからゲームシステムがある時点でトレースうんぬん以前にアウトだよ
フリーなら大丈夫?という意見もでてるけどボードゲームみたいなアナログなものはいいの?という質問に対して公式が
大変大変申し訳ありません、様々な見地/計画からそちらもご遠慮頂けますようお願い申しあげます。
といってるから自分が商品展開しようとしたときにすでに同人であってできないという状態を危惧してのことだろうからほぼアウトだと思うよ
どうしても作りたけりゃ大丈夫だろうから作るじゃなくて公式にしっかり説明して問題にならないようにちゃんと許可とってからやっておくれ
まあ、トランプの時も運営に許可とったかとってないかでももめてたし許可はどちらにしろいりますよね…
すまそ
VTのドット素材作りたいなと思うんですけど、教材としておすすめの本とかありませんか?
>>661
私はアップローダーのとこにあるドット絵をいじって覚えましたよ〜
なので、教材としてアップローダーのドット絵がVTのドット素材として企画も同じですし一番かと
ドット絵の打ち方ぐらいならwebに挙がってるようなやつで十分だよ
というか模写が一番早い 普通の絵もそうだけど、本はある程度描けるようになってからでないと、まず意味がわからない
たぶん、ななあしさんも想定していない仕様な気がするのですが、
addtroop等で出現させたユニットについて、出現したユニットが敵サイドのユニットにかかわらず、
その出現した敵ユニットを直接左クリックをすると操作できてしまいます
beastやunctrlTroopをすれば避ける事は出来ますが、
当addtroopで出現させたいユニットはプレイヤー通常操作のユニットでもあるため、beastは出来るだけ避けたく、
そしてunctrlTroopをした場合は、その処理が入ったとたんに戦闘中のユニット操作指定が全部はずれてしまうため、操作性にやや難が出てしまいます
なにとぞ良い知恵のご教授、もしくは何かしらの対応の方よろしくお願いしたく思います
複数の配列から配列をゲットする方法ってありますか?
例
@A→内部A00,A01,A02・・・・・A99
@B→内部B00,B01,B02・・・・・B99
・
・
・
・
・
@Z→内部Z00,Z01,Z02・・・・・Z99
と言う感じで配列があったとして、例えば今C56を取得した場合、B56、C55、C57、D56を追加で取得したいと言う場合です
ないです
配列ってのは文字変数のことで合ってる?
合ってるならindexとwhileループでマッチングすれば複雑にはなるけどできると思う
例えばの後の追加取得の法則性がよくわからないから例が書けないけど…
疑似的に二次元配列に展開されている要素から上下左右の要素を取り出すのならば、
変数を分割せずに要素を全部一つの文字変数配列に放り込んでおいたほうが簡単なのでは、
各列の要素数が100個あるのならインデックス値を+100or-100してやれば上と下の要素にアクセスできますよ。
ああ上下左右だったか
何にしても>>668 のやり方がベストかな
>>668
そこの問題点がありまして、文字変数を一定数以上連結すると非常に重くなる欠点が・・・
以前似たことをしようとして、spot5000個連結したらまず連結時に非常に重くなった問題ががが
それだけあるとどんな処理しても正直重そうな
いっそ開き直って「処理中ですからちょっと待ってね」なmsgだすとか
重さ的に許容できる範囲内で実現可能な二案、三案を用意した方がいい気もするとか
>>671
500づつに分割してどこがhasしてるか確認して10の配列をelseifで探していけば問題なくいけました
問題はこの配列が10個で済むパターンならいいのですが、最終的なシナリオで数万クラスを想定しているので、それで回数かけてwhileするのは現実的じゃないので何らかの方法を考えていました
以下のスクリプトで事前計算によりループの回転を100回未満に抑制できるはずです。
//変数@allに全要素を格納 A-Zの各列の要素は100個あるものとする
setv(@all,A00)
・
・
・
addv(@all,Z99)
//事前計算用変数
setv(@a,A00)・・・addv(@a,A99)
setv(@b,B00)・・・addv(@b,B99)
・
・
・
setv(@c,C00)・・・addv(@c,C99)
//インデックス値の推測
if( 1 == has(@a, @str) )
{
set(idx, 0)
}
else if( 1 == has(@b, @str) )
{
set(idx, 100)
}
else if( 1 == has(@c, @str) )
{
set(idx, 200)
}
・
・
・
else if( 1 == has(@z, @str) )
{
set(idx, 2500)
}
set(idx2, idx)
//変数@strの上下左右の要素を変数@getに格納する
clear(@get)
while( idx < idx2 + 99 )
{
index(@all, idx, @tmp)
if( 1 == equal(@tmp, @str) )
{
//両隣の要素を取得
set(tmpidx, idx)
sub(tmpidx, 1)
if( 0 <= tmpidx && tmpidx <= idx2 + 99)
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
set(tmpidx, idx)
add(tmpidx, 1)
if( 0 <= tmpidx && tmpidx <= idx2 + 99)
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
//上下の要素を取得
set(tmpidx, idx)
sub(tmpidx, 100)
if( 0 <= tmpidx && tmpidx < count(@all))
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
set(tmpidx, idx)
add(tmpidx, 100)
if( 0 <= tmpidx && tmpidx < count(@all))
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
break()
}
add(idx, 1)
}
誤りがあったので訂正です。
以下のスクリプトで事前計算によりループの回転を100回未満に抑制できるはずです。
//変数@allに全要素を格納 A-Zの各列の要素は100個あるものとする
setv(@all,A00)
・
・
・
addv(@all,Z99)
//事前計算用変数
setv(@a,A00)・・・addv(@a,A99)
setv(@b,B00)・・・addv(@b,B99)
・
・
・
setv(@c,C00)・・・addv(@c,C99)
//インデックス値の推測
if( 1 == has(@a, @str) )
{
set(idx, 0)
}
else if( 1 == has(@b, @str) )
{
set(idx, 100)
}
else if( 1 == has(@c, @str) )
{
set(idx, 200)
}
・
・
・
else if( 1 == has(@z, @str) )
{
set(idx, 2500)
}
set(idx2, idx)
//変数@strの上下左右の要素を変数@getに格納する
clear(@get)
while( idx < idx2 + 100 )
{
index(@all, idx, @tmp)
if( 1 == equal(@tmp, @str) )
{
//両隣の要素を取得
set(tmpidx, idx)
sub(tmpidx, 1)
if( idx2 <= tmpidx && tmpidx < idx2 + 100)
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
set(tmpidx, idx)
add(tmpidx, 1)
if( idx2 <= tmpidx && tmpidx < idx2 + 100)
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
//上下の要素を取得
set(tmpidx, idx)
sub(tmpidx, 100)
if( 0 <= tmpidx && tmpidx < count(@all))
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
set(tmpidx, idx)
add(tmpidx, 100)
if( 0 <= tmpidx && tmpidx < count(@all))
{
index(@all, tmpidx, @tmp2)
addv(@get, @tmp2)
}
break()
}
add(idx, 1)
}
>>674
ありがとう
でも最初の2600の配列あるだけで相当重くなりません?
なんか他の原因あるのかな・・・
>でも最初の2600の配列あるだけで相当重くなりません?
ゲーム再開直後に文字変数配列を作成して保存しておけば毎回配列要素の作成をしなくてもいいですよ。
>>676
でなくて、その文字変数の配列があるってだけでやたら重いのは何か問題あるのかな・・・と
>>677
メモリーの使用量が増えると重くなるのは仕様なのでは、空いているアドレスを検索する処理がリソースを消費しているんじゃないですかね。
メモリーは最大で1.5GB程度まで使えることは確認していますけど、1GBを超えるくらいになると重すぎて実用レベルとはいえませんね。
使っていない、使い終わった文字列変数はclear関数で開放してやってメモリー使用を節約するくらいしかないと思いますよ。
>>678
なるほど
1つだけの配列だと重くて、複数に分割すると軽いのはそこらへんも関係あるのかなきっと・・・
setPowerHomeで勢力のHome設定を操作しているんですけど、COM勢力のspotの戦力配置に重みをつける方法はありますか。
質問です。
皆様シナリオのMapを作る時どのようなツールを使用していらっしゃるのでしょうか?
個人的にはむなしい努力の地図の雰囲気がとても好きです。
本家VTも雰囲気好き
私も同じような地図作りたいんでツール教えてください。
本家付属ツール使いんさい
ワールドマップの事じゃないの?
もしそうなら俺はsaiで描いてるな
choiceについてですが、選択肢の数が流動的な場合、想定される選択肢の数を全部書くしか方法はないですか?
例
誰を仲間から外しますか?の場合
その時点で仲間である物が1〜20人すべての可能性を想定する場合、選択肢1はselectで表現するにしても、choiceで表現する場合引数2〜20個の全てのパターンが必要でしょうか?
空欄や名前をクリックしたら元にもどる等の挙動で妥協する予定はありませんので、選択肢の数を決める方向性でお願いします〜
妥協せずに一つずつ全部書くしかないと思う
ランシナの配下選択みたいに4、5程度の選択肢の複数ページに分ければパターン少なめで済むかも
>>684
Great Europe Warの「部隊長一覧.dat」が割合そのまま使えそうな感じかな
文字数制限に引っかかったから自分で見てくれ
Boiにも似たようなキャラ選択があったな
あっちはキャラ数が多すぎて、小分けが顔あり、顔なし、ゲストの3枠だけでは手間が全く軽減されてない有様だけど…
「最後尾のキャラをチームから外します。よろしいですか?」
>>687 >>689
それは初期の人数が決まってる場合にのみ有効なような・・・
>>690
最後尾が隠れてる状態になると外せるようにしたいので無意味ですね
>>688
調べてみます
>>691
場合分けと剰余演算でイケるイケる
>>691
おまえ毎回条件後出しにして揚げ足取ってないか?
他人にアイディア求めるならもう少しちゃんと説明しろよ
>>680
たぶんないんじゃないかな。隠し関数は知らないけど
ワールドイベントで部隊を動かしてやるほうが早いと思う
>>692
なるほど、〜以上なら1ページ、〜以上なら2ページ・・・って感じで割り算の数値ページ分だけ用意した後、余ったページを使うと言うのはいいですね
>>693
>>691 はなると→なってもですね失礼しました
全想定のラインを細かく話さなきゃいけないならキリなくなるんで質問もできませんが・・・
最後尾のことでしたら、それを限定したはずし方になるのでそもそもの目的と大きく外れますし、元々choiceを用いてということを説明しています
>>694
結局どの仲間を外すかってことにchoiceが必要になってしまいそうなので、choice全通りとページ周りを両方試してみます
ワールドマップでの解雇となると、やはりプレイヤーが解雇「しない」という選択肢を取ってそのまま進めてしまうことを想定できちゃうので、無理そうですね
質問の要点をまとめるのは質問者の最低限のマナーだよ
キリなくなるから後出しジャンケンしますって回答者をbotか何かと勘違いしてない?っていわれても文句いえないぞ
>>692
綺麗にいけました、ありがとうございました〜
>>697
そのためchoiceを用いることと、人数の流動的な仲間を外すことという2点を要点として伝えました
それで足りないのであれば、どの程度をまとめればいいかわかりませんが、botとは考えていません
だからこそ出来る限り返事をしています
以上です
返事を下さった皆様ありがとうございました〜
ぶっちゃけ>>687 で終わってるのに何も考えずに聞き返してる辺りがもう
自分で考える気あるのか
しかも質問の返答に対して無意味ですねとかSAN値0かよ
ユニットの「素早さ (speed) 」と実際の攻撃頻度がどう関係してるのか調べてみました。
戦闘時のゲーム速度は「普通」のまま。行動速度は標準値の unit_action_bdr = 4000 です。
attack = 1, defense = 0 で単発の接近攻撃だけ所有する実験ユニット同士に殴り合いさせて、経過時間とダメージで攻撃回数を数えました。時間は厳密に計ったわけではないです。
speed = 60 だと一分間(戦闘時間で300経過)に43〜44回ぐらい接近攻撃します。
スライド速度が速い場合に攻撃回数が増えるか調べるため、
unit_sword_slide = 9 (12フレームで前進)
unit_sword_slide = 12 (9フレームで前進、標準はこれ)
unit_sword_slide = 50 (2フレームで前進)
で試しましたが、攻撃回数に違いはありませんでした。
スライドが速く終わっても、次の行動間隔までの待ち時間が長くなるだけです。
unit_sword_slide = 4 (25フレームで前進?)
前後にスライドするのに50フレーム(2秒)必要だろうから、スライドが終わるまで次の攻撃を待つなら、一分間の攻撃回数は30回になるはずですが、
実際には攻撃回数は43回と変化しません。
unit_sword_slide = 2 (50フレームで前進?)
前後にスライドするのに100フレーム(4秒)必要だろうから、スライドが終わるまで次の攻撃を待つなら、一分間の攻撃回数は15回になるはずですが、
実際の攻撃回数は30回でした。スライドが終わるのに丁度2秒かかってます。
スライド速度が極端に遅いと、行動間隔よりも長くなって、攻撃回数が減ることが確認できました。
ただ、スライド速度のパーセント指定の数値を極端に小さくした場合は、細かい距離が四捨五入されるせいか、スライド時間は計算通りにはならないようです。
スライド速度が影響しないように速くした条件で、speed だけ変えてみました。
speed = 70 だと一分間に50〜51回ぐらい接近攻撃します。
speed = 80 だと一分間に57〜58回ぐらい接近攻撃します。
speed = 90 だと一分間に64〜65回ぐらい接近攻撃します。
speed = 100 だと一分間に71〜72回ぐらい接近攻撃します。
「きのこたけのこ戦争」や「Brave of Island」では unit_action_bdr = 3500 になってるので、攻撃速度がどれだけ変わるかも調べてみました。
speed = 60 だと一分間(戦闘時間で300経過)に49〜50回ぐらい接近攻撃します。
speed = 70 だと一分間に57〜58回ぐらい接近攻撃します。
speed = 80 だと一分間に66回ぐらい接近攻撃します。
上記の調査結果から以下のことを推論しました。
戦闘時の内部カウンタは経過時間の10倍らしいので、1分で3000カウント、1秒で50カウントです。
「unit_action_bdr の数値」÷「ユニットの speed 値」=「間隔のカウント数」
のような関係がありそうです。
しかし、実際には unit_action_bdr = 4000, speed = 80 にしても、攻撃間隔は毎秒よりも微妙に遅くなるので、
「攻撃間隔=間隔カウント+2」ぐらいになってるのかもしれません。
この計算式を計測結果と比較してみました。
unit_action_bdr = 4000 の場合
speed = 60 なら攻撃間隔は 4000/60+2=69カウントなので、一分間に 3000/69= 43.5回攻撃します。
speed = 70 なら攻撃間隔は 4000/70+2=59カウントなので、一分間に 3000/59= 50.8回攻撃します。
speed = 80 なら攻撃間隔は 4000/80+2=52カウントなので、一分間に 3000/52= 57.7回攻撃します。
speed = 100 なら攻撃間隔は 4000/100+2=42カウントなので、一分間に 3000/42= 71.4回攻撃します。
unit_action_bdr = 3500 の場合
speed = 60 なら攻撃間隔は 3500/60+2=60カウントなので、一分間に 3000/60= 50.0回攻撃します。
speed = 70 なら攻撃間隔は 3500/70+2=52カウントなので、一分間に 3000/52= 57.7回攻撃します。
speed = 80 なら攻撃間隔は 3500/80+2=46カウントなので、一分間に 3000/46= 65.2回攻撃します。
だいたい理論値と計測値が一致するようです。
オリシナ作者がユニットごとの素早さを調節する際の参考にでもしてください。
ありがてえありがてえ
>>700 >>701
制作してからずっと思ってた謎が解けた
今年一番のありがとうを贈りたいよ
遠隔攻撃の速度について調べてる際に、ゲームの描画速度について矛盾点に気づきました。過去ログには描画速度が 25 fps とあったので、フレームレートと内部カウンタは別に進んでる(フレームスキップする為とか?)のだと思ってましたが、よくわかりません。
wiki によると、直進型の遠隔攻撃で「speed は1フレーム毎に進むドット速度」とあります。したがって range = 500, speed = 100 なら最大射程まで到達するのに500フレームかかるはずです。実際に見てみると、戦闘時の経過時間で50(10秒)でした。500フレームで10秒なら、1秒に50フレーム (50 fps) となります。これだと、内部カウンタとフレームの進み具合は完全に一致します。
50 fps で動いてるとするなら、先の接近攻撃のスライド速度も正しいことになります。wiki によると、接近攻撃の slide_speed は「12なら9コマ、25なら4コマで敵に当たる。」とあります。例えば、unit_sword_slide = 2 ならフレームごとに 2% 前進するので、50フレーム(1秒)で前進して、更に50フレーム(1秒)で戻ります。前後にスライドするのに丁度2秒かかる訳で、これは実際に計測した攻撃間隔と一致します。
上記の wiki の記述が正しいとすると、描画速度は 50 fps ということになります。しかし、wiki 内の「関数(イベントの設定)」で wait の説明に「このゲームは25fpsですので1秒間waitするなら25とします。」とあります。もしかすると全体マップと戦場画面でフレームレートが違うのかもしれません。(全体マップでは 25 fps だけど、戦場では 50 fps になるとか。)あるいは、単に wiki に書く際にフレームと内部カウンタを混同してるのかもしれません。(speed は1フレームではなく、1カウント毎とか。)どなたか詳しい情報を持ってる方がおりましたら、教えて頂けるとありがたいです。
一撃で敵を倒しやすいインフレ・シナリオでは、敵が死んだ後もその場所を攻撃し続ける現象が発生します。本家シナリオでは気になりませんが、「Brave of Island」で人材を強化しまくって無双プレイしてると、敵が居ない所を2度3度と攻撃するのが目に付きます。
どうしてこうなるのか script を見てみると、context.dat の unit_search_bdr が関係してました。標準の unit_search_bdr = 100 だと100カウント(2秒)ごとに標的を探すような感じです。「Brave of Island」ではこの値が unit_search_bdr = 160 と大きいので、敵が死んだ後に、誰もいない所をしばらく攻撃し続けます。試しに 50 に減らしてみたら、敵を倒す度に攻撃目標を切り替えてくれました。
無駄撃ちを避け、次々に敵を倒して爽快感を得たい場合は、unit_search_bdr の値を低くすると良さそうです。一方で、特定人材の攻撃力が強過ぎて、大群を片端から掃除してしまう、というのが嫌な場合は、unit_search_bdr の値を高くすることで、空撃ちを多くして、集団戦に弱くできます。「Brave of Island」のスクリプトは凝ってるので、参考になります。
こういうのほんと嬉しい
wiki にある「skill 構造体: missile 」のページの start_degree_type の説明で、「7: スキル発射方向をユニットの向きにします」とありますが、この説明は間違ってるような気がします。実際には「ユニットの向きにスキルを発射します」ではないでしょうか。本家シナリオのスクリプトで start_degree_type = 7 を使ってるのはソルジャー系の「シールド」で、盾は敵の方向ではなくユニットの向きに追随して動きます。
それに、start_degree_turnunit という後に追加された命令は「スキル発射方向にユニットの向きを変えます。」というものです。わざわざ新規に追加したのは、start_degree_type = 7 とは逆の効果にする為だと思います。
ただ、これは私がスキルを試してる際にそう見えただけで、本来の動作なのかはわかりません。とりあえず、他の開発者の経験を知りたくて書き込ませてもらいました。
>>707
日本語の問題だけども元からある説明とあなたの説明とでは前後が入れ替わってるだけでいってることは同じだよ
>>708
あなたのおっしゃる通りです。ご指摘ありがとうございます。
707番の投稿は無視してください。wiki の説明を私が誤読してました。「スキル発射方向を(標的の方向ではなく)ユニットの向き(と同じ)にします」ということですね。それなら実際の挙動通りで問題ありません。「スキル発射方向を(start_degree で標的の方向からずらした後で)ユニットの向き(として扱うこと)にします」みたいな誤解をしてました。本家シナリオで start_degree_type = 7 は start_degree と一緒に使わずに、単独で設定してるので、この場合だけ start_degree は無視されるんだと思います。
<あぼーん>
>>704
の投稿で、このゲームが 25 fps か 50 fps なのか質問した者です。
過去ログを調べると共に、実際にイベントも作って試してみました。結論から言うと、私が調べた限りでは、このゲームは戦闘中もそれ以外も 50 fps で、wiki 等に 25 fps と書かれてるのが間違いです。以下にその根拠を示します。
「改造・制作スレ」の706(2010/05/22)に、開発者(ななあし様?)による「speed=1000だと1フレームに10ドット進みます。」との記述がありました。wiki の speed の説明は正しいということです。
「改造・制作スレ part3」の558(2011/11/15)に、開発者(ななあし様?)による「 戦闘開始から1フレーム毎にカウンタは1ずつ増えます。カウンタ10ごとに制限時間が1減ります。」との記述がありました。普通速度では1分間で制限時間が300減ることからして、1分間=3000カウント=3000フレームになります。戦闘中は 50 fps ということみたいです。
「改造・制作スレ part4」の403(2012/06/24)に、「intervalがないと恐らくintervalのデフォルト設定である5フレーム空けての発射になります。ヴァーレンは1秒25フレームなので、大体0.2秒後くらいに次弾が発射されることになります。」と書き込みがありますが、この回答者は開発者ではないので、不正確な可能性があります。
同じ人による「初段攻撃の発動間隔ということなら、実験したかぎりでは素早さ60のキャラでおよそ60フレーム(約2.4秒)になるようです。」との記述は、私の計測結果(unit_action_bdr = 4000 なら移動中の遠隔攻撃の間隔は素早さ60のキャラで75フレーム(約1.5秒)ぐらい)と合いません。そもそも、攻撃間隔については、同じ speed でも context 設定によって全く変わるので、どういう環境で計測したのかが不明では比較できません。
「改造・制作スレ part7」の635(2015/05/25)に、不明な回答者による「このゲームは標準速度だとだいたい1秒25フレームなので750だと30秒おきに判定されるという意味になります。」との記述がありました。isInterval 関数についての質問だったので、実際にゲーム内で以下のような単純な戦闘中イベントを作って試してみました。
battleEvent(timer_shake)
event timer_shake {
rif (isInterval(750)){
shake()
}
}
すると、15秒ごとに画面が揺れました。そもそも isInterval という関数は、「戦闘カウントが数値で割り切れたら1が返ります。」という仕組みなので、1秒50カウントだから750÷50=15秒おきに発生する訳です。つまり、「1秒25フレームなので」という根拠は見当違いですし、結論も間違っていました。どうも、この回答者は開発者ではなさそうです。
そうなると、wiki の各所にある 25 fps という記述自体の信憑性が怪しくなってきます。例えば、「wait(数値)」の説明に、「数値フレームだけウェイトします。このゲームは25fpsですので1秒間waitするなら25とします。」とあります。上記の定期的に画面を揺らすイベントに wait を追加して実験してみました。
event timer_shake {
rif (isInterval(750)){
shake()
wait(200)
shake()
}
}
wiki が正しければ、200÷25=8で8秒間止まるはずです。しかし、実際には、揺れ始めてから4秒間止まって、再度揺れました。やはり、戦闘中(戦場画面)は 50 fps です。ついでに、ターン開始時に画面を2回揺らすイベントを作って実験してみました。待ち時間を wait(200) にすると、やはり4秒間止まります。ワールドマップ(戦略画面)でも、同じ 50 fps で動いてるようです。こうなると、wiki の説明自体が間違ってることになります。
どうして、いろいろな所に 25 fps という記述があるのか、理由は不明です。開発者が wiki の説明を書いてる訳ではないので、よく知らない人が掲示板等の誤った情報を参考にして、そのまま wiki に書き込んでしまったのかもしれません。あるいは、もしかすると「内部の座標計算やイベント処理は 50 fps でやってるけど、実際に表示する際は 25 fps で描画してる。」という事かもしれません。こればかりは開発者じゃないと確認しにくいです。(ゲーム画面を動画に撮って1フレームずつ動きを検証すれば判るかも?)とりあえず、他の人の反対意見が無ければ、wiki を訂正しようかと思います。
細やかな検証だね
私は支持するよ
>>711
自分の環境でデフォのバージョンは7.0ダウンロードした日17.8.29で40fpsだったよ
ここらあたりで上下してたから固定されてるっぽい
40fpsというのは外部ソフトでFPS表示と弓スピード100のレンジ500の同じ状況で検証
矢が出た瞬間停止録画開始と同時に停止解除、矢が消えたと同時に録画停止大体12秒ちょい計算上は12.5秒かかるはずだからまぁこんなものでしょう
昔のスクリプトでいじれるデータでのけてあるのが5.6あたりでそちらで試しても同じだったそれより前のバージョンはフリームのやつだったりHDDクラッシュでバイバイしてるからしらない
そっちで本当に10秒だとしたら環境で速度が変わってる可能性もあるしそれよりも前のバージョンだと違ったのかもしれない
後昨日いうかどうか悩んだけど多分自分はもう触れないだろうし最後に一つだけいっておくけども
最近ずっと独り言状態になってるけど前のごたごたで嫌われてるかもしれないから聞いても返ってこないかもしれないよ
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板