·:·:· 1. 明瞭の石をまっさらにしよう ·:·:·
明瞭の石にデフォルトで表示されているテキストを全て選択し、削除しましょう。もし望むなら、賢者ベゼラ の書き置きを残すこともできます。// から始まるテキストはAIに無視されるため、なんの影響も及ぼすことはありません。
ヒント:全てを選択するショートカットは Ctrl + A です。
_.,·─·──·────┬───────────────────────·──·─·.,_
.:´ | `-.
.:' └--------┐ Power `.
/:' | ____,---╓───┐ `\
,:' ◘ │ '---╙───┘ \
:' | `.
:.' ╔══════════════════════════════════╧═══════════════╕ |
:.| ║ │ '/
:.! ║ │ ´!
:. ║ │ |
:.' ║ │ '|
:. ║ │ |
:.' ║ │ '|
:. ║ │ |
!.' ║ │ '|
:. ║ │ |
:.' ║ │ '|
:.| ║ │ |
:.' ║ │ '|
:. ║ │ .(
:.' ║ │ '|
:. ║ │ |
:.' ║ │ '|
:.| ║ │ |
:.' ╙────────────────────────┬─────────────────────────┘ ';
':.\ . | . ./
'::.`- | ° | .'
'':.:.:.:.:.|.:.:.:.:.:.:.:.:.:.:.:.:.:.:.|.:.:.:.:.:·`
·:·:· 2. 回復ポーションを使ってみよう ·:·:·
)(
(~≈)
¯¯
指示とは、人間が持つ常識をゲームのAIが理解出来るように変換することです。例えば、瀕死状態になったら回復ポーションを使うのが普通ですよね?
そのためのコマンドがあります。以下の内容を明瞭の石に入力しましょう:
activate potion
これはAIに"ポーションを発動する"よう指示するコマンドです。どこかのエリアに入るとAIは毎フレーム、継続的にポーションを発動しようと試みます。そして、体力が少しでも程度減ったらすぐに発動します。しかし、ラッキーポーションなどの攻撃系ポーションを持っている場合、エリアに入った瞬間すぐに発動してしまいます。おそらく望ましい結果にはならないので、より適切な指示に改善しましょう。
例えば、このような指示を考えることができます:
"もし、HPが低くなったら、ポーションを発動する"
この考えをStonescriptに変換し、明瞭の石を以下のように修正しましょう:
?hp < 7
activate potion
最初の行の?hp < 7 は、"自分のHPは7未満ですか?" という質問をしています。人間の言語とは逆に、ゲームでは行の最初に疑問符を付けることで、それが"質問"であると認識します。(¿スペイン語の疑問符みたいな使い方ですね?)
また、activate potion の前にスペースが追加されていることに注目してください。このスペースは重要で、上の行の質問に依存する指示である事を示しています。そのため、上記の質問の答えが"はい" の場合のみ実行されます。
·:·:· 3. 実行してみよう ·:·:·
\|' /´,
`| / ,
/\ / `-´-
\ò ó` /´
| , (
'¡'!| |
|-'´ _'-.
¯'_/`´·\ `
明瞭の石に電源を入れ、淹れたての回復ポーションを持って、危険ななエリアに向かいましょう。敵からの攻撃を受け、HPが7未満になると自動的にポーションが発動するはずです。
ヒント:エリア内で明瞭の石を開くには、'M'キーを押します。わざわざ作業台に戻る必要はありません。明瞭の石を閉じると、スクリプトが再読み込みされ、新しく書かれた指示が反映されます。
·:·:· 4. 武器を持たせてみよう ·:·:·
│ O__
┼/|)_)
/ \
このチュートリアルの目的は枯木の渓谷を完全自動周回させることです。。通常の剣、盾の組み合わせである程度の難易度まではクリアするのに十分なので、まずはこれを基準にしましょう。
明瞭の石の1番下に、以下の内容を書き加えましょう:
equipL sword
equipR shield
equip コマンドは、その名の通り"装備する"ための指示です。インベントリから武器を見つけて装備します。コマンドの右側にあるテキストは、指示の追加の詳細です。L とR は、それぞれ左右どちらかの手に装備するかを示します。装備する武器をより具体的に指定することもできます。おそらくインベントリにはたくさんの剣があるはずなので、例えば7つ星の剣を装備したい場合、*7 を追加しましょう:equipL sword *7 追加の詳細がなければ、AIは自動的に最も強い武器を見つけて装備します。特に問題なければ、そのままでも十分でしょう。
|/)
o.-._
´ /|`-`
`'
一般的にはこれで十分ですが、大きな吸血蚊相手にはクロスボウを装備し、その敵からのダメージを完全に回避したほうがいいでしょう。大きな吸血蚊は、単体では非常に弱いですが、大群で襲ってくるため、大ダメージを受ける可能性があります。そこで以下の内容を入力しましょう:
?foe = mosquito
equip crossbow
foe というキーワードを使用すると、AIが現在ターゲットにしている敵の種類を判別し、それがどのような敵であるかに基づいて適切な行動を取ることが可能です。
このequip コマンドにL やR の指定がないことに気づきましたか?クロスボウについては、詳細を指定せず、AIに最適な装備方法を判断させてシンプルなままにしておきましょう。
ここまでの内容を反映すると、スクリプトは次のようになります:
?hp < 7
activate potion
equipL sword
equipR shield
?foe = mosquito
equip crossbow
ここで重要なのは、スクリプトは上から順番に実行されるという点です。まずポーションの使用をチェックし、その後に剣と盾を装備します。最後に、現在の敵が大きな吸血蚊であればクロスボウに持ち替えます。スクリプト全体は1秒間に30回実行されます。
すべてが正しく動作しているか確認するために、枯木の渓谷へ行ってみましょう。スクリプトが想定通りに動作していて、現在の武器でもクリアできる難易度のエリアであれば、ウロボロスの石でループして周回できるはずです。ただし、ポーション用のタールが尽きるか、インベントリが宝箱でいっぱいになるまでは、という条件付きです。
·:·:· 5. 木を伐採してみよう ·:·:·
\|
|, |/
\| | /-'
`-─\ | /_/─,
\'//
'\} {
{ }
} {
//\`\
枯木の渓谷で木に近づいたとき、ついでに木の枝を集めたいと思うかもしれません。
スクリプトの最後に、次の内容を追加しましょう:
?harvest.distance < 10
equip hatchet
この場合、L やR の指定は不要です。なぜなら、手斧は右手にしか装備できないためです。
さっそく枯木の渓谷へ行き、スクリプトの変更を試してみましょう!
·:·:· 6. 周回を安定させてみよう ·:·:·
____,
_.-·´ o/`___
,´ _.-._\¯¯`-.`.
/ ,´ `.`.
| : | :
| :. .' ;
\ `':.,,,,,..·´ ,´
`-._ _,-´
¯¯¯¯¯
この時点で、スクリプトは機能していますが、装備の星レベルやエリアの難易度によっては、敵から受けるダメージが多すぎる場合があります。そこで、装備している間に徐々に回復できるウロボロスの石を装備するように、スクリプトを改良しましょう。
次の内容を追加しましょう:
?foe ! boss & foe.distance > 8
equipL ouroboros
ここでの質問は少し複雑なので、分解して説明しましょう。1行目の前半の部分、foe ! boss は"敵はボスではない" という意味です。感嘆符(!)は、等号(=)と逆の意味を持ちます。
続いて、1行目の後半部分、foe.distance > 8 は"プレイヤーと敵との距離が8より大きいか?" という意味です。これら2つの質問は、&(AND) シンボルによって1つの条件式にまとめられています。
つまりこの指示全体は、
"敵がボスではなく、かつプレイヤーとの距離が8より大きければ、左手にウロボロスの石を装備する"
ヒント:敵との距離が8 より上という内容では、接敵中にウロボロスの石で敵を攻撃します。これは装備が弱い場合に有効です。しかし、敵との距離を8 ではなく17 にすると、ウロボロスの石で敵を攻撃することは無くなり、ループ時間が短縮されることでしょう。これはウロボロスの石の攻撃範囲が17 だからです。8 にすると、敵に近づいた際にのみ剣を装備するようになります。
·:·:· 7. 素材を回収してみよう ·:·:·
,
_/-'
プレイ中の遅延の原因となるものの1つが、地面に落ちているアイテムの取得です。枯木の渓谷では、それが木の枝になります。幸運なことに、星の石を装備すると、周囲のアイテムを吸い寄せることができ、移動速度も大幅に向上します。
次の内容を追加しましょう:
?pickup.distance < 10
equipL star
foe.distance と同様に、この指示では次の取得アイテムまでの距離が10 ユニット未満かどうかを確認しています。もしそうであれば、左手に星の石を装備します。なお、ここではstar とだけ記述していますが、ほかにstar という名前のアイテムは存在しないため、これで問題ありません。
·:·:· 8. スクリプトをグループ化しよう ·:·:·
これで、枯木の渓谷を周回するためのスクリプトは完成しました!しかし、現状ではこれらの指示が全てのエリアで実行されてしまいます。そこで、それぞれのエリアで特定の指示を行えるよう、特定のエリアでのみスクリプトが実行されるようにグループ化しましょう。
現在のエリアを確認するには、loc というキーワードを使用します。
スクリプトの一番上に、以下を追加してください:
?loc = deadwood
そして、その後に続くすべての行の前にスペースを追加して、これらがエリア条件に依存する形にします。
スクリプト全体は次のようになります:
?loc = deadwood
?hp < 7
activate potion
equipL sword
equipR shield
?foe = mosquito
equip crossbow
?harvest.distance < 10
equip hatchet
?foe ! boss & foe.distance > 8
equipL ouroboros
?pickup.distance < 10
equipL star
ヒント: ここから、または他のプレイヤーのスクリプトをコピーして、Ctrl+C / Ctrl+V で明瞭の石に貼り付けることができます。
·:·:· 次はどうする? ·:·:·
.-.
\ ´ .-.
,-. ) \ ´
'- `-/¯\-´
.· /`°´\ ·.
`-´ `-´
以下に外部リソースやミニチュートリアルを紹介します。
リンク集
このチュートリアルで困ったことがありますか?他のエリアでの助けが必要ですか?Discordコミュニティに参加してみましょう。
Stone Storyコミュニティが作成した楽しいコスメティックやミニゲームを探してみましょう。
もっと深く学びたいですか?Stonescriptマニュアルですべてを学べます。
吸血
もし吸血効果を持っている活力属性の剣(dL)を持っているなら、回復ポーションだけに頼るのではなく、それを活用してHPを管理するのがオススメです。これにより、生存率が大幅に向上します。(ついでにタールの節約にもなります)
?hp < maxhp & foe.distance < 7
equipL sword dL
毒
攻撃を弱体化させるデバフを与えられる毒属性の武器(dP)があれば、ボスからのダメージを軽減することができます。これもまた、ポーションの使用を減らし、生存率を大きく向上させます。これにより、最小限の装備で高難易度のエリアに挑戦可能です。
?foe = boss & foe.debuffs.count = 0
equipR dp
このスクリプトでは、毒効果が残っている間に再度適用してしまわないように、デバフの数をチェックしています。
高速移動
プレイヤーたちは、ループ時間を短縮するためにダッシュの盾、トリスケルの石、六尺棒などの能力をよく使います。以下は一例です。
?foe.distance >= 11 & foe.distance <= 16
equipR dashing
能力発動
ここから少し複雑になります。よくある質問の1つが「能力をどうやって発動させるか?」です。手斧や堕神の剣のようなものは簡単ですが、よくプレイヤーを悩ませるアイテムがバルディッシュです。
?foe = boss & foe.distance <= 10 &
^item.GetCooldown("bardiche") <= 0 |
^item.GetCooldown("bardiche") > 870
equip bardiche
activate R
ここで新しく登場する記号に前の行の続きを意味する ^ と、「または」を意味するOR演算子 | があります。
この例では、ボス(?foe = boss )が範囲内(foe.distance <= 10 )にいるとき、equip bardiche で装備し、activate R で能力を発動します。さらに、item.GetCooldown() を使って、バルディッシュの能力のクールダウン時間をチェックしています。
クールダウン情報を活用して、能力発動中にのみバルディッシュを装備するようにします。瞬時に発動する能力とは違い、バルディッシュにはキャスト時間があるため、その間は装備し続ける必要があります。能力発動中に他の装備に切り替えると能力はキャンセルされ、攻撃できないままクールダウンに入ってしまいます。ここで出てくる870 という数字は、フレーム数で表現されたクールダウン時間から来ています。ゲームでは、1秒が30フレームとされており、バルディッシュのクールダウンは30秒で900フレームです。能力発動から攻撃までのキャスト時間は1秒(30フレーム)で、その分を引いた数が870フレームというわけです。
バルディッシュの動作状況を視覚的に確認したい場合は、以下を追加してみましょう:
var cd
cd = item.GetCooldown("bardiche")
>`0,0,バルディッシュのクールダウン = @cd@
この指示は、画面左上にバルディッシュのクールダウンを表示させるものです。能力を発動すると900になり、そこから0までカウントダウンされる様子が確認できます。
Copyright Martian Rex, Inc. 2020
