_ ______________________ _ ,:´ \____ __.---,. `. :.! __________\_______\__`--`´__ \ :' \ \--------------------------.\ \ ':' · \ ·:. :'· :.:· \\ \ ':' \ \ :·' :·:. \\ \ ':' · \ .: ·:: '.:. ':'··:. \\ \ ':' \ \ · :.. \\ \ ':' · \ :·: ..': :·:. ·:: '. \\ \ ':' \ \__________________________\\ \ ':' ` . \ . ) ':' . . . \ . . . . ' . . . . \ . .; `·.;,;,;,;,;,;,;,;,;,;,;,;,;,;,:'
Mind Stoneを使用して装備の選択を自動化するために使用されるStonescriptは、Stone Story RPG内で利用できるミニマリスティックでありながら強力な言語です。
Stonescriptを初めて使う場合は、「Mind Stone入門」チュートリアルから始めることを検討してみてください。
ヘルプが必要ですか?スクリプトの共同作業を希望しますか?Discordを訪れてください。
このマニュアルは、利用可能なすべてのStonescript機能に関する包括的なリファレンスです。
ほとんどの例はMind Stoneに直接コピー/ペーストできます。これはそれらがどのように動作するかを学ぶ素晴らしい方法です。
- ·:·:· 例 ·:·:·
- ·:·:· 基本事項 ·:·:·
- ·:·:· ゲームの状態 ·:·:·
- ·:·:· コマンド ·:·:·
- ·:·:· 検索フィルター ·:·:·
- ·:·:· 比較 ·:·:·
- ·:·:· variables(変数) ·:·:·
- ·:·:· 数学演算 ·:·:·
- ·:·:· function(関数) ·:·:·
- ·:·:· ネイティブfunction(関数) ·:·:·
- ·:·:· 外部スクリプトのインポート ·:·:·
- ·:·:· ASCIIアート ·:·:·
- ·:·:· ループ ·:·:·
- ·:·:· 配列 ·:·:·
- ·:·:· カスタム入力 ·:·:·
- ·:·:· ユーザーインターフェース ·:·:·
- ·:·:· ヒント ·:·:·
- ·:·:· デフォルトスクリプト ·:·:·
- ·:·:· ロードマップ ·:·:·
- ·:·:· 付録 A - 効果音 ·:·:·
- ·:·:· 付録 B - 音楽 ·:·:·
- ·:·:· 付録 C - 環境音 ループ ·:·:·
·:·:· 例 ·:·:·
// 岩の高原でシャベルを装備します。
// 恐怖の洞窟では、ロードアウト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)" の値として、potion
、P
、left
、L
、right
、R
が使用できます。
activate R // (右手に装備されたアイテムの能力をアクティブ化します。例: Hatchetのような)
brew (ingredients)
ポーションボトルを指定された材料の組み合わせで補充します。実行はランの開始時、time 0 でのみ実行されます。材料には stone
、wood
、tar
、bronze
が含まれ、+ で区切る必要があります。
材料名は英語または設定で選択した言語で書くことができます。
?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は座標のオフセットです。
#rrggbb
は16進数表記でのテキストの色です。
色は次の定数で設定することもできます:
#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
*1:全角スペースはエラーになります