Manualまとめ

> Stone Story RPGの案内へ戻る


      _ ______________________ _            
  ,:´      \____        __.---,. `.         
 :.!  __________\_______\__`--`´__ \        
 :' \ \--------------------------.\ \       
 ':' · \ ·:. :'· :.:·             \\ \      
  ':' \ \ :·' :·:.                 \\ \     
   ':' · \ .: ·:: '.:. ':'··:.      \\ \    
    ':' \ \ · :..                    \\ \   
     ':' · \ :·: ..': :·:. ·:: '.     \\ \  
      ':' \ \__________________________\\ \ 
       ':' `     .         \         .     )
        ':' . . . \ . . . . ' . . . . \ . .;
          `·.;,;,;,;,;,;,;,;,;,;,;,;,;,;,:' 

Mind Stoneを使用して装備の選択を自動化するために使用されるStonescriptは、Stone Story RPG内で利用できるミニマリスティックでありながら強力な言語です。
Stonescriptを初めて使う場合は、「Mind Stone入門」チュートリアルから始めることを検討してみてください。

ヘルプが必要ですか?スクリプトの共同作業を希望しますか?Discordを訪れてください。

このマニュアルは、利用可能なすべてのStonescript機能に関する包括的なリファレンスです。
ほとんどの例はMind Stoneに直接コピー/ペーストできます。これはそれらがどのように動作するかを学ぶ素晴らしい方法です。

▲ 上に戻る


·:·:· 例 ·:·:·

// 岩の高原でシャベルを装備します。
// 恐怖の洞窟では、ロードアウト1を装備します。
// ボスに対しては、
// グラップリングフックと7つ星のウォーハンマーを代わりに使用します。
// 幽霊の間では、2つの杖を使用し、
// 左手に毒を、右手に活力を指定します。
// ただし、難易度が5つ星を超える場合は、
// 魔法付き+13の活力スタッフを使用します。
// ポーションは、ヒットポイントが10未満になった場合にアクティブ化しますか?

?loc=rocky
 equip shovel
?loc=cave
 loadout 1
 ?foe=bolesh
  equip grap
  equip hammer *7 D
?loc=halls
 equipL poison wand
 equipR vigor wand
 ?loc.stars > 5
  equip vigor staff +13
?hp < 10
 activate potion

▲ 上に戻る


·:·:· 基本事項 ·:·:·

?

論理条件を評価します。true の場合、インデントされた行を実行します(if)。

?loc = caves
  loadout 1

:

'?'条件が偽の場合の代替論理分岐。

?loc = caves
  loadout 1
:
  loadout 2

:?

追加の条件を持つ代替の論理分岐(else-if)。

?loc = caves
  loadout 1
:?loc = deadwood
  loadout 2
:
  loadout 3

//

コメント。スクリプトが実行される際、 '//' の右側のすべてのテキストは論理効果がありません。

?loc = caves
  loadout 1
// このスクリプト行は何も行いません。

/* */

ブロックコメント。シンボル間のすべてのテキストはスクリプトが実行される際に論理効果がありません。

/*
?loc = caves
  loadout 1
このスクリプトは何も行いません。すべてがブロックコメント内にあります。
*/

^

前の行を続けます。

?loc=caves |
^loc = mine
  equip repeating

上記は次と同じです:

?loc=caves|loc=mine
  equip repeating

▲ 上に戻る


·:·:· ゲームの状態 ·:·:·

これらの質問は、プレイヤーの前で何が起こっているか、何が正しいかを教えてくれます。

?loc

プレイヤーが訪れている現在の場所。

?loc = caves
  loadout 1

?loc.id

現在の場所のユニークな識別子。

var id
id = loc.id
>探検中 @id@

?loc.name

現在の場所のローカライズされた名前。

>探検中 @loc.name@

?loc.stars

現在の場所の難易度。

?loc = caves
  ?loc.stars=4
    loadout 1
  ?loc.stars=5
    loadout 2

?loc.begin

場所の最初のフレームでのみ true で、time = 0 のとき、ゲームシミュレーションが実行される前に true になります。
Ouroboros ループの後に true ではありません。
変数をリセットするのに便利です。

var i
?loc.begin
  i = 0
  ?loc = caves
    i = -100

?loc.loop

Ouroboros ループの後に実行されるランの最初のフレームで true です。

var loopCount = 0
?loc.loop
  loopCount++

?loc.isQuest

現在の場所が伝説やカスタムクエストからの特別な場所の場合、true です。
それ以外の場合は false です。

?loc.isQuest
  >`0,1,特別なクエストの場所にいます

loc.averageTime

現在の場所の平均クリア時間。
場所の平均時間は、最新のクリア時間が最も価値があり、古い時間ほど段階的に価値が低くなる重みつきで計算されます。

>`0,2,平均時間 =
^ @loc.averageTime@ フレーム

loc.bestTime

現在の場所の最高クリア時間(あなたの記録、ハイスコア)。

>`0,1,最高時間 =
^ @loc.bestTime@ フレーム

?foe

プレイヤーが対象としている現在の敵。

?foe = boo
  equip vigor staff

?foe.id

プレイヤーが対象としている敵のユニークなID(またはタイプ)。

>敵ID: @foe.id@

?foe.name

プレイヤーが対象としている敵のローカライズされた名前。

>敵: @foe.name@

?foe.damage

プレイヤーが対象としている敵の攻撃ごとのダメージ。

>`0,1,敵のダメージ = @foe.damage@

?foe.distance

プレイヤーと対象の敵との距離。

>プレイヤーと敵の距離: @foe.distance@

?foe.count

46ユニット以内の敵の数。

>46ユニット以内の敵の数: @foe.count@

?foe.GetCount(int)

特定の単位数以内に存在する敵の数を取得します。

?foe.hp

プレイヤーが対象としている敵の現在の体力。

>敵の現在の体力: @foe.hp@

?foe.maxhp

プレイヤーが対象としている敵の最大体力。

>敵の最大体力: @foe.maxhp@

?foe.armor

プレイヤーが対象としている敵の現在の防御力。

>敵の現在の防御力: @foe.armor@

?foe.maxarmor

プレイヤーが対象としている敵の最大防御力。

>敵の最大防御力: @foe.maxarmor@

?foe.buffs.count

対象の敵にかかっているバフ(正の効果)の数。

?foe.buffs.count > 0
  >`0,3,敵のバフ = @foe.buffs.string@

?foe.debuffs.count

対象の敵にかかっているデバフ(負の効果)の数。

?foe.debuffs.count > 0
  >`0,4,敵のデバフ = @foe.debuffs.string@

?foe.debuffs.string

対象の敵に関するデバフ情報。

?foe.debuffs.count > 0
  >`0,4,Foe debuffs = @foe.debuffs.string@
  

?foe.state

対象の敵の現在の状態を表す数値。

?foe.state = 0
  >`0,0,敵は眠っています

?foe.time

対象の敵の現在の状態で経過したフレーム数。

>`0,0,敵 = @foe.name@:@foe.state@,@foe.time@

?foe.level

対象の敵のレベル番号。

>`0,0,@foe.name@のレベルは @foe.level@

?item.left.id / ?item.right.id

左手または右手に装備されているアイテムのID。

>`0,1,左のID:@item.left.id@
>`0,2,右のID:@item.right.id@

?item.left.state / ?item.left.time / ?item.right.state / ?item.right.time

装備された武器の現在の状態と、その状態で経過したフレーム数の数値表現。

>`0,1,@item.left.state@:@item.left.time@
>`0,2,@item.right.state@:@item.right.time@

?item.potion

現在調合されているポーション。大釜で自動補充が有効な場合、"auto" を含みます。

?item.potion ! empty & item.potion = auto
  activate potion

?pickup

プレイヤーが対象としている現在のアイテム回収。

?pickup
  equip star stone
:
  loadout 1

?pickup.distance

プレイヤーと対象のアイテム回収との距離。

?pickup.distance < 5
  equipL star stone

?armor

プレイヤーの現在の防具。小数点以下を切り捨てた値です。

?armor.fが[2.4]なら、?armorは2に評価されます。

?armor.f

プレイヤーの現在の防具の小数部分の値です。

?armor.fが[2.4]なら、?armor.fは4に評価されます。

?buffs.count / ?buffs.string

プレイヤーにかかっているバフ(正の効果)の数およびそれらの情報をまとめたもの。

?buffs.count > 0
  >`0,1,プレイヤーのバフ = @buffs.string@

?buffs.oldest

プレイヤーにかかっている最も古いバフのID。

>`0,1,最も古いバフ: @buffs.oldest@

?debuffs.count / ?debuffs.string

プレイヤーにかかっているデバフ(負の効果)の数およびそれらの情報をまとめたもの。

?debuffs.count > 0
  >`0,2,プレイヤーのデバフ = @debuffs.string@

?debuffs.oldest

プレイヤーにかかっている最も古いデバフのID。

>`0,1,最も古いデバフ: @debuffs.oldest@

?hp

プレイヤーの現在のヒットポイント。

>現在のヒットポイント: @hp@

?maxhp

プレイヤーの最大ヒットポイント。

>最大ヒットポイント: @maxhp@

?maxarmor

プレイヤーの最大防具。小数点以下を切り捨てた値です。

?maxarmorが[2.4]なら、?maxarmorは2に評価されます。

?pos.x / ?pos.y / ?pos.z

プレイヤーの現在のX座標、Y座標、Z座標。

> (@pos.x@, @pos.y@)

?ai.enabled

AIがオンの場合はTrue、AIがオフの場合はFalse(たとえばシネマティックな瞬間中など)。

?ai.paused

AIが一時的に中断されている場合、例えば宝物がドロップするのを待っている場合はTrue。

?ai.idle

プレイヤーがアクションの完了を待っているなど、アイドル状態の場合はTrue。

?ai.walking

プレイヤーが移動中の場合はTrue。

?bighead

プレイヤーがビッグヘッド(月時計...の石)を有効にしている場合にTrueとなります。

?face

プレイヤーの現在の表情。

?face = "^^"
  >ハッピー

?key

カスタムゲーム入力の状態。 現在の入力を表示します:

>@key@

?res.stone / ?res.wood / ?res.tar / ?res.ki / ?res.bronze / ?res.crystals

プレイヤーのインベントリ内のリソースの現在の量。

// 例:
?loc = Deadwood
  >Wood = @res.wood@
// 例2:
>`0,1,#magenta, ♦ @res.crystals@

?player.direction

プレイヤーが向いている方向を示します。右の場合は1、左の場合は-1を返します。

?player.direction = 1
  >`0,0,右に歩いています
:
  >`0,0,左に歩いています

player.name

プレイヤーが選んだ名前。プレイヤーの名前をその頭上に表示します。

var name
var x
name = player.name
x = string.Size(name) / -2
>o@x@,-2,@name@

?rng

0から9999までのランダムな整数を返します。

?rng < 5000
  >表!
:
  >裏!
// 例2:5から24までのランダムな整数を生成します:
var min = 5
var max = 24
var n = min + rng % (max - min + 1)

?rngf

0から1までのランダムな浮動小数点数を返します。

// 例:
>ランダムな浮動小数点数 = @rngf@
// 例2: 5.0から24.0までのランダムな浮動小数点数を生成します
var min = 5.0
var max = 24.0
var n = min + (max - min) * rngf

?screen.i

ゲーム内の画面の位置、右側に到達したときに増加するインデックスとして示します。

>`0,0,画面のインデックス = @screen.i@

?screen.x

ゲーム内の画面のX座標を示します。

>`0,0,画面のX座標 = @screen.x@

?screen.w

画面のASCIIグリッドの幅を示します。

var sw = screen.w
>画面の幅 = @sw@

?screen.h

画面のASCIIグリッドの高さを示します。

var sh = screen.h
>画面の高さ = @sh@

?summon.count

現在ゲーム内に存在する召喚された仲間の数。

?summon.count = 0
  equipL talisman
  activate L

summon.GetId(index = 0)

指定したインデックスの召喚のIDを返します。

indexパラメータはオプションで、デフォルトはゼロです(最初の召喚)。該当のインデックスに召喚が存在しない場合、nullを返します。

?summon.GetId() ! "cinderwisp"
  equipR fire talisman
  activate R

summon.GetName(index = 0)

指定したインデックスの召喚のローカライズされた名前を返します。

indexパラメータはオプションで、デフォルトはゼロです(最初の召喚)。該当のインデックスに召喚が存在しない場合、nullを返します。

>`0,1,召喚:@summon.GetName()@

summon.GetVar(varName, index = 0)

召喚に関するカスタム変数の値を返します。

異なる種類の召喚は、それぞれ独自の能力に基づいて異なる変数を公開します。
indexパラメータはオプションで、デフォルトはゼロです(最初の召喚)。varNameが有効な変数に対応していない場合、エラーが表示されます。

?summon.GetId() = cinderwisp &
^summon.GetVar("ignition") > 2
  activate cinderwisp

summon.GetState(index = 0)

指定したインデックスの召喚の現在の状態を表す数値を返します。

indexパラメータはオプションで、デフォルトはゼロです(最初の召喚)。該当のインデックスに召喚が存在しない場合、-1を返します。

>`0,1,召喚の状態:@summon.GetState()@

summon.GetTime(index = 0)

指定したインデックスの召喚の現在の状態で経過したフレーム数を返します。

indexパラメータはオプションで、デフォルトはゼロです(最初の召喚)。該当のインデックスに召喚が存在しない場合、-1を返します。

>`0,1,召喚の経過時間:@summon.GetTime()@

?totalgp

インベントリのアイテムスターレベルとエンチャントボーナスから計算される、"Gear Points" の合計。

>私のギアポイント = @totalgp@

?time

場所の現在のフレーム番号。

?time % 300 = 0
  >10秒ごとにこのメッセージが表示されます

?totaltime

ボスのサブロケーションの場合も含め、場所の現在のフレーム番号の累積。

>`0,0,現在の時間 = @totaltime@ フレーム

time.msbn

Unix時間は、1970年01月01日午前00:00:00Z(協定世界時での1970年01月01日午前00:00:00)から経過したミリ秒数を表します。閏秒は考慮されません。
これはBigNumberを返します。

>@time.msbn@

time.year / time.month / time.day / time.hour / time.minute / time.second

プレイヤーのコンピュータ上のローカルシステム時刻。

>`0,0,@time.year@/@time.month@/@time.day@
^ @time.hour@:@time.minute@:@time.second@

utc.year / utc.month / utc.day / utc.hour / utc.minute / utc.second

現在のUTC時刻。

var utcZ = utc.year * 356 * 12 * 24 * 30 +
^utc.month * 12 * 24 + utc.day * 24 + utc.hour
var timeZ = time.year * 356 * 12 * 24 * 30 +
^time.month * 12 * 24 + time.day * 24 + time.hour
var timeZone = timeZ - utcZ
?timeZone < 0
  >`0,0,タイムゾーン: UTC@timeZone@
:
  >`0,0,タイムゾーン: UTC+@timeZone@

▲ 上に戻る


·:·:· コマンド ·:·:·

これらはゲームに何かを実行するよう指示するものです。

activate (ability)

アイテムの能力をアクティブ化します。"(ability)" の値として、potionPleftLrightR が使用できます。

activate R
// (右手に装備されたアイテムの能力をアクティブ化します。例: Hatchetのような)

brew (ingredients)

ポーションボトルを指定された材料の組み合わせで補充します。実行はランの開始時、time 0 でのみ実行されます。材料には stonewoodtarbronze が含まれ、+ で区切る必要があります。
材料名は英語または設定で選択した言語で書くことができます。

?loc.begin
  brew bronze + tar

equip (str)

アイテムを装備します。
"(str)" には7つまでの基準があります。両手持ちのアイテムはこの形式の装備コマンドを使用する必要があります。

equip vigor crossbow *8 +5

equipL (str)

指定された基準に最適に合うアイテムを左手に装備します。

equipL poison d_sword

equipR (str)

指定された基準に最適に合うアイテムを右手に装備します。

equipR vigor shield

equip @var@

文字列変数から基準に基づいてアイテムを装備します。装備および他のアイテム検索コマンドは減算基準をサポートしています。

var weaponName = "poison sword *10 -big"
equipR @weaponName@

loadout (n)

特定のロードアウト番号を装備します。

?loc = caves
  loadout 1
?loc = deadwood
  loadout 2

> (str)

画面の上部に文字列を表示します。

>Hello World!

> @varName@

変数の値を挿入した文字列を表示します。
複数の変数を単一の表示に挿入するには、変数名を@ で囲みます。
以下の例では、現在の対象の敵に関する情報を表示します。

var foeInfo
foeInfo = foe
>敵 = @foeInfo@

>(abcd

プレイヤーにカスタムの表情を表示します。Big Headが必要です。

>( OwO

>oX,Y,#rrggbb,

プレイヤーの位置に対する高度な印刷方法です。
XおよびYは座標のオフセットです。
#rrggbb16進数表記でのテキストの色です。

色は次の定数で設定することもできます:
#white#cyan#yellow#green#blue#red

虹色で印刷するには#rainFFを使用し、最後の2文字(FF)で明るさを定義します。

補足:
0〜9、a〜fで生成されるコード
0に近づくほど暗く、fに近づくほど明るい

以下の例では、プレイヤーの位置に対して、左に6、下に3の位置に赤いフォントで "Let's go!" と表示します:

>o-6,3,#red,Let's go!

>hX,Y,#rrggbb,

">o" に類似していますが、Big Headと同じレイヤーに描画します。帽子などのアクセサリに最適です。 以下は、プレイヤーに黄色の帽子を描画する例です。Big Headが有効な場合に最適です。

>h-2,-3,#yellow,ascii
##_
#| |
_|_|_
asciiend

>`X,Y,#rrggbb,

画面の左上隅に対する高度な印刷方法です。 以下の例では、座標と色に変数を使用して "Hello World!" を表示します。

var posX = 10
var posY = 5
var color = rainE1
>`@posX@,@posY@,#@color@,Hello World!

>cX,Y,#rrggbb,

画面の中央に対する高度な印刷方法です。">`" と似ていますが、これらのすべての場合で色はオプションです。 以下の例は、色がオプションで、デフォルトが白であることを示しています。

>c0,0,Hello World!

>fX,Y,#rrggbb,

対象の敵の頭の位置に対する高度な印刷方法です。 以下の例では、対象の敵に赤い十字線を描画します。

>f-2,0,#ff0000,ascii
##!
-#·#-
##¡
asciiend

var (variable)

数学、論理、文字列操作で使用できる変数を宣言します。変数のライフサイクルと挙動についての詳細は、他の言語と異なることがあるため、変数のセクションを参照してください。 以下は例です:

var message = Hello World!
>@message@

func (function)

後で呼び出すことができる関数を宣言します。 以下は例です:

func Print(message)
    >@message@

Print(Hello World!)

for v = a..b

変数 'v' を 'a' から 'b' までの値で繰り返すループを作成します。ループのスコープ内に表示されるコードは複数回実行されます。 以下は例です:

var a
a = 0
for i = 1..5
  a = a + i
>a = @a@

import (script)

外部スクリプトの単一のコピーを読み込み、実行します。 以下の例は、Fishing.txt という名前の釣りミニゲームをインポートするものです。 (save-fileフォルダ)/Stonescript/Fishing.txt

import Fishing

new (script)

'import' と類似して、外部スクリプトを読み込み、実行します。ただし、'new' で読み込まれたオブジェクトは各々個別のコピーであり、そのスクリプト本体は一度だけ実行されます。 以下の例では、ベクトルオブジェクトを作成して表示します:

var v = new Components/Vector
v.Init(10, 5)
>Vector = @v@

disable abilities

ポーションおよび武器のアビリティの起動を防止します。また、HUDボタンをグレーアウトします。

enable abilities

以前の「disable abilities」呼び出しによって無効にされたアビリティの起動を復元します。

disable banner

場所の名前が表示される水平バナーのレンダリングを防止します。場所の開始と終了時に表示されます。

enable banner

場所名とともに表示される水平バナーのレンダリングを復元します。

disable hud (opts)

ゲームプレイのユーザーインターフェース要素を非表示および無効にします。オプションのパラメータを受け入れ、無効にする要素のセットを指定できます。

p = プレイヤーの体力とデバフ
f = 敵の体力とデバフ
a = アビリティボタン
r = リソース
b = バナー
u = ユーティリティベルト

// 例:
disable hud // すべてのhud要素を無効にします

// 例2:
disable hud ru // リソース (r) とユーティリティベルト (u) のみを無効にします

enable hud (opts)

以前の "disable hud" コマンドによって非表示にされたユーザーインターフェース要素を表示します。
無効にした要素のセットを指定するために、disable コマンドと同じオプションパラメータを受け入れます。

disable loadout input

武器のロードアウトを入力キーで保存または呼び出すのを防止します。

enable loadout input

以前の "disable loadout input" コマンドによって無効にされた入力キーによる武器のロードアウトの保存または呼び出しを復元します。

disable loadout print

ロードアウトが呼び出されたときに表示されるメッセージを非表示にします。

enable loadout print

以前の "disable loadout print" コマンドによって非表示にされたロードアウトメッセージを表示します。

disable pause

ポーズボタンのユーザーインターフェースを非表示にします。[P] ショートカットでポーズはまだ利用可能です。

enable pause

以前の "disable pause" コマンドによって非表示にされたポーズボタンを表示します。

disable player

プレイヤーを非表示にします。これは戦闘に影響しません。単なる外見上の操作です。

enable player

以前の "disable player" コマンドによって非表示にされたプレイヤーのレンダリングを表示します。

play (sound) (pitch)

オプションのピッチ値を持つサウンドエフェクトを再生します。
ピッチのデフォルト値は100で、大きな数値でピッチが上がり、小さな数値で下がります。

// 例:
?key = primary
  play buy
?key = up
  play buy 200
// 例2:
var pitch
?time%30 = 0
  pitch = rng/100 + 50
  >@pitch@
  play buy @pitch@

▲ 上に戻る


·:·:· 検索フィルター ·:·:·

これらは敵、場所、アイテムを評価する際に使用されます。

▼ 敵が昆虫または毒の場合 ロードアウト3装備

?foe = insect | foe = poison
  loadout 3

評価リスト

poison
vigor
aether
fire
air
ice
arachnid
serpent
insect
machine
humanoid
elemental
boss
phase1
phase2
phase3
spawner
flying
slow
ranged
explode
swarm
unpushable
undamageable
magic_resist
magic_vulnerability
immune_to_stun
immune_to_ranged
immune_to_debuff_damage
immune_to_physical
*[number]  star level (location or item)
+[number]  enchantment bonus (item only)(())

poison

vigor

活力

aether

エーテル

fire

air

空気

ice

arachnid

クモ類

serpent

ヘビ

insect

昆虫

machine

機械

humanoid

ヒューマノイド

elemental

エレメンタル

boss

ボス

phase1

フェーズ1

phase2

フェーズ2

phase3

フェーズ3

spawner

スポーンポイント

flying

飛行

slow

遅くする

ranged

遠距離

explode

爆発

swarm

群れ

unpushable

押せない

undamageable

ダメージを受けない

magic_resist

魔法耐性

magic_vulnerability

魔法への脆弱性

immune_to_stun

スタン無効

immune_to_ranged

遠距離攻撃無効

immune_to_debuff_damage

デバフダメージ無効

immune_to_physical

物理攻撃無効

*[number] star level (location or item)

*[数字] 星レベル(場所またはアイテムに関連)以下の例は左手に☆5の剣を装備equipL sword *5

+[number] enchantment bonus (item only)

+[数字] エンチャントボーナス(アイテムのみ)以下の例は左手にエンチャント+5の剣を装備
equipL sword +5

▲ 上に戻る


·:·:· 比較 ·:·:·

これらはゲームの状態と組み合わせて意思決定を行うために使用されます。

=

値を比較し、等しいか文字列が含まれているかを判定します。

// 例:
?hp = maxhp
  loadout 2

!

値が等しくないか、文字列が含まれていないかを判定します。

// 例:
?foe ! poison
  equipL sword

&

論理積(AND)演算子です。

// 例:
?loc=caves & foe=boss

|

論理和(OR)演算子です。複雑な式に &| が混在している場合、全ての & が最初に評価されます。

// 例:
?foe=slow | foe.count>3
  activate potion

>

大なり比較です。場所の難易度、敵の数、体力などと組み合わせて使用できます。

// 例:
?foe.count > 10
  equip shiny bardiche

<

小なり比較です。

// 例:
?hp < 6
  activate potion

>=

大なりまたは等しい比較です。>= を一つの比較に組み合わせたものです。次の2つの例は等価です:

// 例:
?loc.stars >= 6
  equipR vigor shield
?loc.stars > 6 | loc.stars = 6
  equipR vigor shield

<=

小なりまたは等しい比較です。<= を一つの比較に組み合わせたものです。

// 例:
?hp <= 6
  activate potion

▲ 上に戻る


·:·:· variables(変数) ·:·:·

変数は値を後で使用するための方法です。新しい変数はキーワード var を使用して宣言します。

// 例:
var myVar = 10
// (myVar は変数の名前で、値 10 で初期化されています)

myVar = myVar + 5
// (myVar は今、15 に等しいです)

var secondVar = 3
myVar = myVar - secondVar
// (多くの変数は数学の操作で組み合わせることができます。myVar は今、12 に等しいです)

変数が宣言されると、最初に var が実行されるときにのみ初期化されます。

// 例:
var i = 0
i++
>i = @i@

この例では、変数 i が宣言され、値が 0 で始まります。実行の各フレームで i の値が 1 ずつ増加し、画面に表示。
変数は、場所を離れて新しい実行を手動で開始するときのみ、初期値にリセット。

Ouroborosがループする場合や、Mind Stoneが開かれてから再び閉じられる場合でも、リセットされません。文字列変数はオプションと引用符で宣言できます。これにより、特殊な記号と末尾の空白が許可されます。

// 例:
var a = 10
var b = 5
var myVar = a + " x " + b + " = " + (a * b)
>@myVar@

(この例は、文字列を + 演算子で結合する方法も示しています)

インポートされたスクリプト内の変数は、それらのスクリプト内に含まれ、他のスクリプト内の変数や関数と名前が衝突しません。

▲ 上に戻る


·:·:· 数学演算 ·:·:·

演算子は数値を変更します。変数と組み合わせて使用するか、ゲームの状態式内で直接使用できます。

+

2つの数値または変数を加算します。

// 例:
var a = 2 + 3
(a equals 5)

-

2つの数値または変数を減算します。

// 例:
?hp < maxhp - 5
  equip vigor sword dL

*

2つの数値または変数を乗算します。

// 例:
var a = 2
var b = 5
a = a * b
// a = 10
// 例2:
var a = 2 * 0.4
// a = 0.8

/

1つの数値または変数を別の数値または変数で除算します。整数の場合、結果は切り捨てられます。

// 例:
var a = 8
a = a / 4
// a = 2
// 例2:
var a = 5.0
a = a / 2
// a = 2.5

++

変数を増加させます。

// 例:
var a = 3
a++
// a = 4

--

変数を減少させます。

// 例:
var a = 3
a--
// a = 2

%

モジュロ。1つの数値を別の数値で割った余りを取得します。

// 例:
var a = 5 % 4
(a = 1)
// 例2:
?time % 8 < 4
  > \O)
?time % 8 > 3
  > (O/
// これはアニメーション絵文字を描画します

( )

括弧は演算の優先順位を指定するために使用できます。

// 例:
var a = 2 * (3 - 1)
// a = 4

!

否定。ブール式の前に使用すると値を反転させます。

// 例:
? !ai.enabled
  > AIが有効ではありません。

▲ 上に戻る


·:·:· functions(関数) ·:·:·

カスタム関数は、スクリプトが複雑になるにつれて重要な整理の役割を果たします。

スクリプトを読みやすくし、繰り返しを減らすのに役立ちます。関数が宣言されると、その内容はすぐに実行されません。代わりに、関数内のスクリプト行は、後で関数が呼び出されたときに実行されます。

この例では、1フレームごとに1ずつ増加するカウンターが作成されています。
カスタム入力キーが押されると、ResetCounter() が呼び出され、カウンターの値がゼロに戻ります:

var count = 0
count++
>Counter = @count@

func ResetCounter()
  count = 0

?key=begin
  ResetCounter()

関数の別の側面は、値を返すことができることです。 この例では、メインロケーション(ボスエリアではない場所)の期間を計算する単純な関数を宣言しています:

func NonBossDuration()
  return totalTime - time

var duration
duration = NonBossDuration()
>Time was: @duration@

関数は任意の数の引数/パラメータを受け入れることもでき、より強力になります。

ここでは、範囲内のランダムな数値を生成するユーティリティ関数を宣言し、それを使用して5から10の間のランダムな数値を生成しています:

func RandomRange(min, max)
  ?min >= max
    return min
  return min + rng % (max - min + 1)

var randomValue
randomValue = RandomRange(5, 10)
>RNG: @randomValue@

関数内で外部スクリプトに属する変数を参照する際に、プレフィックス 'this' を使用できます。 'this' の使用は任意であり、スクリプト変数はプレフィックスなしで関数からアクセスできます。ただし、次の例では変数 'a' が関数内外の両方に現れるため、区別のために 'this.a' が使用されています:

var a = 1
func TestScope(a)
  >Script var = @this.a@, function var = @a@
TestScope(3)

関数が他の関数を呼び出すか、それ自体を呼び出すと、実行スタックが構築され、アプリケーションがクラッシュするまでサイズが増加する可能性があります。

コンピューターリソースを保護するために、Stonescript にはスタック制限が215あり、制限を超えるとエラーが発生します。

▲ 上に戻る


·:·:· ネイティブfunctions(関数) ·:·:·

スクリプトは独自の関数を定義できますがStonescriptには予め定義されたネイティブ関数が付属しており、コマンドのように振る舞います。

主題ごとに明確にグループ化され、パラメータを受け入れ時には値を返す点が異なります。

ambient(環境音)

?ambient

文字列型を返します
すべてのアクティブな環境音のIDをコンマ区切りのリストで返します。

// 例:
>`0,0,Ambient Layers = @ambient@

ambient.Add(str)

戻り値:なし
指定されたサウンドIDで環境音のレイヤーを追加します。最大4つのレイヤーまで追加できます。5番目のレイヤーが追加されると、最も古いレイヤーが削除されます。

// 例:
?loc.begin
  ambient.Add(ambient_crypt)

ambient.Stop()

戻り値:なし
すべての環境音レイヤーをクリアします。

// 例:
?time = 3
  ambient.Stop()
  ambient.Add(ambient_mines)

▲ 上に戻る


BigNumber

「BigNumbers」は、32ビットを超える大きな整数を扱う特別なオブジェクトで、正の整数と負の整数の値を保持できます。
彼らの算術演算と比較操作は整数だけでなく、浮動小数点数や他のBigNumbersとも連携できます。

b.Add(num) / b.Add(BigNumber)

戻り値:自分自身
BigNumberに数値を追加します (+)

var bn = math.BigNumber(12)
bn.Add(5)
>@bn@
// 17

b.Sub(num) / b.Sub(BigNumber)

戻り値:自分自身
BigNumberから数値を減算します (-)

var bn = math.BigNumber(12)
bn.Sub(5)
>@bn@
// 7

b.Mul(num) / b.Mul(BigNumber)

戻り値:自分自身
BigNumberを数値で乗算します (*)

var myBigNum1 = math.BigNumber(12)
var myBigNum2 = math.BigNumber(12)
myBigNum1.Mul(5)
myBigNum2.Mul(1.5)
>@myBigNum1@ @myBigNum2@
// 60 18

b.Div(num) / b.Div(BigNumber)

戻り値:自分自身
BigNumberを数値で除算します (/)

var myBigNum1 = math.BigNumber(12)
var myBigNum2 = math.BigNumber(12)
myBigNum1.Div(5)
myBigNum2.Div(1.5)
>@myBigNum1@ @myBigNum2@
// 2 8

b.Eq(num) / b.Eq(BigNumber)

戻り値:bool
BigNumberが数値と等しいかを判定します (=)

var bn = math.BigNumber(5)
>@bn.Eq(5)@ @bn.Eq(3)@
// true false

b.Gt(num) / b.Gt(BigNumber)

戻り値:bool
BigNumberが数値より大きいかを判定します (>)

var bn = math.BigNumber(5)
>@bn.Gt(3)@ @bn.Gt(10)@
// true false

b.Ge(num) / b.Ge(BigNumber)

戻り値:bool
BigNumberが数値以上かを判定します (>=)

var bn = math.BigNumber(5)
>@bn.Ge(3)@ @bn.Ge(5)@
// true true

b.Lt(num) / b.Lt(BigNumber)

戻り値:bool
BigNumberが数値より小さいかを判定します (<)

var bn = math.BigNumber(5)
>@bn.Lt(3)@ @bn.Lt(10)@
// false true

b.Le(num) / b.Le(BigNumber)

戻り値:bool
BigNumberが数値以下かを判定します (<=)

var bn = math.BigNumber(5)
>@bn.Le(10)@ @bn.Le(5)@
// true true

b.ToString()

戻り値:string
BigNumberの文字列表現を取得します。保存のためにシリアル化するのに使用できます。

var myBigNum = math.BigNumber("123456789123456789")
storage.Set("myBN", myBigNum.ToString())
// ---
var bnStr = storage.Get("myBN")
var myBigNum = math.BigNumber(bnStr)

b.ToUI()

戻り値:string
ユーザーインターフェースで使用するための数値の短縮文字列表現を取得します。

var myBigNum = math.BigNumber("123456789123456789")
>@myBigNum.ToUI()@
// 123.5Qa

▲ 上に戻る


color(色)

Stonescriptでは、カラーが16進数表記の文字列(Hex color codes)で表現されます。
例えば、#ff0000のような表記や、#redのような簡略化されたプリセットを使用します。

色見本(#FFFFFF = 白)
#000000 #FF0000
#7F7F7F #00FF00
#FFFF00 #0000FF

Picker(外部リンク)で様々なHex color codesを確認できます。

color.FromRGB(r, g, b)

戻り値:string
三つの整数(0から255)からカラーを文字列に変換します。

// 例:
var c = color.FromRGB(255, 0, 128)
>`0,0,@c@, @c@

color.ToRGB(string)

戻り値:int[3]
カラーを文字列から三つの整数(0から255)に変換します。

// 例:
var c = color.Random()
var rgb = color.ToRGB(c)
var r = rgb[0]
var g = rgb[1]
var b = rgb[2]
>`0,0,@c@, @c@ \n @r@ \n @g@ \n @b@

color.Lerp(c1, c2, t)

戻り値:string
時間(パーセンテージ)tにおいて、カラーc1からカラーc2に線形補間します。

// 例:
var c1 = "#ff4400"
var c2 = "#8888ff"
var t = 0.5
var c
t = math.sin(time*0.1) / 2 + 0.5
c = color.Lerp(c1, c2, t)
>`0,1,@c@,@c@\n ██████

color.Random()

戻り値:string
ランダムなカラーを返します。

// 例:
var c
c = color.Random()
>`0,0,@c@,@c@\n ██████

▲ 上に戻る


draw(描画)

draw.Bg(x, y, color)

戻り値:なし
指定した画面位置の背景色を設定します。

// 例:
draw.Bg(5, 4, #red)

draw.Bg(x, y, color, w, h)

戻り値:なし
画面上の長方形領域の背景色を設定します。

// 例:
draw.Bg(5, 4, #cyan, 10, 6)

draw.Box(x, y, w, h, color, style)

戻り値:なし
指定した位置とサイズで四角形を描画します。
四角形の境界は色とスタイル番号で定義されます。負のスタイル番号は四角形の中央を透明にします。

注意:
現時点では、高度な印刷は常にボックスの上に描画されます。 この例を使用して、左/右を押して異なるスタイルを試すことができます。

var style = 1
?key = leftBegin
  style--
?key = rightBegin
  style++
draw.Box(10, 5, 30, 15, #333333, style)
>`12,6,#ffffff,Style = @style@
>`12,8,#888888,Press Left/Right\nto change style

draw.Clear()

戻り値:なし
画面全体をクリアします。

draw.GetSymbol(x, y)

戻り値:string
画面位置(x,y)のグリフを返します。 この例では、画面座標を選択し、その場所にあるシンボルを左上に描画します。プレイヤーが[ ]を移動させることができます。

var s
var x = 20
var y = 10
var drawX
?key=leftBegin
  x--
?key=rightBegin
  x++
?key=upBegin
  y--
?key=downBegin
  y++
s = draw.GetSymbol(x, y)
>`0,1,Symbol = @s@
drawX = x - 1
>`@drawX@,@y@,[#]

draw.Player() / draw.Player(x,y)

戻り値:なし
プレイヤーキャラクターを、スクリプト内の特定のポイントに装備とアドオンを一緒に描画します。

オプションのオフセット値x,y
絶対的な画面位置に描画するには、screen namespaceを参照し、プレーヤーのローカル位置から画面位置に変換するオフセットを導出します。

▲ 上に戻る


int(整数)

int.Parse(str)

戻り値:integer
数値の文字列を整数値に変換します。
指定された文字列が数値でない場合、エラーが発生します。

// 例:
var s = "999"
var i = int.Parse(s)
i++

▲ 上に戻る


item(アイテム)

クールダウン IDリスト

すべての利用可能なアビリティ文字列に関する詳細については、以下の表を参照してください。

注意:
無効なアビリティ文字列は-1を返します。
まだ使用されていない武器の一部のアビリティは-1を返すことがあります。

Item Cooldown ID
Æther Talisman "aether_talisman"
Bardiche "bardiche"
Bashing Shield "bash"
Blade of the Fallen God "blade"
Cinderwisp Devour "cinderwisp"
Cultist Mask "mask"
Dashing Shield "dash"
Fire Talisman "fire_talisman"
Hatchet "hatchet"
Heavy Hammer "hammer"
Mind Stone "mind"
Quarterstaff "quarterstaff"
Skeleton Arm "skeleton_arm"
Voidweaver Devour "voidweaver"

item.CanActivate()

戻り値:boolean
アイテムのアビリティをアクティベートできる場合はtrueを返し、それ以外の場合はfalseを返します。

ボス戦前やシネマティック中など、一部のゲームプレイ状況ではアビリティのアクティベーションが無効になることがあります(クールダウン中でなくても)。

// 例:
?item.CanActivate()
  equip Bardiche
  activate R

item.CanActivate(str)

戻り値:boolean
特定のアイテムをアクティベートできる場合はtrueを返します。

この条件はアイテムが装備されている場合にのみtrueになります。一部のアイテムは、特定の条件を満たさない限りアクティベートできない場合があります。
これはitem.GetCooldown()の一部であり、アイテムのクールダウンがゼロであってもアクティベートできないことがあります。

ただし、クールダウン中のアイテムは常にアクティベート不可能です。

// 例:
equip bardiche
?item.GetCooldown("skeleton_arm") <= 0
  equip skeleton arm
  ?item.CanActivate("skeleton_arm")
    activate R

item.GetCooldown(str)

戻り値:integer
指定されたアビリティの残りのクールダウン時間(フレーム単位)を返します。

// 例:
?foe = boss & item.GetCooldown("bardiche") <= 0
  equip bardiche
  activate R

item.GetCount(str)

戻り値:integer
インベントリ内のアイテムのコピー数を返します。
アイテムが見つからない場合は0を返します。

// 例:
var searchCriteria = "sword *0 -big -socket"
var swordCount = item.GetCount(searchCriteria)
>私は@swordCount@本の基本的な剣を持っています

item.GetLoadoutL(int) /
item.GetLoadoutR(int)

戻り値:string
特定の装備セット内のアイテムを返します。
整数パラメータは質問する装備セット番号です。そのスロット内にアイテムがない場合、空白の文字列を返します。

// 例:
>`0,1,左: @item.GetLoadoutL(1)@
>`0,2,右: @item.GetLoadoutR(1)@

▲ 上に戻る


key(キー)

key(key namespace)は、標準のゲーム入力とショートカットのカスタマイズを可能にします。
このシステムはアクション(略して "act" と表記)とキーに基づいており、各アクションは入力またはショートカットの種類を表し、各キーは物理的なキー押下に対応します。

アクションに割り当てることができるすべての可能なキーのリストはこちらで確認できます。
アクションのバインディングを変更すると、実行間で変更が維持されます(現在はストレージに保存されません)。
最適化の観点から、バインディングをフレームごとに変更しないことをお勧めします。

keyリスト

Action Default Key Default Key 2
Pause P Space
Leave L
Inventory I
Mindstone M
Potion Q
ItemLeft E
ItemRight R
Up W UpArrow
Down S DownArrow
Left A LeftArrow
Right D RightArrow
Primary Return KeypadEnter
Back X
Ability1 LeftShift RightShift
Ability2 LeftControl RightControl
BumpL Z
BumpR C
Dynamic1 F
Dynamic2 T
Dynamic3 G
Dynamic4 V
Dynamic5 B

key.Bind(act, key1)

戻り値:なし
特定のアクションに新しいキーのセットを割り当てます。

他のアクションがすでにこれらのキーのいずれかを持っている場合、既に使用されているキーは元のアクションに対して放棄されます。
アクションには最大で2つのキーが割り当てられます。

// 例:
?loc.begin
  key.Bind("Potion", "P")

この例では、元々一時停止に割り当てられていた "P" キーはもはやゲームを一時停止させず、代わりにポーションをアクティブにします。

また、ポーションの元の "Q" キーはもはや機能しません。 "Q" はアクションにはバインドされていません。

key.Bind(act, key1, key2)

戻り値:なし
特定のアクションに新しいキーのセットを割り当てます。

他のアクションがすでにこれらのキーのいずれかを持っている場合、既に使用されているキーは元のアクションに対して放棄されます。
アクションには最大で2つのキーが割り当てられます。

key.GetKeyAct(key)

戻り値:string
指定されたキーにバインドされているアクションを返します。
指定されたキーがアクションにバインドされていない場合は "None" を返します。

key.GetActKey(act)

戻り値:string
指定されたアクションにバインドされている最初のキーを返します。
指定されたアクションにキーがバインドされていない場合は "None" を返します。

key.GetActKey2(act)

戻り値:string
指定されたアクションにバインドされている2番目のキーを返します。
指定されたアクションに2番目のキーがバインドされていない場合は "None" を返します。

key.GetActLabel(act)

戻り値:string
指定されたアクションにバインドされている最初のキーを表すユーザー向けのラベルを返します。

現在の実装では、バインドされたキーの最初の文字を返します。これは "LeftShift" などの場合に混乱の原因となる可能性があります。

key.ResetBinds()

戻り値:なし
すべてのアクションをデフォルトのキー割り当てにリセットします。

▲ 上に戻る


loc(場所)

loc.Leave()

戻り値:なし
プレイヤーが手動で離れるボタンを押したかのように、退出を実行します。

loc.Pause()

戻り値:なし
プレイヤーが手動で一時停止ボタンを押したかのように、一時停止を実行します。

▲ 上に戻る


math(数学)

数学APIは整数と浮動小数点数(float)の両方で動作します。
数値が小数点を持つ形で宣言される場合、それは浮動小数点数とみなされます(例:var a = 0.5)。
小数部分が存在しない場合、それは整数として扱われます(例:var a = 2)。

math.Abs(num)

戻り値:number
指定された数値の絶対値を返します。

var number = -2
number = math.Abs(number)
// 数値は 2 になります

math.Acos(num)

戻り値:number
数値の逆余弦(アークコサイン)をラジアン単位で返します。入力の範囲は -1 から 1 です。入力値が範囲外の場合、"NaN" が返されます。

var number = math.Acos(-1)
// number は π になります

math.Asin(num)

戻り値:number
数値の逆正弦(アークサイン)をラジアン単位で返します。入力の範囲は -1 から 1 です。入力値が範囲外の場合、"NaN" が返されます。

var number = math.Asin(1)
// number は π/2 になります

math.Atan(num)

戻り値:number
指定された数値の逆正接(アークタンジェント)をラジアン単位で計算します。

var number = math.Atan(2)
// numberは約1.107149です

math.Atan2(y, x)

戻り値:number
原点から点(x, y)までの線とx軸との間の角度をラジアン単位で計算します。

var number = math.Atan2(3, 2)
// numberは約0.9827937です

math.Ceil(num)

戻り値:number
数値を切り上げ、それより大きい最初の整数に丸めます。

var number = math.Ceil(4.2)
// number は 5.0 になります

math.CeilToInt(num)

戻り値:integer
数値を切り上げ、それより大きい最初の整数に丸めます。

var number = math.CeilToInt(4.2)
// number は 5 になります

math.Clamp(num, min, max)

戻り値:number
数値を 'min' から 'max' の範囲内に制約します。数値がすでに範囲内にある場合、変更せずにそのまま返されます。

var number = 50
number = math.Clamp(number, 0, 10)
// number は制約され、10 になります

math.Cos(num)

戻り値:number
指定されたラジアン単位の角度の余弦を返します。

var number = math.Cos(0)
// number は 1 になります

math.e

戻り値:float
定数e、またの名をオイラー数とも呼ばれ、おおよそ2.71828です。

E = @math.e@
// 定数eの値を画面に表示します

math.Exp(num)

戻り値:number
指定された累乗でeを計算します。

var number = math.Exp(3)
// numberは約20.08554です

math.Floor(num)

戻り値:number
数値を切り捨て、それより小さい最初の整数に丸めます。

var number = math.Floor(2.7)
// number は 2.0 になります

math.FloorToInt(num)

戻り値:integer
数値を切り捨て、それより小さい最初の整数に丸めます。

var number = math.FloorToInt(2.7)
// number は 2 になります

math.Lerp(a, b, t)

戻り値:number
指定した時間(割合)t における値 a から b への線形補間を実行します。

// 例:
var number = math.Lerp(0.0, 20.0, 0.75)
// number は 15.0 になります

// 例2:
var n = 0.0
?key = Begin
  n = 0.0
n = math.Lerp(n, 100, 0.02)
>n = @n@
// 変数nは100に向かって緩和し、1フレームごとに2%ずつ変化します。キーが押されるとリセットされます

math.Log(num, base)

戻り値:number
指定された基数での数値の対数を返します。

var number = math.Log(5, 2)
// number は 2.321928 になります

math.Max(num1, num2)

戻り値:number
2つの数値のうち大きい方を返します。

var number = math.Max(3, 10)
// number は 10 になります

math.Min(num1, num2)

戻り値:number
2つの数値のうち小さい方を返します。

var number = math.Min(3, 10)
// number は 3 になります

math.pi

戻り値:float
定数 π、約 3.1415926

>PI = @math.pi@
// π の値を画面に表示します

math.Pow(num, p)

戻り値:number
数値を指定されたべき乗で返します。

var number = math.Pow(3, 2)
// number は 9 になります

math.Round(num)

戻り値:number
数値を最も近い整数に丸めます。

var number = math.Round(2.7)
// number は 3.0 になります

math.RoundToInt(num)

戻り値:integer
数値を最も近い整数に丸めます。

var number = math.RoundToInt(2.7)
// number は 3 になります

math.Sign(num)

戻り値:number
指定された数値が負数の場合、-1 を返します。それ以外の場合は 1 を返します。

var sign = math.Sign(-21)
var n = 10 * sign
// n は -10 になります

math.Sin(num)

戻り値:number
指定されたラジアン単位の角度の正弦を返します。

var number = math.Sin(math.pi / 2)
// number は 1 になります

math.Sqrt(num)

戻り値:number
数値の平方根を返します。

var number = math.Sqrt(9)
// number は 3 になります

math.Tan(num)

戻り値:number
指定されたラジアン単位の角度の正接を返します。

var number = math.Tan(2)
// number は -2.18504 になります

math.ToDeg(num)

戻り値:number
ラジアン単位の数値を度に変換します。

var number = math.ToDeg(2 * math.pi)
// number は 360 になります

math.ToRad(num)

戻り値:number
度数の数値をラジアンに変換します。

var number = math.ToRad(360)
// number は 2π になります

math.BigNumber() / math.BigNumber(number) / math.BigNumber(str)

BigNumberオブジェクトを作成します。
浮動小数点数または整数から新しいBigNumberオブジェクトを作成するか、文字列をBigNumberオブジェクトに解析します。

var myBigNum = math.BigNumber("500")
myBigNum.Add(500).Mul(1000).Mul(1000).Mul(1000)
>@myBigNum@
// 1000000000000

▲ 上に戻る


music(音楽)

?music

戻り値:string
現在再生中の音楽のIDを返します。

// 例:
>`0,0,現在の音楽 = @music@

music.Play(str)

戻り値:なし
指定された音声IDで音楽を再生します。同時に再生できる音楽は1つだけです。

// 例:
?loc.begin | loc.loop
  music.Play(temple_0)

music.Stop()

戻り値:なし
すべての音楽を停止します。

// 例:
?!string.Equals(music, "")
  music.Stop()

▲ 上に戻る


player(プレイヤー)

player.ShowScaredFace(num)

戻り値:なし
プレイヤーがビッグヘッドを有効にしている場合、指定された時間の間、彼らの表情が怖がったものに変わります。

// 例:
?key = primaryBegin
  player.ShowScaredFace(1)

▲ 上に戻る


screen(画面)

screen.FromWorldX(int)

戻り値:integer
X軸上の値をワールド空間からスクリーン空間に変換します。

screen.FromWorldZ(int)

戻り値:integer
ワールド空間のZ軸からスクリーン空間のY軸に値を変換します。

// 例:
var x
var y
x = screen.FromWorldX(pos.x)
y = screen.FromWorldZ(pos.z - pos.y)
>`0,1,画面上のプレーヤーの位置: @x@,@y@

screen.ToWorldX(int)

戻り値:integer
X軸上の値をスクリーン空間からワールド空間に変換します。

screen.ToWorldZ(int)

戻り値:integer
スクリーン空間のY軸からワールド空間のZ軸に値を変換します。

// 例:
var x
var y
var z
x = input.x
y = input.y
>`0,1,画面上のカーソル位置: @x@,@y@

x = screen.ToWorldX(input.x)
z = screen.ToWorldZ(input.y)
>`0,2,ワールド上のカーソル位置: @x@,@z@

screen.Next()

戻り値:なし
マルチスクリーンの場所のために、プレイヤーに対してカメラを前方に1つスクリーン移動させます。

// 例:
?key = rightBegin
  screen.Next()

screen.Previous()

戻り値:なし
マルチスクリーンの場所のために、プレイヤーに対してカメラを後方に1つスクリーン移動させます。

// 例:
?key = leftBegin
  screen.Previous()

screen.ResetOffset()

戻り値:なし
カメラをプレイヤーに再び追従させ、screen.Next() および screen.Previous() によって行われた変更を元に戻します。

// 例:
var lastScreenI = -1
?lastScreenI ! screen.i
  screen.ResetOffset()
lastScreenI = screen.i

▲ 上に戻る


storage(記憶域)

永続的な保存領域に保存された値は、ロケーションを離れたとき、およびゲームがシャットダウンしたときにも保持されます。

これらの値は主要な保存データ(primary_save)の一部ではなく、代わりにStonescriptフォルダ内の一連の別々のファイルに存在します。

インポートされたスクリプトは、互いに分離された状態で保存領域にアクセスし、異なるモジュールが同じキーを使用しても、互いのデータを変更せずに使用できます。

storage.Delete(string)

戻り値:なし
指定されたキーに存在する可能性のある値を削除します。

// 例:
storage.Delete("highscore")

storage.Get(string)

戻り値:value
指定されたキーに格納された永続的な値を取得します。

// 例:
var value = storage.Get("highscore")
?value
  >最高得点 = @value@
:
  >最高得点は見つかりませんでした。

storage.Get(string, value)

戻り値:value
指定されたキーに格納された永続的な値を取得します。 見つからない場合、デフォルト値として第二パラメーターが返されます。

// 例:
var value = storage.Get("highscore", 0)
>最高得点 = @value@

storage.Has(string)

戻り値:boolean
永続ストレージに指定されたキーが存在する場合は true を返し、それ以外の場合は false を返します。

// 例:
?storage.Has("highscore")
  var value = storage.Get("highscore")
  >最高得点 = @value@
:
  >最高得点は見つかりませんでした。

storage.Incr(string)

戻り値:integer
指定されたキーに格納された値を1増やし、新しい値を返します。

// 例:
?gameOver
  storage.Incr("stat_TimesPlayed")

storage.Keys()

戻り値:array
現在のコンテキストで利用可能なすべてのストレージキーを含む文字列の配列を取得します。

// 例:
var a
?time % 30 = 0
  a = storage.Keys()
  for i = 0 .. a.Count()-1
    >キー @i@ = @a[i]@

storage.Incr(string, integer)

戻り値:integer
指定されたキーに格納された値を指定された量だけ増やし、新しい値を返します。

// 例:
var amount
?foundCoins
  amount = rng%5 + 5
  storage.Incr("coins", amount)

storage.Set(string, value)

戻り値:なし
指定されたキーに値を永続的なストレージに保存します。

// 例:
var score = 1000
storage.Set("highscore", score)

▲ 上に戻る


string(文字列)

string.Break(string, integer)

戻り値:array
最大幅を指定して文字列を複数の文字列に分割します。

// 例:
var s = "The brown fox jumps over the lazy dog"
var a = string.Break(s, 14)
for i = 0 .. a.Count()-1
  >`0,@i@,@a[i]@

string.Capitalize(str)

戻り値:string
文字列の最初の文字を大文字に変更します。

// 例:
var a = "foo"
a = string.Capitalize(a)
>@a@

string.Equals(str1, str2)

戻り値:boolean
2つの文字列パラメータを受け取り、それらが完全に同じ場合にtrueを返します。
そうでない場合はfalseを返します。大文字と小文字を区別します。

// 例:
var a = "foo"
?string.Equals(a, "foo")
  >文字列は等しいです
:
  >等しくありません
// この場合、文字列は等しいため、string.Equals() はtrueを評価します

string.Format(str1, ...)

戻り値:string
文字列を修正し、フォーマットテンプレートを他のパラメータの値で置き換えてから、最終的な構成済み文字列を返します。

多くのフォーマットオプションをサポートする強力な関数です。

// 例:
var str = "My name is {0} and I have {1} power!"
var result = string.Format(
^  str,
^  player.name,
^  totalgp
^)
>@result@

string.IndexOf(str, criteria)

戻り値:integer
文字列変数と文字列基準をパラメータとして受け取り、基準の位置を文字列内で見つけます。
見つからない場合は-1を返します。

// 例:
var a = "Hello World!"
var index = string.IndexOf(a, "llo")
// index は 2 です

string.IndexOf(str, criteria, startAt)

戻り値:integer
文字列変数、文字列基準、開始インデックスをパラメータとして受け取ります。
基準を文字列内で検索しますが、検索を開始する位置は 'startAt' です。見つからない場合は-1を返します。

// 例:
var a = "Hello World!"
var index = string.IndexOf(a, "llo", 4)
// index は -1 です。検索は位置4から始まったため、'llo'は見つかりませんでした。

string.Join(s, []) / string.Join(s, [], int) / string.Join(s, [], int, int)

戻り値:string
文字列の配列 [] を受け取り、区切り文字 "s" でそれを1つの文字列に結合します。開始インデックスと結合する要素の数を指定するオプションの整数パラメータを渡すことができます。インデックスのパラメータが提供されていない場合、配列全体が結合されます。

// 例:
var a = ["Hello", "World", "!"]
var b = string.Join(";", a)
>`0,0,@b@
// "Hello;World;!" を表示します。

// 例2:
var a = ["Hello", "World", "!"]
var b = string.Join(";", a, 1)
>`0,0,@b@
// "World;!" を表示します。

// 例3:
var a = ["Hello", "World", "!"]
var b = string.Join(";", a, 0, 2)
>`0,0,@b@
// "Hello;World" を表示します。

string.Size(str)

戻り値:integer
文字列変数をパラメータとして受け取り、グリフの数で長さを計算します。

// 例:
var a = "Hello World!"
var size = string.Size(a)
>size = @size@

string.Split(str) / string.Split(str, s…) / string.Split(str, s…, bool) / string.Split(str, bool)

戻り値:array
文字列を受け取り、それを文字列の配列に分解する。区切り文字が与えられない場合、文字列はスペースがあるところで分割される。
オプションのbooleanパラメータは、空のエントリを破棄するかどうかを指定します。

// 例:
var a = string.Split("Hello World !")
for i = 0 .. a.Count()-1
  >`0,@i@,[@i@] = @a[i]@
// 文字列を次のように分割します: "Hello", "World", "!"

// 例2:
var a = string.Split("Hello World !", " ", "l")
for i = 0 .. a.Count()-1
  >`0,@i@,[@i@] = @a[i]@
// 文字列を次のように分割します: "He", " ", "o", "Wor", "d", "!"

// 例3:
var a
a = string.Split("Hello World !","l","r",true)
for i = 0 .. a.Count()-1
  >`0,@i@,[@i@] = @a[i]@
// 文字列を次のように分割します: "He", "o Wo", "d !"

string.Sub(str, startAt)

戻り値:string
文字列変数と開始インデックスをパラメータとして受け取り、その点から文字列を分割します。

// 例:
var a = Hello World!
var subString = string.Sub(a, 6)
>substring = @subString@
// subStringは "World!" に等しいです。

string.Sub(str, startAt, length)

戻り値:string
指定された文字列変数、開始インデックス、および長さをパラメータとして受け取り、その開始地点から指定された長さで文字列を分割します。

// 例:
var a = "Hello World!"
var subString = string.Sub(a, 6, 3)
>substring = @subString@
// subString は "Wor" に等しいです。

string.ToLower(str)

戻り値:string
文字列内のすべての文字を小文字に変更します。

// 例:
var a = "Foo"
a = string.ToLower(a)
>@a@
// 画面に "foo" が表示されます。

string.ToUpper(str)

戻り値:string
文字列内のすべての文字を大文字に変更します。

// 例:
var a = "Foo"
a = string.ToUpper(a)
>@a@
// 画面に "FOO" が表示されます。

▲ 上に戻る


sys(システム)

(現在、sys namespaceは意図した通りに機能していません)

sys.cacheRemoteFiles

boolean
リモートからインポートされたファイルが実行間でキャッシュされるかどうかを示します。
デフォルトはtrueです。falseに設定すると、ロケーション画面からプレイを開始する際にリモートスクリプトが再ダウンロードされます。

開発中や新しいスクリプトの反復中にこれを変更すると便利です。このグローバルプロパティは実行間で保持されます。

// 例:
// "up" キーを入力として切り替え
// リモートキャッシュをオン/オフにする
?key = upBegin
  sys.cacheRemoteFiles = !sys.cacheRemoteFiles
  ?sys.cacheRemoteFiles
    >リモートキャッシング 有効
  :
    >リモートキャッシング 無効

sys.fileUrl

string (読み取り専用)
スクリプトをインポートする際に使用される現在のファイルパスのゲッターです。

デフォルト値はデバイスによって異なります。
PCの場合、デフォルト値はlocalです。
モバイルの場合、デフォルトはhttps://StonestoryRPG.com/stonescript/です。

>`0,1,ファイルurl = @sys.fileUrl@

sys.SetFileUrl(str)

戻り値:なし
importまたはnewコマンドを使用する際にインポートする元の場所を変更します。
Mind Stoneでのみ呼び出すことができ、インポートされたスクリプトに書かれている場合はエラーになります。

任意のURLをリモート場所として受け入れますが、ローカルドライブを指す "local" および公式 Stone Story RPG リポジトリを指す "remote" の値も受け入れます。
パラメータとして null が渡されると、ファイルURLはデバイスに応じたデフォルト値にリセットされます。このグローバルプロパティは実行間で保持されます。

// 例:
sys.SetFileUrl(
^"https://MyCoolDomain.com/scripts/")
import MyCombatScript

sys.os

戻り値:string
ユーザーのオペレーティングシステムを取得します。例:"Android"、"iOS"、"Linux"、"OSX"、または"Windows"などがあります。

sys.isMobile

戻り値:bool
ユーザーがAndroidまたはiOS上にいる場合、trueを返します。

sys.isPC

戻り値:bool
ユーザーがWin/Mac/Linux上にいる場合、trueを返します。

sys.isConsole

(公式manual,beta未掲載) 〜の場合、trueを返します。

▲ 上に戻る


Text Localization(テキストのローカリゼーション(地域化))

この文書執筆時点では、Stonescriptは12の言語をサポートしています。
いくつかの操作を使用して、カスタムスクリプトをプレイヤーが選択した言語に適応させることができます。

te.language

string
プレイヤーが設定で選択した言語のコードです。可能な値:

コード
EN English
PT-BR Portuguese (Brazil)
ZH-CN Chinese (Simplified)
ZH-TW Chinese (Traditional)
FR French
DE German
RU Russian
ES-LA Spanish (Latin America)
ES-EU Spanish (Spain)
JP Japanese
KR Korean
TK Turkish
// 例:
var lang = te.language
>言語 = @lang@

te.xt(str)

戻り値:string
指定された英語のテキストをプレイヤーが選択した言語に翻訳します。
翻訳バージョンが見つからない場合、代わりに入力テキストが返されます。
代わりにテキスト識別子(TID)を使用できる場合がありますが、TIDの網羅的なリストはこのマニュアルの範囲外です。

// 例:
var button = ui.AddButton()
button.text = te.xt(Play)
// この例を機能させるには設定で言語を変更します

te.GetTID(str)

戻り値:string
指定されたテキストのテキスト識別子(TID)を返します。
入力テキストは、プレイヤーが選択した言語を想定しています。

// 例:
var tid = te.GetTID("Play")
>`0,1,@tid@
// tid_button_play が画面に表示されます

te.ToEnglish(str)

戻り値:string
指定されたテキストをプレイヤーが選択した言語から元の英語テキストに翻訳します。
翻訳バージョンが見つからない場合、代わりに入力テキストが返されます。

>`0,1,@te.ToEnglish("Jogar")@
// 設定でポルトガル語が選択されている場合、"Play" が表示されます
// それ以外の場合、"Jogar" が表示されます

▲ 上に戻る


time(時間)

time.FormatCasual(int) / time.FormatCasual(int,bool)

戻り値:string
フレーム数を人間が読みやすい文字列(時間)に変換。 例: "1m 23s"。第2パラメータ(bool)はオプションです。'true' の場合、結果の精度が最大化されます。

// 例:
>`0,0,現在の時間 =
^ @time.FormatCasual(totaltime, true)@

time.FormatDigital(int) / time.FormatDigital(int,bool)

戻り値:string
フレーム数を人間に読みやすい文字列(時間)に変換。
例: "1:23"。第2パラメータ(bool)はオプションです。'true' の場合、結果の精度が最大化されます。

// 例:
>`0,0,現在の時間 =
^ @time.FormatDigital(totaltime, true)@

▲ 上に戻る


UI(ユーザーインターフェース)

Stonescriptの高度なUIシステムに関する詳細は、ユーザーインターフェースセクションを参照してください。
ui namespaceのその他の機能には、以下が含まれます。

ui.OpenInv()

戻り値:なし
インベントリ画面を開く。

ui.OpenMind()

戻り値:なし
マインドストーン画面を開く。

ui.ShowBanner(str) / ui.ShowBanner(str, str)

戻り値:なし
最大2つのメッセージを持つアニメーションバナーを表示します。
ui.ShowBanner() が呼び出されるたびにバナーアニメーションが再起動します。

// 例:
?key = timeBegin
  ui.ShowBanner("Hello World!")

▲ 上に戻る


Other(その他)

Type(var)

戻り値:string
変数の型を評価し、文字列表現を返します。
可能な型には 'string'、'int'、'bool'、'function'、'object'、および 'null' が含まれます。

// 例:
var a = 0
?Type(a) = int
  >変数 'a' は整数型です。

▲ 上に戻る


·:·:· 外部スクリプトのインポート ·:·:·

あなたのスクリプトはすべてMind Stoneにある必要はありません。
Stonescriptは 'import' および 'new' キーワードを使用して外部ファイルの読み込みをサポートしています。

外部スクリプトが機能するためには、セーブファイルのフォルダ内にある /Stonescript フォルダ内に配置され、'.txt' で終わる必要があります。

最も基本的な例では、外部スクリプトがインポートされ、それがMind Stone内に直接あるかのように実行されます。
これはスクリプトを整理する便利な方法です。

import Rocky
import Deadwood
import Caves
import Forest

スクリプトがインポートされると、それが独自のコンテナにコピーされ、参照として返されます。
外部スクリプトで宣言された変数は分離され、他のスクリプトの変数とは干渉しません。

この例では、印刷ユーティリティスクリプトが簡略化されたサービスを提供しています:

// PrintUtil.txt
func LowerLeft(x, y, color, message)
  y = y + screen.h
  >`@x@,@y@,@color@,@message@

func LowerRight(x, y, color, message)
  x = x + screen.w
  y = y + screen.h
  >`@x@,@y@,@color@,@message@

Mind Stone内のメインスクリプトでは、このように使用できます:

var print = import PrintUtil
disable hud
print.LowerLeft(0,-1,#ffffff,"Health: " + hp)

高度なソリューションでは、コンポーネンティゼーションまたはオブジェクト指向パラダイムを実装するために、同じスクリプトを複数回 'new' コマンドを使用してインポートできます:

// Vector.txt
var x = 0
var y = 0

func init(_x, _y)
  x = _x
  y = _y

func subtract(otherVect)
  x = x - otherVect.x
  y = y - otherVect.y

Mind Stone内のメインスクリプトでは、このように使用できます:

var vectFrom = new Components/Vector
var vectTo = new Components/Vector

vectFrom.init(5, 4)
vectTo.init(8, 2)
vectTo.subtract(vectFrom)

>x = @vectTo.x@, y = @vectTo.y@

外部スクリプトは 'ToString()' 関数を実装でき、高度な印刷コマンドで直接使用できるようになります:

// Vector.txt
var x = 0
var y = 0

func init(_x, _y)
  x = _x
  y = _y

func ToString()
  return "(" + x + ", " + y + ")"

Mind Stone内のメインスクリプトでは、このように使用できます:

var v = import Components/Vector
v.init(3,5)
>Vector = @v@

外部スクリプトはサブフォルダからインポートできます:

import Games/Blackjack
import Cosmetics/PetFrog
import Cosmetics/Hats

'import' と 'new' の間には似ている点がありますが、2つの重要な違いがあります。 'import' では同じオブジェクトが毎回返されます。

同じスクリプトを複数の場所からインポートすると、それらはすべて同じオブジェクトを使用します。 'new' でインポートされたスクリプトは一意のコピーですが、そのスクリプト本体は1回だけ実行され、毎フレームでは実行されません。

▲ 上に戻る


·:·:· ASCIIアート ·:·:·

Stonescriptでは、カスタムASCIIアートをスクリプト内に埋め込み、高度な印刷コマンドで画面上に描画することができます。
これを行うためのいくつかの方法があり、一部の文字は特別な動作を持っています:

#

空白。透明。描画しません。

\n

改行。描画を次の行に続けます。

注意:
これはコストのかかる演算子であり、大規模な図形で行を分割するために使用すべきではありません。代わりに、ascii/asciiend ブロックを使用してください。

メソッド1 - 高度なプリント

この例では、画面の左上に緑の円を描画します。

>`1,0,#green,ascii
#.-.
(   )
#`-´
asciiend

メソッド2 - 変数

この例では、おどろおどろしい魚のアートを変数に保存し、それを赤い色で画面の左上に描画します。

var fishSprite
fishSprite = ascii
###(°_##
#_/_ o\#
#´  `'"#
asciiend

>`0,3,#red,@fishSprite@

▲ 上に戻る


·:·:· ループ ·:·:·

ループは、コードの一部を複数回実行することを可能にします。ループを作成するには、'for'キーワードを使用します。形式は以下の通りです:

for v = a..b

ループ変数 'v' は値 'a' でループを開始し、値 'b' に達するまで値が増加し、その後ループが終了します:

for i = 1..5
  >`0,@i@,i = @i@

ループ変数 'v' は 'for' の前に宣言されていてはいけず、ループのスコープに含まれています。ただし、開始値と終了値 'a' と 'b' はループの前に宣言できます:

var min = 1
var max = 4
var sum
sum = 0
for j = min..max
  sum = sum + j
>sum = @sum@

ループは逆方向に進むことも、負の数を使用することもできます:

var g
g = ""
for k = 5..-2
  g = g + k
>g = @g@

ループは互いに入れ子にすることも、数学式とインラインで組み合わせて複雑なアルゴリズムを形成することもできます:

for x = 1..9
  for y = x/2 .. x/2 + 6
    >`@x@,@y@,*

ループを早期に抜け出すには、ループ変数を範囲外にするように変更します:

var n
n = ""
for i = 1..5
  ?i = 3
    i = -1
  n = n + i
>n = @n@

同様に、break コマンドを使用してループから抜け出すこともできます:

for i = 1..5
  ?i = 3
    break

ループは continue コマンドもサポートしています。
呼び出されると、continue の下の命令はスキップされ、ループが続行されます:

var n
n = ""
for i = 1..5
  ?i = 3
    continue
  n = n + i
>n = @n@

この形式を使用して配列の要素をループ処理することも可能です:

var a = [1, 2, 3]
var n
n = ""
for value : a
  n = n + value
>n = @n@

▲ 上に戻る


·:·:· 配列 ·:·:·

配列は特別な種類の変数です。
値やオブジェクトを順次に整理し、1つの変数に割り当てるための手段を提供します。

a = []

新しい配列を初期化します。詳細は以下を参照してください。

a[integer]

指定された位置の値を読み取ります。

// 例:
var myArray = [10, 3]
?myArray[1] = 3
  >はい、[1] の位置の値は 3 です

a.Add(value)

新しい値/オブジェクトを配列の末尾に追加します。

// 例:
var myArray = []
myArray.Add(10)

a.Clear()

配列からすべての要素を削除し、配列を空にします。これは配列を [] で再宣言するよりも効率的です。

// 例:
var myArray = [10, 3]
myArray.Clear()

a.Contains(value)

指定された値が配列内に存在するかどうかを判断します。
見つかった場合は true を返し、それ以外の場合は false を返します。

// 例:
var myArray = [10, 3]
?myArray.Contains(3)
  >はい

a.Count()

配列内の要素数を返します。

// 例:
var myArray = ["apple", "banana"]
var size = myArray.Count()
>配列のサイズ = @size@

a.Emplace(integer, value)

指定された位置の値を新しい値で置き換えます。

// 例:
var myArray = [10, 3]
myArray.Emplace(0, 4)
var value = myArray[0]
>[0] の位置の値は今や @value@ です

a.IndexOf(value)

配列内で指定された値を検索します。最初に値が見つかった位置を示す整数を返します。値が見つからない場合は -1 を返します。

// 例:
var myArray = [10, 3]
var index = myArray.IndexOf(3)
>位置 @index@ で見つかりました

a.Insert(integer, value)

新しい値/オブジェクトを配列の特定の位置に追加します。
右側の要素は次の位置にシフトされます。

// 例:
var myArray = [10, 3]
myArray.Insert(1, "apple")
// 配列は [10, "apple", 3] になります

a.RemoveAt(integer)

特定の位置の配列内の要素を削除します。
削除された値が返されます。 ゼロベース: myArray.RemoveAt(0) は最初の要素を削除します。右側の要素は前の位置にシフトされます。

// 例:
var myArray = [1, 2, 3]
myArray.RemoveAt(1)
// 配列は [1, 3] になります

a.Sort()

配列の要素を昇順に整理します。
配列に異なる型のオブジェクトが含まれている場合、ソートされますが、期待される結果が定義されず、要素が型別にグループ化される保証はありません。

// 例:
var myArray = ["Cherry", 2, "Apple", 1, true, false, "Banana", 3]
var value

myArray.Sort()

for i = 0 .. myArray.Count() - 1
  value = myArray[i]
  >`0,@i@,@value@

以下は、配列を初期化および使用するさまざまな方法のいくつかです:

配列の初期化:

var emptyCollection = []

var magicNumbers = [10, 3, 0, 15, -7]

var someStrings = ["apple", "banana", "cherry"]

var sameButMultiLine = [
  "apple",
  "banana",
  "cherry",
]

var redeclaredEachFrame
redeclaredEachFrame = [] // PCに適していません

var clearedEachFrame = []
clearedEachFrame.Clear() // CPUとメモリにやさしい

var clearedEachLoop = []
?loc.begin | loc.loop
  clearedEachLoop.Clear()

var multiDimensional = [[], [], []]

var objectCollection = [
  new Components/Float,
  new Components/Float,
  new Components/Vector,
]

var animationFrames = [ascii
───┼
  O/
 /|
 / \
asciiend
^,ascii
   ---.
  O    \
 /|\┼───
 / \
asciiend
^]

配列のループ:

var myArray = ["Apple", "Banana", "Cherry"]
var count
var value

count = myArray.Count()
?count > 0
  for i = 0 .. count - 1
    value = myArray[i]
    >`0,@i@,@value@
// この例は画面の左側にフルーツの名前を表示します

多次元配列へのアクセス:

var a = [[1,2], [3,4]]
var value

value = a[1][0]
>位置(1, 0)で値@value@を見つけました

▲ 上に戻る


·:·:· カスタム入力 ·:·:·

Stonescriptは、?key game stateを使用してプレイヤーの入力を読み取ることができます。
これはAIの異なるモードなど、高度な動作を制御するのに使用できますが、カスタム入力を使用するとStone Storyの上に完全に新しい体験を作成することができます。

この例では、@記号をクラシックなRogue-likeゲームの主人公のように画面上を移動できます。
キーコード(leftBeginなど)はボタンの初回の押下を指します。

var x = 0
var y = 0

?key = leftBegin
  x--
  ?x < 0
    x = 0
?key = rightBegin
  x++

?key = upBegin
  y--
  ?y < 0
    y = 0
?key = downBegin
  y++

>`@x@,@y@,#ffffff,@

利用可能なすべてのキーコードを含む表

Held Pressed Released Default PC
left leftBegin leftEnd A or ←
right rightBegin rightEnd D or →
up upBegin upEnd W or ↑
down downBegin downEnd S or ↓
primary primaryBegin primaryEnd LMB, Return
back backBegin backEnd X
ability1 ability1Begin ability1End Shift
ability2 ability2Begin ability2End Control
bumpL bumpLBegin bumpLEnd Z
bumpR bumpRBegin bumpREnd C
単語説明

ゲームのキーボードやコントローラーの入力状態を示すものです。それぞれの役割は以下の通りです

Held

キーが押された状態を表します。
プレイヤーが特定のキーを押し続けている場合、そのキーの名前がここに表示されます。

Pressed

キーが瞬間的に押された状態を表します。
プレイヤーが特定のキーを一度だけ押した場合、そのキーの名前がここに表示されます。

Released

キーが離された状態を表します。
プレイヤーが特定のキーを離した瞬間、そのキーの名前がここに表示されます。

Default PC

この列には、PCプラットフォームでのデフォルトのキーボード入力が示されます。
例えば、"A or ←" は、「Aキーまたは左矢印キー」という意味です。

▲ 上に戻る


·:·:· ユーザーインターフェース ·:·:·

ボタン、テキスト、アニメーション...
Stonescriptは、複雑なレイアウトと高性能なユーザーインターフェースを構築するためのシステムを提供します。

不可視の "root" パネルがシステムの基盤にデフォルトで存在します。
さまざまな他のUI要素をルートパネルに追加でき、追加された順序ですべての要素が一度に描画されます。
これには、追加のパネルなどが含まれ、ツリー構造を形成します。

root
│
├─ Panel
│  ├─ Text
│  ├─ ASCII-art
│  └─ Button
│
├─ Panel
│  ├─ Panel
│  │  └─ Text
...

UI(ユーザーインターフェース)

ui namespace内の関数を呼び出してインターフェースを構築します。

ui.root

Panel
ツリー全体の上に構築される基本的なUIオブジェクト。

// 例:
disable hud
ui.root.visible = true

ui.AddAnim(string)

戻り値:Anim
ルートパネルにAnimオブジェクトを追加します。
アニメーションスプライトシートをパラメータとして受け入れます。

// 例:
?loc.begin
  ui.AddAnim(ascii
\o)
%%
(o/
asciiend)

ui.AddButton()

戻り値:Button
ルートパネルにButtonオブジェクトを追加します。

// 例:
func OnPressed()
  > こんにちは、世界!

?loc.begin
  var button = ui.AddButton()
  button.y = 1
  button.text = "押してください"
  button.SetPressed(OnPressed)

ui.AddPanel()

戻り値:Panel
ルートパネルにPanelオブジェクトを追加します。
パネルは他の要素のコンテナとして重要なオブジェクトです。

// 例:
?loc.begin
  var p = ui.AddPanel()
  p.color = #red

ui.AddStyle()

戻り値:int
四角形のコンポーネント(パネルやボタンなど)の描画に使用できる新しいスタイルを追加します。
新しいスタイルのID番号を返します。
同じスタイルが複数回追加されるのを防ぎます。

異なるスクリプトがui.AddStyle()を呼び出す可能性があるため、スクリプトにスタイル番号をハードコーディングする代わりにIDを変数として保存することをお勧めします。

// 例:
var customStyle = ui.AddStyle("
^123
^456
^789")
?loc.begin
  var p = ui.AddPanel()
  p.style = customStyle

ui.AddText() / ui.AddText(string)

戻り値:Text
ルートパネルにTextオブジェクトを追加します。

// 例:
?loc.begin
  var t = ui.AddText()
  t.text = "こんにちは、世界!"

ui.Clear()

戻り値:なし
メインコンテナからすべてのUI要素を削除します。

// 例:
?key = backBegin
  ui.Clear()

▲ 上に戻る


Component(コンポーネント)

Componentは他のすべてのUIタイプの基本型です。 つまり、他の要素(パネル、テキスト、ボタン、およびアニメーション)はすべて次のプロパティを持っています。

component.x

integer
コンポーネントのX座標。
ドッキング位置を基準とした相対位置です。

component.y

integer
コンポーネントのY座標。
ドッキング位置を基準とした相対位置です。

component.w

integer
コンポーネントの幅。
オブジェクトの種類によってデフォルト値が異なります。

// 例:
button.w = string.Size(button.text) + 4
// ボタンの幅を現在のテキストに合わせて調整します(両側に+2)

component.h

integer
コンポーネントの高さ。
デフォルト値は5です。

// 例:
panel.h = panel.parent.h
// パネルの高さを親パネルの高さに合わせます

component.absoluteX / component.absoluteY

integer
読み取り専用
コンポーネントの画面に対する位置です。

// 例:
var t
?loc.begin
  var p = ui.AddPanel()
  p.anchor = bottom_right
  p.dock = bottom_right
  t = ui.AddText("Foo")
  p.Add(t)
>`0,1,相対座標 = @t.x@,@t.y@
>`0,2,絶対座標 = @t.absoluteX@,@t.absoluteY@

component.anchor

string
コンポーネントの内部ピボットを表す自動レイアウトプロパティ。
これはコンポーネントを自身に対してどのように配置するかをUIシステムに指示します。
デフォルト値は "center_center" です。

可能な値:
top_left top_center top_right
center_left center_center center_right
bottom_left bottom_center bottom_right

component.dock

string
anchorに似た自動レイアウトプロパティです。
ただし、dockは外部ピボット、またはコンポーネントを配置する親内の位置を表します。
疑念がある場合、anchorとdockに同じ値を使用することが一般的です。

// 例:
?loc.begin
  var p = ui.AddPanel()
  p.anchor = top_right
  p.dock = top_right
  p.w = 20
  p.h = 9
  var t = ui.AddText("HelloWorld!")
  t.anchor = left_bottom
  t.dock = bottom_left
  t.x = 2
  t.h = t.lines.Count() + 1
  p.Add(t)

component.ax

string
anchorのX部分。

可能な値:
left center right

component.ay

string
anchorのY部分。

可能な値:
top center bottom

component.dx

string
dockのX部分。

可能な値:
left center right

component.dy

string
dockのY部分。

可能な値:
top center bottom

// 例:
var p
?loc.begin
  p = ui.AddPanel()
  p.ax = right
  p.ay = top
  p.dx = right
  p.dy = top

component.parent

Panel
読み取り専用
コンポーネントの親パネルへの参照。
コンポーネントが別のパネルに追加されなかった場合、ルートパネルを指します。 panel.Add(component)が呼び出されると、コンポーネントの親が変更されます。

component.visible

マルチタイプ
bool/string
コンポーネントの可視性。
デフォルト値は "inherit" です。

可能な値:
true false inherit

'true'に設定すると、コンポーネントは常に表示され、親の状態に関係なく可視です。
'false'に設定すると、コンポーネントは親に関係なく不可視になります。
ただし、'inherit'に設定すると、コンポーネントは親の可視性に従います。

component.Recycle()

戻り値:なし
コンポーネントを親パネルから削除します。
将来のui.Add_()呼び出しで再利用されます。

リサイクルされた要素への変数参照はバグを避けるためにnullにするか再割り当てする必要があります。

▲ 上に戻る


Panel > Component(パネル > コンポーネント)

「Panel」は、他のコンポーネントを格納するコンテナとして機能する四角形のコンポーネントです。
お互いに追加されたパネルの連鎖は、ツリー構造を形成します。

panel.children

Component[]
Panelに追加されたすべての子コンポーネントを含む配列です。

panel.clip

bool
Panelの境界が子コンポーネントの描画を制限するかどうかを示します。
trueの場合、Panelの境界外にある子コンポーネントの一部は描画されません。

例:
var p
?loc.begin
  p = ui.AddPanel()
  p.w = 4
  p.h = 3
  var t = ui.AddText("The quick brown fox jumps
^ over the lazy dog.")
  p.Add(t)

?time%30 < 15
  p.clip = true
:
  p.clip = false

panel.color

string
Panelの色です。RGBの16進数形式で表現されます。

panel.style

int
Panelの現在のスタイルのID番号です。
デフォルト値は1です。
-8から8までの可能な値があります。

追加のスタイルはui.AddStyle()を使用して追加できます。

panel.Add(Component) / panel.Add(Component, int)

戻り値:なし
ComponentをPanelに追加します。
ComponentはPanelの子になり、PanelはComponentの親になります。

要素がPanelに追加される順序は、描画順に影響します。
オプションの整数パラメータを使用して特定のソート位置に要素を挿入できます。
整数パラメータが指定されない場合、ComponentはPanelの最後の子として追加されます。

この関数は、すでにPanelの子であるComponentの描画順序を変更するためにも使用できます。

panel.Clear()

戻り値:なし
PanelからすべてのUI要素を削除します。
この方法で削除されたComponentはUIシステムに再利用され、将来のui.Add_()呼び出しで再利用されます。

これらの要素への変数参照は、バグを回避するためにnullにしたり再割り当てしたりする必要があります。

panel.Remove(Component) / panel.Remove(int)

戻り値:なし
Panelから特定のComponentを削除するか、指定されたインデックス番号のComponentを削除します。
この方法で削除されたComponentはUIシステムに再利用され、将来のui.Add_()呼び出しで再利用されます。

これらの要素への変数参照は、バグを回避するためにnullにしたり再割り当てしたりする必要があります。

▲ 上に戻る


Text > Component(テキスト > コンポーネント)

「Text」は、複数行のテキストボックスを表すコンポーネントです。
カラーメタデータをサポートします。

text.align

string
ボックス内のテキストの配置/整列設定。
デフォルト値は "left" です。

可能な値:
left center right

text.color

string
テキストの色、RGB 16進数形式で指定します。

text.lines

string[]
Text ボックスが内容をフォーマットした後の、改行されたテキストの配列です。
カラー メタデータは除外されます。

text.text

string
Text ボックスの全内容です。
テキストの一部にはメタデータ [color=#rrggbb][/color] で色が付けられていることがあります。

?loc.begin
  var t = ui.AddText()
  t.text = "こんにちは [color=#red]世界[/color]!"

▲ 上に戻る


Button > Component(ボタン > コンポーネント)

button.text

string
ボタン内に表示されるテキストです。

button.tcolor

string
ボタン内のテキストの色です。
RGB 16進数形式で指定します。

button.bcolor

string
ボタンの境界線の色です。
RGB 16進数形式で指定します。

button.hcolor

string
ボタンが押されたときのハイライト色です。
RGB 16進数形式で指定します。

button.sound

string
ボタンが押されたときに再生される効果音です。
デフォルトは "confirm" です。

button.style

int
ボタンの現在のスタイルのID番号です。
デフォルト値は 1 です。
-8から8までの値が可能です。

ui.AddStyle()で追加のスタイルを設定できます。

button.SetPressed(f)

function callaback
ボタンが押されたときに呼び出される関数を割り当てます。
関数は任意の数のパラメータを持つことができます(パラメータがない場合も含む)。
関数が呼び出されると、最初のパラメータはボタンへの参照になります。

button.SetDown(f)

function callaback
ボタンが押された瞬間(最初のユーザーコンタクト)に呼び出される関数を割り当てます。

button.SetUp(f)

function callaback
ボタンの上での押し上げが終了したときに呼び出される関数を割り当てます。

例:
var button1
var button2
func OnPressed(btn)
  ?btn = button1
    >ボタン1が押されました
  :
    >ボタン2が押されました

?loc.begin
  button1 = ui.AddButton()
  button1.y = 1
  button1.SetPressed(OnPressed)

  button2 = ui.AddButton()
  button2.y = 6
  button2.SetPressed(OnPressed)

▲ 上に戻る


Anim > Component(アニメ > コンポーネント)

UIに追加できるASCIIスプライトシートアニメーション。

anim.color

string
アニメーションの色をRGBの16進数形式で表します。

anim.duration

int
アニメーションの時間長(フレーム単位)です。

anim.flipX

bool
true の場合、アートを水平に反転させ、そのピボットを中心にします。

anim.flipY

bool
true の場合、アートを垂直に反転させ、そのピボットを中心にします。

anim.frame

int
描画中の現在のアニメーションフレームです。アニメーションを特定のフレームに設定するために変更できます。

anim.gamePause

bool
true の場合、プレイヤーがゲームを一時停止した場合、アニメーションは自動的に一時停止し、プレイヤーが一時停止画面から復帰した際に再生が再開されます。

anim.loop

bool true の場合、アニメーションは持続時間の終わりに達した直後に最初から再スタートします。

anim.playing

bool
読み取り専用
アニメーションが現在再生中である場合にtrueです。

anim.paused

bool 読み取り専用
アニメーションが再生中であり、anim.Pause() を呼び出して一時停止されている場合にtrueです。

anim.pivotX / anim.pivotY

int
ASCIIアートが描かれる位置に関連して微調整に使用できる追加のピボットオフセットです。

anim.playOnStart

bool
trueの場合、アニメーションはできるだけ早く再生を開始します。

anim.AddLayer(string)

戻り値:Anim
新しいASCIIスプライトをこのアニメーションの上に追加します。

アニメーションが再生されると(またはanim.frameでフレームが変更されるか)、すべてのレイヤーが同期します。

各レイヤーには、色、ピボットなどのプロパティがあります。複雑なASCIIアートにアニメーションレイヤーを使用する利点は、パフォーマンスの向上とコードの品質向上です。

アニメーションがリサイクルされると、すべてのレイヤーが同時にクリーンアップされます。

// 例:
var a = ui.AddAnim(asciiArtA)
var layer2 = a.AddLayer(asciiArtB)
layer2.color = #bbbbbb

anim.Load(string)

戻り値:なし
新しいASCIIスプライトシートを割り当てます。

anim.Pause()

戻り値:なし
アニメーションの再生を現在のフレームで一時停止します。
anim.Play()を呼び出して再生を再開します。

anim.Play()

戻り値:なし
アニメーションの再生を開始します。または一時停止されていた場合、再生が再開します

var dance
?loc.begin
  dance = ui.AddAnim(ascii
(O/
%%
\O)
asciiend)
  dance.duration = 20
  dance.loop = true
  dance.Play()

anim.Stop()

戻り値:なし
再生を一時停止し、アニメーションを最初のフレームに戻します。

Canvas > Component(キャンバス > コンポーネント)

任意のグリフと色を描画するために最適化されたコンテナ。

canvas.blend

string
キャンバスのブレンドモード。
キャンバスが背後の要素と合成される際のブレンドモード。
デフォルト値は"opaque"です。

可能な値:
Opaque = 不透明
Multiply = 乗算
Divide = 除算
Add = 加算
Subtract = 減算

// 例:
var filter1 = ui.AddCanvas()
var filter2 = ui.AddCanvas()
filter1.w = screen.w
filter1.h = screen.h
filter2.w = screen.w
filter2.h = screen.h

filter1.blend = "multiply"

filter1.SetFG(#aa5555)
filter1.SetBG(#dddddd)

filter2.blend = "add"

filter2.SetFG(#aa6600)
filter2.SetBG(#662200)

canvas.Get(int,int)

戻り値:string
キャンバス上の特定の位置 x, y にあるグリフを返します。

canvas.Set(str)

戻り値:なし
指定されたグリフでキャンバス全体を塗りつぶします。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  canvas.Set("X")

canvas.Set(int,int,str)

戻り値:なし
キャンバス上の特定の位置 x, y を指定したグリフに変更します。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  canvas.Set(0, 0, "A")

canvas.Set(int,int,fg,str) / canvas.Set(int,int,fg,bg,str)

戻り値:なし
特定の位置のキャンバスを変更し、同時に前景色と背景色を設定するためのオーバーロードです。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  for x = 0..canvas.w
    for y = 0..canvas.h
      var fg = color.Random()
      var bg = color.Random()
      canvas.Set(x, y, fg, bg, "▄")

canvas.SetFG(color)

戻り値:なし
キャンバス全体に前景色を設定します。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  canvas.Set("R")
  canvas.SetFG(#red)

canvas.SetFG(int,int, color)

戻り値:なし
特定の位置 x, y で前景色を変更します。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  canvas.Set("X")
  canvas.SetFG(2, 1, #ff00ff)

canvas.SetBG(color)

戻り値:なし
キャンバス全体に背景色を設定します。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  canvas.Set("g")
  canvas.SetBG(#00aa00)

canvas.SetBG(int,int,color)

戻り値:なし
特定の位置 x, y で背景色を変更します。

// 例:
?loc.begin
  var canvas = ui.AddCanvas()
  canvas.Set("X")
  canvas.SetBG(2, 1, #yellow)

▲ 上に戻る


·:·:· ヒント ·:·:·

スペース(インデント)*1は、'?'の比較(スコープ)の結果として何が起こるかを定義する際に重要です。

実行中にスクリプトを変更するには、キーボードの 'M' キーを押します。
Mind Stoneの右上にある電源ボタンは、スクリプトをON/OFFに切り替えます。

複数のequipコマンドが呼び出された場合、最後に呼び出されたものが実行されます。
スクリプトは1秒あたり30回実行されます(1フレームごとに1回)。

異なるスクリプトを試すには、それらをNotepadなどの外部テキストエディタにコピーすることをお勧めします。
Ctrl+A(全選択)、Ctrl+C(コピー)、Ctrl+V(貼付)などの一般的なショートカットが役立ちます。

ゲーム内でTabキーを押すと、ゲームの状態に関する多くの情報が表示され、最近のStonescriptエラーのリストも表示されます。
テキスト内でのprintコマンドを複数行に分割するには、テキスト内で '\n' を使用します。


·:·:· デフォルトスクリプト ·:·:·

import Fishing

?hp < 7
  activate potion
?loc = caves
  equipL sword
  equipR shield
  ?foe = boss
    equip crossbow

スクリプトの翻訳

'Fishing'をインポート
(川でフィッシングゲームをプレイ出来るようになります)

プレイヤーhpが7未満の場合、
  ポーション発動
場所が洞窟の場合、
  swordを左に装備
  shieldを右に装備
  場所が洞窟かつ敵がボスの場合
      crossbowを装備
      (両手武器はequipにL,Rをつけません)

▲ 上に戻る


·:·:· ロードマップ ·:·:·

計画中でまだゲームに実装されていない機能:

  • ラインの描画
  • Find()を使用して敵や装飾物の参照を取得
  • 敵、装飾物、武器のネイティブなモッディング
  • ユーザー生成のサイドクエストで使用するための拡張API
  • パーティクルエミッション
  • equipF (str) - アイテムをフェアリーに装備
  • foes - 46ユニット以内の敵のリスト

▲ 上に戻る


·:·:· 付録 A - 効果音 ·:·:·

Stonescriptは、カスタムロジックに基づいてゲームからサウンドエフェクトを再生できます。この例では、プレイヤーが体力を失うたびに'unequip'のサウンドが再生されます。

var lasthp = hp
?hp < lasthp
  play unequip
lasthp = hp

ほとんどのサウンドには、ランダムまたは連続的に再生するバリエーションがあります。
同じサウンドが1フレーム内で複数回再生されると、無視されます。1秒間に5つ以上のサウンドが再生される場合、サウンドは制限されます。

以下はStone Story RPGで利用可能なサウンドの完全なリストです:

効果音リスト

buy
click
confirm
soul_stone
sword_cast
sword_hit
wand_cast
wand_hit
player_kick
player_punch
stone_throw_cast
stone_throw_hit
grappling_cast
grappling_hit
grappling_idle
hatchet_cast
hatchet_hit
shovel_cast
torch_cast
torch_hit
torch_idle
pickup_stone
pickup_wood
pickup_tar
pickup_success
soul_stone_drop
wand_drop
key_drop
cross_deadwood_bump
cross_deadwood_row
cross_deadwood_splash
ui_starfirst
ui_starnew
ui_starold1
ui_starold2
ui_starold3
ui_starold4
bronze_gate_open
prompt_choice
waterfall_hook_hit
waterfall_splash
haunted_gate_key_bounce_1
haunted_gate_key_bounce_2
haunted_gate_key_bounce_3
haunted_gate_opening
haunted_gate_point_lost
haunted_gate_key_into_gate
haunted_gate_shuffle
haunted_gate_shuffle_fast
haunted_gate_torch_off
haunted_gate_torch_on
haunted_gate_try_to_open
paint_splat
waterfall_land
waterfall_rope_grab
waterfall_rope_swing
skeleton_boss_death
skeleton_boss_legs_die
spider_boss_death
tree_boss_death
mushroom_boss_death
tree_boss_attack
tree_boss_awake
tree_boss_idle
tree_boss_spike
spider_boss_attack
player_hit
mushroom_boss_awake
mushroom_boss_punch
mushroom_boss_shoot
skeleton_boss_arm1
skeleton_boss_arm2
skeleton_boss_attack
skeleton_boss_idle
skeleton_boss_bone_bounce
skeleton_boss_arm_woosh
equip
unequip
bat_attack_small
bat_death_small
bat_wing
bat_wing_small
spider_attack
spider_death
spider_death_small
spider_eggs_spawn
spider_walk
scarab_awake
scarab_bite
scarab_death
scarab_horn
scarab_wings
mosquito_attack
mosquito_death
mosquito_loop
bronze_gate_locked
bat_attack
bat_death
progress_1
progress_2
progress_3
progress_4
progress_5
progress_6
progress_7
progress_8
progress_9
life_gain
player_death
logo_full
logo_short
smithy_hammer
sightstone_cast
error
ranting_tree_halt
treasure_close
treasure_item_pop
treasure_item_show
treasure_open
skeleton_boss_awake
skeleton_boss_hand_slam
level_up
insta_kill
spider_boss_awake
metal_drop
treasure_drop
smithy_hammer_fail
xp_tick
crossbow_cast
crossbow_hit
wand_aether_cast
wand_aether_hit
wand_air_cast
wand_air_hit
wand_fire_cast
wand_fire_hit
wand_ice_cast
wand_ice_hit
wand_poison_cast
wand_poison_hit
wand_vigor_cast
wand_vigor_hit
skeleton_boss_arm_reconnect
skeleton_boss_summon_minions
mushroom_boss_fat_slam
pickup_bronze
temple_npc_chant
temple_npc_clear_throat
temple_npc_talk
first_controller
slave_npc
slave_outro_chatter
slave_outro_voice
haunted_gate_npc_voice
slave_outro_transition
bronze_guardian_attack1
bronze_guardian_attack2
bronze_guardian_attack3
bronze_guardian_death
bronze_guardian_helmet
bronze_guardian_power_up
bronze_guardian_steps
ant_attack
ant_death
ant_walk
snail_attack
snail_attack_small
snail_death
snail_death_small
snail_walk
ghost_death
ghost_death_small
skeletimmy_death
skeletony_death
skeletimmy_attack
skeletony_attack
skeletony_awake_a
skeletony_awake_b
skeletony_walk
ghost_loop
ghost_loop_small
ghost_attack
ghost_attack_small
controller_death
controller_whip_attack
controller_whip_hit
dominotaur_death
dominotaur_whip_attack
dominotaur_whip_hit
mine_walker_death
mine_walker_attack_a
mine_walker_attack_b
mine_walker_attack_hit
mine_walker_awake
mine_walker_step
fire_elemental_attack
fire_elemental_attack_hit
fire_elemental_awake
fire_elemental_death
mine_walker_helmet_break
ice_elemental_attack
ice_elemental_attack_hit
ice_elemental_awake
ice_elemental_death
ki_eater_attack
ki_eater_attack_hit
ki_eater_awake
ki_eater_death
ki_gobbler_attack
ki_gobbler_attack_hit
ki_gobbler_awake
ki_gobbler_death
ki_slerper_attack
ki_slerper_attack_hit
ki_slerper_awake
ki_slerper_death
bell_ringer_attack
bell_ringer_attack_hit
cult_guard_attack
cult_guard_attack_hit
cult_marksman_attack
cult_marksman_attack_hit
cult_sorcerer_attack
cult_sorcerer_attack_hit
cultist_death
flying_serpent_loop
poison_adept_attack
poison_adept_attack_hit
serpent_attack
serpent_death
serpent_handler_release
serpent_hiss
serpent_slither
worm_rider_hop
booklet_open
booklet_turn_page
booklet_close
hammer_cast
hammer_hit
shield_dash
fissure_break_apart
fissure_unmake
mindstone_off
mindstone_on
triskelion_fuse
potion_berserk
potion_cleansing
potion_defensive
potion_experience
potion_healing
potion_invisibility
potion_lightning
potion_lucky
potion_strength
potion_vampiric
bronze_guardian_pulling_hammer
bronze_guardian_removing_hammer
bronze_guardian_turbine
bronze_guardian_ears_ring
bronze_guardian_fuse
bronze_guardian_attack4
yeti_attack
yeti_attack_flick
yeti_attack_hit
yeti_awake_blow
yeti_awake_explosion
yeti_awake_inhale
yeti_awake_lick
yeti_blow
yeti_blow_ice_wall
yeti_death
yeti_inhale
yeti_inhale_lick
nagaraja_awake_roar
nagaraja_awake_swallow
nagaraja_awake_tongue_1
nagaraja_awake_tongue_2
nagaraja_dead
nagaraja_poison_attack
nagaraja_poison_attack_hit
nagaraja_wail
nagaraja_wail_brick
nagaraja_attack_eat
nagaraja_attack_lick
nagaraja_attack_swallow
nagaraja_tongue_damaged
nagaraja_tongue_lift
nagaraja_tongue_smell
nagaraja_tongue_wrap
bearer3_talk
bearer_attack
bearer_attack_hit
bearer_death
bearer_stealing
bearer_super_attack
bearer_scream
bearer4_talk
bearer4_talk_evolving
bearer_evolving
elementalist_aether_attack
elementalist_aether_attack_hit
elementalist_aether_blink
elementalist_death
elementalist_fire_attack
elementalist_fire_attack_hit
elementalist_fire_blink
elementalist_ice_attack
elementalist_ice_attack_hit
elementalist_ice_blink
elementalist_poison_attack
elementalist_poison_attack_hit
elementalist_poison_blink
elementalist_vigor_attack
elementalist_vigor_attack_hit
elementalist_vigor_blink
bearer5_talk
elementalist_evolving
perfected_attack
perfected_attack_hit
perfected_death
perfected_defense
perfected_energy_ball
perfected_energy_ball_hit
perfected_summon
perfected_talk
epilogue_devolving
epliogue_player_evolves
epilogue_talk
devolved_talk
dysangelos_guidance
dysangelos_guidance_1
dysangelos_guidance_2
dysangelos_guidance_3
dysangelos_intro_talk
ranting_tree_talk_halt
ranting_tree_talk_again
ranting_tree_talk_how_dare
ranting_tree_talk_avenge
ranting_tree_talk_get_out
ranting_tree_talk_impressive
ranting_tree_talk_very_well
ranting_tree_talk_extra
hans_talk_intro
hans_talk_reward
scotty_a_pleasure
scotty_a_worthy_opponent
scotty_deuced
scotty_failte_back
scotty_getting_good
scotty_grr
scotty_guess_which
scotty_intro
scotty_lets_harden
scotty_make_ye_guess
scotty_noo_jist
scotty_perhaps_the_rules
scotty_pick_some_treasure
scotty_shall_we_up
scotty_we_have_wee_use
scotty_well_met
scotty_well_then
scotty_wizard
scotty_wrong_choice
scotty_hell_be_back
scotty_out_of_treasure
scotty_there_he_is
nagaraja_choir
mushroom_boss_split
ant_hill
treasure_drop_common
treasure_drop_epic
treasure_drop_giant
treasure_drop_humble
treasure_drop_rare
dominotaur_awake
fire_geyser
ice_pillar
treasure_item_cyan
treasure_item_yellow
treasure_item_green
treasure_item_blue
treasure_item_red
treasure_item_rainbow
ki_slerper_walk
mindstone_found
ghost_tomb_death
perfected_fly_start
perfected_fly_loop
perfected_fly_end
shop_door_open
shop_door_enter
scorpion_death
bomb_cart_explosion
bomb_cart_fuse
bomb_cart_move
bronze_gate_close
poison_powerup
acronian_cultist_power_up
giant_ice_elemental_attack
scout_dialog
morel_punch
falling_stonefolk
scout_arrives
scout_leaves
scout_wing
scout_focus
dog_bark
frog
lost_item_boost
treasure_item_lost
blade_glow
blade_pallas_attack
blade_raise
blade_drag
auggie_voice
pallas_voice
quest_stone_jump
quest_stone_unlock
bardiche_cast
boo_voice
quarterstaff_cast
air_hiss
bang_go_forward
fire_orbs
open_note
talisman_reveal
fire_beast_1
fire_beast_2
uulaa_voice
mask_summon_1
mask_summon_2

▲ 上に戻る


·:·:· 付録 B - 音楽 ·:·:·

Stonescriptは、カスタムロジックに基づいてゲームの音楽トラックを再生することができます。
利用可能なトラックはプラットフォームに依存します。

?loc.begin | loc.loop
  music.Play(temple_0)

以下はStone Story RPGで利用可能な音楽の完全なリストです:

Boiling Mine
bronze_guardian_3
bronze_guardian_4
bronze_guardian_5
bronze_guardian_cyan
bronze_mine_0
bronze_mine_1
bronze_mine_2
bronze_mine_3
bronze_mine_4
bronze_mine_5
bronze_mine_cyan
slave_outro_climb
slave_outro_loop

Caves of Fear
caustic_caves
spider_boss

Deadwood
cross_deadwood_river
cross_deadwood_wind
deadwood_0
deadwood_1
deadwood_2
deadwood_3
deadwood_4
deadwood_5
deadwood_cyan
tree_boss
waterfall_descent
poena

Haunted Halls
skeleton_boss
undead_crypt_0
undead_crypt_1
undead_crypt_2
undead_crypt_3
undead_crypt_4
undead_crypt_5
undead_crypt_cyan
undead_crypt_intro

Icy Ridge
bridge_broken
bridge_crossing
icy_ridge_0
icy_ridge_1
icy_ridge_2
icy_ridge_3
icy_ridge_4
icy_ridge_5
icy_ridge_cyan
yeti

Mushroom Forest
fire_loop
fungus_forest_0
fungus_forest_1
fungus_forest_2
fungus_forest_3
fungus_forest_4
fungus_forest_5
fungus_forest_cyan
mushroom_boss
mushroom_boss_cyan
shop

Rocky Plateau
rocky_plateau_0
rocky_plateau_1
rocky_plateau_2
rocky_plateau_3
rocky_plateau_4
rocky_plateau_5
rocky_plateau_epilogue
rocky_plateau_fight
rocky_plateau_talk

Temple
nagaraja
temple_0
temple_1
temple_2
temple_3
temple_4
temple_5
temple_cyan

Events
event_fall
event_hamartia
event_spring
event_stonejam
event_summer
event_winter

Other credits
main_menu
bone_factory
osteophone
uulaa

▲ 上に戻る


·:·:· 付録 C - 環境音 ループ ·:·:·

Stonescriptは、カスタムロジックに基づいて複数の背景アンビエントオーディオレイヤーを再生することができます。

?loc.begin
  ambient.Stop()
  ambient.Add(ambient_crypt)

以下はStone Story RPGで利用可能なアンビエントオーディオの完全なリストです:

ambient_mines
ambient_caves
ambient_bronze_gate
ambient_deadwood
ambient_mushroom
ambient_bridge
ambient_icy
ambient_cave
ambient_rocky
ambient_temple
ambient_crypt
ambient_haunted_gate
ambient_pallas
waterfall_a
waterfall_b
waterfall_c

▲ 上に戻る


> Stone Story RPGの案内へ戻る

*1:全角スペースはエラーになります