gcsimとは、原神のダメージシミュレーターのことです。
高度なダメージシミュレーションが出来るため、考察勢に愛用されています。
基本的な使い方、高度な使い方、評価基準、デスクトップ版、コマンドライン上でのみ使える神機能「サブステ最適化モード」などを解説します。
※2022-08-21ごろに、gcsimの仕様変更があり、それ以前とは使い方が変わりました。
ちょっと使いたいだけだから必要なことだけ教えて(TL;DR)
gcsimでキャラクター、武器、聖遺物セット、ステータスを入力してください。
次の行に以下をコピペしてください。
options iteration=1000 duration=90 swap_delay=12 workers=30;
target lvl=100 resist=.1 hp=10000000;
energy every interval=480,720 amount=1;
次の行で、はじめに表に出したいキャラを設定します。
active klee;
この例ではクレーを表に出しています。
行末に;(半角のセミコロン)を忘れずに入れてください。
次に、実際にキャラにどのような行動をさせるのかを、次の中括弧の中に書きます。
while 1 {
アクションリスト
}
ローテーションの書き方を参考にしてみてください。
あとは実行するだけです。
サンプルコード
完成形はこんな感じになります。
klee char lvl=90/90 cons=0 talent=9,9,9;
klee add weapon="lostprayertothesacredwinds" refine=1 lvl=90/90;
klee add set="lavawalker" count=4;
klee add stats hp=4780 atk=311 atk%=0.466 cd=0.622 pyro%=0.466;
klee add stats def%=0.124 def=39.36 hp=507.88 hp%=0.0992 atk=33.08 atk%=0.0992 er=0.2204 em=39.64 cr=0.3972 cd=0.662;
xiangling char lvl=90/90 cons=6 talent=9,9,9;
xiangling add weapon="engulfinglightning" refine=1 lvl=90/90;
xiangling add set="emblemofseveredfate" count=4;
xiangling add stats hp=4780 atk=311 er=0.518 cr=0.311 pyro%=0.466;
xiangling add stats def%=0.124 def=39.36 hp=507.88 hp%=0.0992 atk=33.08 atk%=0.0992 er=0.3306 em=39.64 cr=0.2979 cd=0.7282;
kazuha char lvl=90/90 cons=0 talent=9,9,9;
kazuha add weapon="xiphosmoonlight" refine=5 lvl=90/90;
kazuha add set="viridescentvenerer" count=4;
kazuha add stats hp=4780 atk=311 em=561;
kazuha add stats def%=0.124 def=39.36 hp=507.88 hp%=0.0992 atk=33.08 atk%=0.0992 er=0.1102 em=118.92 cr=0.3972 cd=0.5296;
bennett char lvl=90/90 cons=6 talent=9,9,9;
bennett add weapon="skywardblade" refine=1 lvl=90/90;
bennett add set="noblesseoblige" count=4;
bennett add stats hp=4780 hp%=0.932 atk=311 er=0.518;
bennett add stats def%=0.124 def=39.36 hp=507.88 hp%=0.0992 atk=33.08 atk%=0.0992 er=0.1102 em=39.64 cr=0.3972 cd=0.7944;
options iteration=1000 duration=90 swap_delay=12 workers=30;
target lvl=100 resist=.1 hp=10000000;
energy every interval=480,720 amount=1;
active klee;
klee attack; #炎付着のため。最初の1回だけで良いからループの外に出す
while 1 {
kazuha skill, high_plunge;
bennett burst, skill;
xiangling burst, skill;
kazuha skill, high_plunge;
klee attack, skill[bounce=3, mine=8], burst;
if .klee.skill.ready {
klee attack, skill[bounce=3, mine=8];
} else {
klee attack, charge;
}
klee attack, charge,
attack, charge,
attack, charge,
attack, charge,
attack, charge;
bennett skill;
}
ちなみに、結果はこうなります。
書き方のルール
;(行の終わり)
行の終わりを意味します。
これを付けていないと、行が終わっていることをシミュレーターが認識できないので、忘れないように。
例
options iteration=1000 duration=90 swap_delay=12;
target lvl=100 resist=.1 hp=10000000;
コメントアウト
gcsimでは、アクションリスト内にコメントを書くことが出来ます。
処理には一切影響しませんが、何をしているのかを説明することが出来ます。
コメントがあると他の人だけでなく、自分自身が後で見たときに分かりやすくなります。
#これはコメントです
//これはコメントです
コメントの前に#か//をつければ、それ以降がコメントとして認識され、処理に影響を与えなくなります。
基本的な使い方
option(シミュレーションの設定)
シミュレーション方法の設定。
options iteration=1000 duration=90 swap_delay=12 workers=30;
iteration=
シミュレーションの回数です。
iteration=1000とすれば、1000回シミュレーションをします。シミュレーション回数が多いほど大数の法則に則り普遍性の高い結果が出ます。
例えば、シミュレーション回数が1回で、その1回でエウルアの元素爆発で500万のダメージを出したとします。
これってたまたま出たダメージで、信用出来る結果じゃないと思いますよね?
なので、信頼性の高い結果にしたいならこのオプションは多い方が良いです。
team DBではよく1000回で行われています。
options iteration=1000;
duration=
シミュレーションで想定する時間。単位は秒です。
duration=90とすれば、90秒間でのダメージなどを計算出来ます。
ローテーションの終わりと合わせるようにするのがおすすめです。
options duration=90;
※ただし、target hpが設定されている場合、そちらが優先されます。
swap_delay=
キャラチェンにかかる時間。単位はフレームです。swap_delay=12とすれば12フレームになります。
デフォルトでは1ですが、team DBでは12とするのが通例のようです。比較しやすいように12とするのが良いでしょう。
options swap_delay=12;
workers=
数字が多ければ処理に多くのスレッドを使うため速くなりますが、負荷が大きくなります。
このオプションはデスクトップ版でのみ使える機能で、ウェブ版では左下にある数字で変更することになります。
30くらいが妥当。これ以上にするとPCが重くなりすぎるかも?
options workers=30;
hitlag=
ヒットストップを想定するかどうかの設定。
デフォルトではtrue。
基本的にこのオプションは書かなくて良いです。
options hitlag=true;
debug=(※廃止されました)
古いシミュレーションではスクリプト内にこのオプションが残っていることがあります。
現在のgcsimではこのオプションは無視されます。
options debug=true;
mode=(※廃止されました)
この機能は廃止されました。aplモードは標準の機能として、ifやelseで再現できます。
mode=slはおすすめ動画でも解説をされている通り、上から順番に処理をしていくモードです。初心者のうちはこれでやりましょう。
mode=aplはアクションごとに優先順位を付けることができ、より高度なシミュレーションが出来ますが、if分岐やwhileループなどを使うため少し難しいです。
slはSequential Lists、aplはAction Priority Listsの略称です。
キャラクター設定
gcsimのシミュレーターに必要な項目を入力すれば自動でやってくれます。
なので、キャラクター設定は知らなくても使えます。
<character name> char lvl= / cons= talent=
キャラクターのレベル、突破段階、命ノ星座(凸)、天賦レベルを指定します。
klee char lvl=80/90 cons=0 talent=9,9,9;
<character name>にキャラの名前を入れます。kleeはクレーを設定するという意味。
lvl= / はキャラのレベルと突破段階を指定します。lvl=80/90はレベル80、突破段階6という意味。
consは命ノ星座を指定します。cons=0は、無凸という意味。
talentは天賦レベルを指定します。左から通常攻撃、元素スキル、元素爆発。talent=9,9,9は全ての天賦がレベル9という意味。
上のコードはクレーを突破6、レベル80、無凸、全天賦レベル9で設定するという意味。
<character name> add weapon=”” refine= lvl= /
キャラクターの持つ武器、精錬ランク、レベル、突破段階を指定します。
klee add weapon="thewidsith" refine=3 lvl=80/90;
<character name>にその武器を持つキャラ名を入れます。kleeはクレーを設定するという意味。
add weapon=””で武器を指定します。add weapon=”thewidsith”は流浪楽章を持たせるという意味。
refineは精錬ランクです。refine=3は精錬ランク3という意味。
lvlは武器レベルと突破段階を指定します。lvl=80/90は武器レベル80で突破段階6という意味。
上のコードはクレーに精錬ランク3、レベル80、突破段階6の流浪楽章を持たせるという意味。
<character name> add set=”” count=
キャラクターの持つ聖遺物セット、個数を指定します。
klee add set="lavawalker" count=4;
<character name>にその聖遺物を持つキャラ名を入れます。kleeはクレーを設定するという意味。
add set=””で聖遺物セットを指定します。add set=”lavawalker”は烈火を渡る賢者を持たせるという意味。
count=はその聖遺物の個数を指定します。count=4は4つ持たせるという意味。
この設定をすることで、4セット効果が発動します。
上のコードはクレーに烈火を渡る賢者を4セットで持たせるという意味。
<character name> add stats
聖遺物のステータスを指定します。
klee add stats hp=4780 atk=311 atk%=0.466 pyro%=0.4666 cr=0.311;
上のコードはクレーの聖遺物のステータスにHP4780、攻撃力311、攻撃力46.6%、炎元素ダメージ46.6%、会心率31.1%を追加するという意味。
今回はメインステータスだけを追加しましたが、サブステータスも追加できます。
メインステータスとサブステータスを1行で追加することも、2行で別々に追加することも出来ます。
後者は見やすいだけでなく、サブステ最適化モードを使うときに使います。
target(敵の設定)
敵の設定。
1行ですべての設定をするようにしましょう。
target lvl=100 resist=.1 hp=10000000 pos=0,0;
行数を増やせば敵を増やせます。
ただし、その場合はposの値を絶対に変えてください。
lvl=
敵のレベルを指定します。
target lvl=100;
resist=
敵の耐性を指定します。
target resist=0.1;
0.1は.1と書くことも出来ます。
target resist=.1;
各耐性について詳しく設定することも出来ます。
target anemo=0.1 geo=0.1 electro=0.1 dendro=0.1 hydro=0.1 pyro=0.1 cryo=0.1 physical=0.1;
日本語と英語の対応表を置いておきます。
日本語 | 英語 |
---|---|
風 | anemo |
岩 | geo |
雷 | electro |
草 | dendro |
水 | hydro |
炎 | pyro |
氷 | cryo |
物理 | physical |
hp=
敵のHPを指定します。
target hp=10000000;
HPを高く設定しすぎると1回のシミュレートにかかる時間が長くなるため、結果が出るのに時間がかかります。
pos=
敵の位置を指定します。
target pos=0,0;
このように、targetの行に続けて書きます。
デフォルトでは0,0に設定されています。
この設定が重要になってくるのは集団戦のときです。
この設定なしで敵を2体以上設定すると、デフォルト0,0に重なって配置されるので、
行秋の元素爆発や八重の元素スキルのように、狭い範囲攻撃が両方に当たってしまい、実際とは異なる計算結果になる可能性が高いです。
複数の敵を設定する場合は、絶対にこの設定を忘れないようにしましょう。
位置は、xy平面で指定されます。
pos=x,y
radius=
energy every(元素粒子の設定)
敵のHPを一定の比率まで削ると元素粒子を落とします。ここではダメージ粒子と表記します。ここではダメージ粒子の設定方法について解説します。これもおすすめ動画で解説されているので知っている方は飛ばしても構いません。
ダメージ粒子は以下のように設定できます。
energy every interval=480,720 amount=1;
これは480秒から720秒に1つ、無色粒子を生成するという意味です。
1秒あたり0.09から0.13個の無色粒子に相当し、KQM Standardの1秒あたり0.1個の無色粒子に近いです。
gcsimでは上のコード通りの粒子生成で測定されています。
コピペ用(options、target、energy every)
options swap_delay=12 iteration=1000 duration=90 workers=30;
target lvl=100 resist=0.1 hp=10000000;
energy every interval=480,720 amount=1;
ローテーションを書くための準備
active(キャラを表に出す)
指定したキャラクターを表に出します。
アクションリストの最初に必要な文。
active klee;
このコードはクレーを表に出すという意味。
while 1 {}(ループ処理)
同じローテーションを繰り返したいとき、同じことを何度も書かなくて良いように、ループを使います。
while 1 {
処理(ローテーション)
}
このように書くことで、中括弧内の処理を繰り返します。
ローテーションの書き方
アクションリストの例
active klee; #クレーを表に出す
while 1 {
klee attack;
kazuha skill, high_plunge;
bennett burst, skill;
xingling burst, skill;
klee attack, skill, burst,
attack, charge,
attack, charge,
attack, charge,
attack, charge,
attack, charge;
} #ループ処理
書き方のルール
- キャラ名のあとには半角スペースを空けて、行動を書きます
- 行動と行動の間には、半角のカンマを入れることで区切ります
- そのキャラの最後の行動後には、;を忘れないように
- キャラチェンは、別のキャラ名を指定したときに自動で行われます
- ;なしで改行をすれば、キャラ名を省略して,(半角カンマ)で区切って書けます
最低限覚えておくべきアクション
アクション | 解説 |
---|---|
attack | 通常攻撃 |
charge | 重撃 |
high_plunge | 落下攻撃 低・高落下は高さによって自動で選択されます |
skill | 元素スキル |
burst | 元素爆発 |
jump | ジャンプ |
dash | ダッシュ |
gcsimで使える高度なスクリプト
let(変数の定義)
変数を定義します。
let x = 1;
gcsimで変数を定義する場合は、初期化が必要です。
変数の初期化とは、上のように変数に数値を代入することです。
gcsimでは、次のような初期化をしないで定義した変数は無効になります。
let x;
また、変数には数値しか代入できません。
代入演算子
「=」のことを代入演算子と言います。
gcsimでの「=」は、等号ではなく、代入を意味します。
例えば、次のようなスクリプトを見てください。
let x = 1;
x = 2;
これは、xを1と定義したあとに、2を代入しています。
その結果、xは2になります。
これが等号だと、2行目は1と2が等しいという意味になってしまいます。
特に次のようなスクリプトはよく使われます。
let x = 1;
x = x + 1;
これは、xにx+1を代入しています。
xの値を1大きくするという処理で、インクリメントと呼ばれます。
算術演算子
四則演算をするための演算子。
演算子 | 意味 |
---|---|
+ | 足し算 |
– | 引き算 |
* | かけ算 |
/ | わり算 |
比較演算子
比較をするための演算子。
演算子 | 意味 |
---|---|
== | 同じ |
!= | 違い |
< | 左が右より小さい |
<= | 左が右以下 |
> | 左が右より大きい |
>= | 左が右以上 |
結果はtrueかfalse(真偽)で返ってきます。
ifやwhile命令文の条件に使います。
論理演算子
複数の条件式を用いたり、条件の否定をするための演算子。
演算子 | 意味 |
---|---|
&& | かつ |
|| | または |
! | でない |
「かつ」は共通部分、「または」はどちらか一方、「でない」は否定。
分かりづらいので例を出します。
例1
let x = 3; #xに3を代入
let y = 6; #yに6を代入
x + y < 10 && x < 4;
x+yが10より小さく、xが4より小さいときに、trueが返ってきます。
今回の場合はtrueになります。
例2
let x = 3; #xに3を代入
!(x == 3);
まず、xが3のとき、(x == 3)がtrueになります。
しかし、そこに!(否定の演算子)がついているので、trueが否定されて、最終的にfalseが返ってきます。
if(条件分岐)
ifは条件分岐をするための命令文です。
if 条件 {
処理A
} else {
処理B
}
条件がtrueならば処理Aを実行し、falseならば処理Bを実行します。
条件は、比較演算子や論理演算子を用いて、条件式を書き、その真偽(trueかfalseか)でどちらの処理をするかが決まります。
ちなみに、0がfalse、それ以外の値がtrueを意味します。
if 1 {
処理A
} else {
処理B
}
このコードの場合、必ず処理Aが実行されます。
もちろん、これはあくまで例であり、このコードは条件分岐になっていないので、無意味なコードではあります。
while(ループ)
whileは繰り返し処理をするための命令文です。
while 条件 {
処理
}
条件がtrueの間、処理を繰り返します。
現在のgcsimでは、アクションリストのループのためにwhileを使う必要があるので、必須。
ifと同じく、0がfalse、それ以外の値がtrueを意味します。
こちらはifとは違い、条件に数値(1)を直接指定することがあります。
while 1 {
処理
}
これはアクションリストをループさせるために必要な処理です。
無限ループ
gcsimには無限ループを検出する機能がなく、場合によってはエラーなしでシミュレーションが終わらないという問題が起きます。
まずは、問題のない例から。
while 1 {
klee attack;
}
このコードはwhileの条件が常にtrueなので、これだけだと無限ループになります。
しかし、シミューレーション自体に終了条件(durationやtarget hp)があるので、上のコードには終わりがあります。
問題があるのは次です。
while 1 {
print("hello world!");
}
これは、シミュレーションの終了条件に到達しないため、無限ループになります。
switch(条件分岐)
ifと同じく条件分岐の命令文。
switch <expr> {
case <expr>:
処理
case <expr>:
処理
fallthrough;
case <expr>:
処理
default:
処理
}
switchのあとに書かれている<expr>とcaseのあとに書かれている<expr>が一致したとき、そのcaseの処理を実行します。
どれにも該当しないときは、defaultの処理を実行します。
fallthrough;がある場合、その下にあるcaseの処理も実行します。
高度な設定
設定項目が多すぎるので、詳細は公式ドキュメントを参照してください。
引数(パラメータ)について
一部のキャラや天賦などには引数(パラメータ)があり、これにより特定の設定をカスタマイズ出来ます。
例えば、gcsimでのクレーの元素スキルは、デフォルトではボンボン爆弾が1回ヒット、ブービートラップが2回ヒットするようになっています。
これを最大ヒット数のボンボン爆弾3回ヒット、ブービートラップ8回ヒットにしたい場合は次のように書きます。
klee skill[bounce=3, mine=8];
これら引数にはキャラや武器、天賦などによって様々な種類があります。
引数は種類が多すぎてここには書ききれないので、詳細は公式ドキュメントを参照してください。
ReferenceのCharactersの各キャラページに書かれています。
フィールドについて
数値を返します。
例えば、以下のコードはクレーの元素エネルギーを取得します。
.klee.energy
フィールドを使えば、例えば次のように祭礼の条件分岐を書くことが出来ます。
xingqiu skill; #元素スキルを使う
if .xingqiu.skill.ready { #元素スキルが使えるか確認=CTリセットが発動したか確認
xingqiu skill; #元素スキルを使う
}
設定項目が多いので、詳しくは公式ドキュメントのFieldsページを確認して下さい。
キャラ評価の基準|KQM Standardなど
キャラ評価にはKQM Standardという基準があります。
これは各評価を対等に比較したり参考にならないようなハイスコア聖遺物でキャラ評価をしないためのものです。
また、あるキャラに有利な状況でキャラ評価する場合、そのことが分かるように明記するための基準もあります。
ここではgcsimで必要な最低限の部分を抜き出します。
- キャラや武器のレベルは90
- 天賦レベルは9(10)/9(12)/9(12)
- 敵はレベル100で全耐性10%
- 以下の表から各ステータスを合計40回割り振りますが、20回は各ステに2回ずつ割り振らなければいけません
- 残り20回はどのステに割り振ってもいいですが、メインステに同じステータスがあるたびにそのステータスに割り振れる回数が4回分少なくなります
- 星4聖遺物の場合、ステータスを0.8倍し、レベル16までしかないので自由に割り振れるステータスが星4聖遺物1個につき、4個少なくなります
ステータス | 数値 |
---|---|
HP% | 4.96% |
HP | 253.94 |
攻撃力% | 4.96% |
攻撃力 | 16.54 |
防御力% | 6.20% |
防御力 | 19.68 |
元素熟知 | 19.82 |
元素チャージ効率% | 5.51% |
会心率% | 3.31% |
会心ダメージ% | 6.62% |
これに沿わない場合、その旨を併記することが望まれます。
KQM Guideでのチーム比較や様々な状況での比較をする場合は以下のルールに従うことが望ましいとされています。gcsimのteam DBで閲覧出来る編成も以下のルールに則っています。
- 星5キャラは無凸、星4キャラは完凸
- 武器は星4以下のみ
- 鍛造武器、配布武器、星3武器はランク5
- ガチャ武器はランク3
- 限定武器、紀行武器はランク1
以上の基準に従うと、チーム比較がしやすく、gcsimのteam DBとも比較しやすくなります。
ただし、あくまでこれら武器に関する基準はチーム比較などに使われるものであり、例えばクレーモノパイロと水2胡桃の比較、みたいなときに使われる基準だと思ってください。
そのため、完凸星4武器や星5武器を計算してはいけない、とかではありません。実際に、KQM Guideでも無凸星5武器まで計算し、おすすめとして紹介されています。
また、ある程度前提や結果についての説明をした方が良いです。その方が親切ですし、自分自身が忘れたときにも便利です。
敵から生成する粒子についてはKQM Standardとgcsimで少し違いがあります。team DBではgcsimの方に沿って計算されていますので、そちらに合わせると良いでしょう。詳しくはダメージ粒子で解説しました。
デスクトップ版
デスクトップ版のgcsimは結果をPC上に保存出来たり、聖遺物のサブステを最適化してくれる非常に便利な機能があるためおすすめです。
まずは、インストール方法と主な使い方を解説します。
インストール方法
デスクトップ版はここからダウンロードしましょう。
Latestと書かれたものが最新のものです。gcsim.exeをダウンロードしてください。好きなフォルダに保存してください。
アクションリストの作り方
アクションリストはウェブ版で作りましょう。その方が簡単なので。
シミュレーターのアクションリストの全文をコピーするか、閲覧モード右上のコピーを押し、テキストファイルにペーストしてください。
そしたら、名前を付けて保存しましょう。
デスクトップ版の使い方
gcsim.exeとアクションリストのテキストファイルを同じフォルダに置きます。
次にcmdを開きましょう。開き方はエクスプローラーの上にある現在の場所が書かれたボックスに「cmd」と入力すれば開けます。
cmdから以下のコマンドを実行すればウェブ版のようにシミューレートされ、結果を.json.gzとして保存できます。sampleのところはテキストファイル名にしてください。
.\gcsim.exe -c=sample.txt -out=sample.json -gz
保存された.json.gzはウェブの閲覧モードにドラッグアンドドロップすることでビジュアル化することが出来ます。
サブステ最適化モード
デスクトップ版でしか使えませんが、便利な機能がこのサブステ最適化モードです。
すでにgcsimを使ったことある人は経験あると思いますが、聖遺物のサブステの割り振りが面倒くさい!!
ローテーションが回るように元素チャージ効率を決めつつ、火力を出せるように多くなりすぎないようにしないといけないのが面倒くさい。
それを解決してくれる機能がSubstat Optimizer Mode(サブステ最適化モード)です。とはいえこれを使うにはまた色々コマンドライン上でオプションを付ける必要があります。
gcsimの資料にすぐに使いたい人用のbatファイルがありますが、それでもちょっと面倒だったので新しくbatファイルを作りました。
便利な自動化batファイルの配布
まずはGoogle Driveからsubstat_optimizer_mode.batをダウンロードしてください。
それをgcsim.exeと同じフォルダに置きましょう。
あとは、サブステを振っていないアクションリストのテキストファイルをsubstat_optimizer_mode.batにドラッグアンドドロップすれば終わりです。
自動的にテキストファイルと同名のフォルダをbatファイルと同じ階層に作り、最適化済みのアクションリストと結果をそのフォルダ内に保存してくれます。
おわりに
以上で終わりです。gcsimの使い方を網羅しているわけではありませんが、とりあえず使える範囲は説明出来たかなと思います。
サブステ最適化モードの自動化用batファイルを頑張って作ったので出来れば使ってほしいです。このためだけにbatファイルの使い方を勉強しましたから。
そのため、もしかしたら間違いがあるかもしれないのでその場合は連絡してください。それと何かしら不具合が起きたとしても責任は取れません。最終的に使うかどうかは自己責任でお願いします。
それではまたね~。
コメント