新時代のソーサリアンを提案する

30周年を越えたソーサリアンの夢と妄想を語り続ける

ソーサリアンText 開発者向けマニュアル(シナリオ開発リファレンス)

以下は、ソーサリアン Text対応のシナリオデータ(フォルダー構造、データフォーマット、セーブデータ)の仕様をまとめたものです。

フォルダー構造

シナリオデータは、以下のフォルダー構造で配置してください(データサイズは推奨する上限値です)。

/シナリオコード … シナリオルート
├──scenario.xml ……………… シナリオデータ(後述)
├──/bgm  ……… BGM
│  ├──xxxxx.mp3  ………… 個々の楽曲(1mb)
│  └──/se … 効果音
│     └──xxxxx.mp3  … 個々の効果音(30kb)
└──/capture  … 挿絵
   └──xxxxx.png  ………… 個々の画像(100kb)

投稿の方法

シナリオを新規に投稿する場合は、トップフォルダーを圧縮して.zipファイルとしてお送りください。投稿先/方法等については、STextサイト(http://www.web-deli.com/sorcerian/next/stext.aspx)を参照してください。

挿絵について

  • ファイル名はアルファベット小文字+数字で統一してください
    • 「_」などの記号は利用できません。
  • 1シーンに複数のイラストがあっても構いませんし、複数シーンで同一のイラストを共有しても構いません。
  • ただし、読みやすさの観点から、1シーン複数イラストは避けることを推奨します。

シナリオコードについて

  • 公開時に管理者が決定するので、開発時は「test」固定で構いません。
  • ローカル環境でシナリオの動作を確認する場合には、トップフォルダーの名前が「test」であることを確認した上で、/stextフォルダー直下にコピーしてください。あとは、トップページの選択ボックスから[テストシナリオ]を選択することで、シナリオを起動できます。

http://www.web-deli.com/sorcerian/next/images_blog/stext_d_test.png

SGMLの基本構造

scenario.xmlは、SGML(Sorcerian Gamebook Markup Language)と呼ばれるXMLベースのマークアップ言語で記述します(文字コードUTF-8)。

以下は、SGMLで利用できる要素の一覧です。<scenario><scene>要素を除くすべての要素は省略可能です。「*」の付いた要素については属性を持つものです。SGMLリファレンスを参照してください。

<scenario>* ………… ルート要素
├──<init> ……… 初期化情報
│  ├──<constraint>* ……… シナリオ起動時に生成される種族/性別/年齢
│  ├──<bgm>*  ……………… シナリオに適用するbgm
│  └──<intro>*  …………… シナリオの紹介情報
├──<items> …… アイテム情報
│  └──<item>* ……………… 個々のアイテム(複数列挙可)
├──<flags> …… フラグ情報
│  └──<flag>* ……………… 個々のフラグ情報(複数列挙可)
├──<enemies> … 敵情報
│  └──<enemy>*  …………… 敵/罠の情報
├──<results> … 実績情報全体を括る
│  └──<result>* …………… 個々の実績情報(複数列挙可)
├──<licence> … ライセンス情報
│  └──<work>* ……………… 作品情報(複数列挙可)
└──<scene>*  …………………… シーン情報(複数列挙可)

シナリオデータのテンプレート(骨組み)は、Playground(https://www.web-deli.com/sorcerian/next/playground.aspx)に用意しています。ご利用ください。

SGMLリファレンス

SGMLで利用できる要素と属性の仕様をまとめています(属性のない要素については、配下の要素を束ねるだけのものなので、説明を割愛しています)。

<scenario>要素

シナリオデータのルート要素です。

title属性

シナリオのタイトルを表します。

プレイ画面の右肩に表示されるので、文字数は10~15文字程度が推奨です。

author属性

作者名を表します。

現在は利用していません。

xmlns:xsi、xsi:noNamespaceSchemaLocation属性

システム情報なので、テンプレートの設定をそのまま利用してください。

編集時の補助設定なので、実行時にはなくても問題ありません。

<constraint>要素

シナリオ起動時に生成される種族/性別/年齢を制限したい場合に指定します。

すべてを許容する場合は指定しません。

race属性

生成する種族を表します。

以下の値をカンマ区切りで列記してください。

  • FIGHTER
  • WIZARD
  • DWARF
  • ELF

sex属性

生成する性別を表します。

以下の値のいずれかを指定してください。複数は列記できません(双方許容する場合は指定しません)。

  • MALE
  • FEMALE

age属性

生成する年齢を表します。

以下の値をカンマ区切りで列記してください。

  • YOUNG
  • ADULT
  • OLD

<bgm>要素

シナリオで利用するメイン/エンディング曲を指定します。

以下は、属性値を指定する際の基本ルールです。

  • 拡張子「.mp3」を除いたベース名で指定します(例えば、battle01.mp3ではなく、battle01)。
  • 頭に「@」付きでシステム標準のBGMを意味します。
    • 利用できる.mp3ファイルの名前については、STextページよりUtility 01を確認してください(たとえば@field01、@castle01など)。
    • 特別な標準.mp3として無音を表す「@none」も利用できます。
    • 標準BGMについては、シナリオフォルダーに.mp3ファイルを格納する必要はありません。
  • 頭に「@」のないファイル名は、シナリオフォルダー配下の/bgmフォルダーを見に行きます。対応する.mp3ファイルを準備してください。

■注意■

旧仕様では、シナリオフォルダーの配下に、bgm_happy.mp3、bgm_bad.mp3、bgm_boss.mp3のような名前で格納していましたが、今後は/bgmフォルダー配下にhappy.mp3、bad.mp3、boss.mp3となります。できるだけ短い名前で表すのが望ましいでしょう。

main属性

メインテーマを表します(既定はmainです)

happy属性

ハッピーエンドの曲を表します(既定はhappy)

bad属性

バッドエンドの曲を表します(既定はbad)

<intro>要素

シナリオの紹介情報を表します。

description属性

ゲーム画面上の[Tweet]ボタンに反映される紹介文を表します(既定ではSText共通のメッセージが適用されます)。

シーン上で、${tweet}~${/tweet}を指定した場合には上書きされます。

<item>要素

個々のアイテム定義を表します。

id属性

アイテムコードです(シナリオ内部で一意でなければなりません)。

接頭辞「i」+「番号」で表します。

name属性

アイテムの名前を表します。

#text

アイテムの説明を表します。 ステータス画面で表示されるので、15文字程度を推奨します。

<flag>要素

個々のフラグ定義を表します。

id属性

フラグコードです(シナリオ内部で一意でなければなりません)。

接頭辞「f」+「番号」で表します。

#text

フラグの表示名を表します。

シナリオの分岐スイッチとしてだけでなく、ステータス画面にあらすじとして表示する用途でも利用します。分岐の不要な箇所でも、物語の要所要所で設定しておくことをお勧めします(文字数は15文字程度を推奨)。

テキスト先頭が「*」で始まる場合には、ステータス画面に表示されない隠しフラグとなります。あとで<scene>要素のflags属性で削除できるのも、隠しフラグだけです。

<enemy>要素

個々の敵/罠定義を表します。

id属性

敵コードです(シナリオ内部で一意でなければなりません)。

接頭辞「m」+「番号」で表します。

name属性

敵/罠の名前を表します(10文字程度を推奨します)。

element属性

敵/罠の属性を表します。

以下のいずれかを指定してください(無指定の場合は無属性と見なされます)。

  • earth(地)
  • fire(火)
  • water(水)
  • wind(風)
  • spirit(霊)

attack属性

攻撃の種類を表し、どのステータスにダメージを反映するかを決定します(free1~3の意味は、シナリオによって異なります)。

以下のいずれかを指定してください。 いずれの値でもない場合は、(アイコン表示ではなく)文字列がそのまま表示されます。

  • physics(物理)
  • magic(魔法)
  • both(物理/魔法双方)
  • free1(FREE1)
  • free2(FREE2)
  • free3(FREE3)
  • poison(毒)
  • frozen(凍結)
  • stone(石化)
  • curse(呪い)
  • forget(忘却)

func属性

ダメージ式を表します。

(1)attack属性がphysics/magicの場合

ダメージ式は「nL+nR+n-nSTR-nINT-nDEX-nKRM-nFREE1-nFREE2-nFREE3」で統一(Lは左のダイス値、Rは右のダイス値)。ただし、以下の制約があります。

  • nは任意の数値
  • 符号(̟プラスマイナス)は差し替え可能
  • すべての項は省略可能&順番も入れ替え可能
  • カッコは利用できない

(2)attack属性が状態異常の場合

回避条件を「[exp]>[exp]」の形式で指定する([exp]はダメージ式と同様の形式)。 回避条件を満たさなかった場合にだけ、指定の状態異常が付与されます。

■注意■

以前の仕様では、WIZARD(魔法使いの時に回避)のような記述を許容していましたが、利用されていないようだったので、廃止しています。今後、ご要望次第でサポートを検討します。

以下は、その他の注意点です。

  • (1)(2)いずれの場合も、カンマ区切りで複数指定も可能です(その場合はランダムに式を選択します)。
  • ダメージ式/回避条件のステータスへの反映(自動計算)は、func属性の頭に「*」を付与することで無効化できます(自動化ができないシナリオでは「*」を付与してください)。

drop属性

ドロップアイテムを表します。以下は設定例です。

  • 「mon/3」で「月×3」(mon、tue、wed、thu、fri、sat、sunを利用可能)
  • 「free1/50/50Gold」で「50Gold」(「free1:50」は「free1を50加算の意)

任意の属性で、無指定の場合はelement属性からドロップアイテムを確定します。

#text

敵/罠の説明文です。

プレイ画面で敵リストをクリックした時にトースト表示される文言なので、最大でも50文字程度を推奨します。

<result>要素

個々の実績情報を表します。

id属性

実績コードです(シナリオ内部で一意でなければなりません)。

接頭辞「r」+「番号」で表します。

name属性

実績名を表します(ex. ガジガジネズミ)。

level属性

難易度を表します。指定できるのは1~5の値です。

#text

実績の成立条件を表します(ex. 隧道でネズミに食い殺された)

<work>要素

シナリオ内部で利用している画像/楽曲のライセンス情報を表します。

シナリオ終了時(ハッピー/バッドエンドを問わない)に、ブラウザーのコンソール画面にリスト表示される情報です。

name属性

category属性が...

  • bgmの場合は曲名
  • pictureの場合は利用場所(街、酒場など)

を表します。

category属性

作品の分類を表します。以下のいずれかを指定してください。

  • bgm(楽曲)
  • picture(画像)

creator属性

作者/サイト名を表します。

url属性

作品の公開サイト(URL)を表します。

<scene>要素

各シーンの情報を表します。シナリオ本体です。

id属性

シーン番号を数字で表します(シナリオ内部で一意でなければなりません)。

連番でなくても構いませんが、スタートは0固定で、プロローグでなければなりません。

items属性

そのシーンに移動した時に入手できるアイテムを表します。

カンマ区切りで複数列挙できます。「-i~」で、指定のアイテムを喪失します。

flags属性

そのシーンに移動した時に立つフラグを表します。

カンマ区切りで複数列挙できます。「-f~」で、指定のフラグを喪失します(ただし、破棄できるのは隠しフラグだけです)。

enemies属性

そのシーンで登場する敵/罠情報を表します。プレイ画面下部に敵リストを生成するのに利用されます。

カンマ区切りで複数列挙できます。

■注意

STextの内部的な理由で、敵情報は移動ボタンが存在しないシーンでは表示されません。一般的に移動ボタンのないシーンはないはずですが、デバッグ時などは注意してください。

stars属性

そのシーンに移動した時に加算/減算する<七惑星の欠片>を表します。指定できる形式は、以下の通りです。

  • 月~太陽の順で「9,9,9,9,9,9,9」のカンマ形式(途中省略は不可)
    • 負数指定も可(ただし、減算の結果が負になった場合はゼロ丸めされます。減算の際はシナリオ側で矛盾が生じないようにしてください)
  • 「divN」ですべての星を1/Nにもできる(小数点以下切り捨て)

hp/mp属性

そのシーンに移動した時に加算/減算するhp、mp値を表します。指定できる形式は、以下の通りです。

  • 「-5」「5」のような定数
  • 「-10..-1」の範囲指定(範囲内で乱数が生成されます)
  • 「full」で上限値がセットされます

ただし、自動更新によって上限を超えた場合には上限で丸められます。

free1/free2/free3属性

そのシーンに移動した時に加算/減算するfree1~3の値を表します。負数も指定できます。

result属性

そのシーンに移動した時に取得できる実績を表します。複数指定はできません。

bgm属性

そのシーンに移動した時に、指定されたBGMに切り替えます(詳細は<bgm>要素も参照してください)。

bgm/end属性が同時に指定された場合は、bgm属性で指定された曲が優先されます。

se属性

そのシーンに移動した時に、指定された効果音を再生します。

「se.mp3」であれば、「se」と指定します。

end属性

そのシーンがエンディングシーンであるかを表します。end属性が指定された場合、STextはゲームを終了し、セーブデータを初期化します。

指定できる値は、以下の通りです。

  • happy(ハッピーエンド)
  • bad(バッドエンド)

#text

シナリオ本文をMarkdown形式で表します。詳細なルールは後述します。

シナリオ本文の記法(SGML拡張)

<scene>要素の本体(#text)は、Markdownを拡張したSGML拡張で表します。

Markdownとは?

Markdown形式は、ブログなどに利用される簡易なテキストフォーマットです。簡単な文字修飾をはじめ、画像の埋め込みや表組み、リンク、箇条書きリストなどが可能です。詳しくは、以下のようなページを参考にしてください(標準的なMarkdownの記法については、本マニュアルでは扱いません)。

http://kojika17.com/2013/01/starting-markdown.html

ほぼ対応しているはずですが、一部の機能が非対応の可能性もあるので、ご了承くださいm(__)m

SGMLリンク(移動ボタン)

SGMLでは、以下のような拡張構文で移動ボタンを作成できます。

[ボタンキャプション](リンク先番号)

 ▼

[冒険に出発する](1)

更に、フラグ/アイテムなどの有無によって、移動ボタンの表示/非表示を制御できます。

■Note■

以降で登場する「!」と「-」は、現時点では同じく否定を意味します。
ただし、「-」は古い構文なので、いずれ削除するかもしれません。

(1)フラグがある/ない場合のみ表示

[ボタンキャプション](リンク先番号 "フラグコード")
[ボタンキャプション](リンク先番号 "!フラグコード")
[ボタンキャプション](リンク先番号 "-フラグコード")

 ▼

[フラグ確認用1](12 "f1")
[フラグなし確認用1](12 "!f1")
[フラグなし確認用1](12 "-f1")

(2)アイテムがある/ない場合のみ表示

[ボタンキャプション](リンク先番号 "アイテムコード")
[ボタンキャプション](リンク先番号 "!アイテムコード")
[ボタンキャプション](リンク先番号 "-アイテムコード")

 ▼

[アイテム確認用1](12 "i1")
[アイテムなし確認用1](12 "!i1")
[アイテムなし確認用1](12 "-i1")

(3)魔法を利用できる/できない場合のみ表示

[ボタンキャプション](リンク先番号 "m魔法名")
[ボタンキャプション](リンク先番号 "!m魔法名")
[ボタンキャプション](リンク先番号 "-m魔法名")

 ▼

[魔法確認用(HEAL)](12 "mHEAL")
[魔法なし確認用(HEAL)](12 "!mHEAL")
[魔法なし確認用(HEAL)](12 "-mHEAL")

魔法ボタンでの移動時には、自動的に対応する星が減算されます。

(4)ステータスが指定値を上回っている/下回っている場合のみ表示

[ボタンキャプション](リンク先番号 "o[ステータス種別][値][+/-]")
[ボタンキャプション](リンク先番号 "!o[ステータス種別][値][+/-]")
[ボタンキャプション](リンク先番号 "-o[ステータス種別][値][+/-]")

 ▼

[STRが5より大きい場合のみ表示](12 "oSTR5+")

[HPが50未満の場合のみ表示](12 "oHP50-")

ステータス種別にはSTR、INT、DEX、KRM、HP、MP、FreeI、FreeII、FreeIIIを指定可能です。

(5)キャラの基本情報が合致している/していない場合のみ表示

[ボタンキャプション](リンク先番号 "x情報")
[ボタンキャプション](リンク先番号 "!x情報")
[ボタンキャプション](リンク先番号 "-x情報")

 ▼

[種族がFIGHTER](41 "xFIGHTER")
[種族がFIGHTERでない](41 "!xFIGHTER")
[種族がFIGHTERでない](41 "-xFIGHTER")
[性別がMALE](41 "xMALE")
[年齢がOLD](41 "xOLD")
[状態異常がFROZEN](41 "xFROZEN")
[職業がのうふ](41 "xのうふ")

情報には、以下のものを指定可能です。

  • 種族(FIGHTER/WIZARD/DWARF/ELF)
  • 性別(MALE/FEMALE)
  • 年齢帯(YOUNG/ADULT/OLD)
  • 状態異常(POINSON/FROZEN/STONE/CURSE/FORGET)
  • 職業(のうふ/こじきなど。ひらがな/カタカナ表記)

(6)個々の星を指定数以上、所持している/いない場合のみ表示

[ボタンキャプション](リンク先番号 "s月:...:太陽")
[ボタンキャプション](リンク先番号 "!s月:...:太陽")
[ボタンキャプション](リンク先番号 "-s月:...:太陽")

 ▼

[星が各7以上](2 "s7:7:7:7:7:7:7")
[星の各7以上ない](2 "!s7:7:7:7:7:7:7")
[星の各7以上ない](2 "-s7:7:7:7:7:7:7")

(7)星の所持総数が指定数以上である/ない場合のみ表示

[ボタンキャプション](リンク先番号 "s総数")
[ボタンキャプション](リンク先番号 "!s総数")
[ボタンキャプション](リンク先番号 "-s総数")

 ▼

[星の総数49以上](2 "s49")
[星の総数49未満](2 "!s49")
[星の総数49未満](2 "-s49")

(8)実績がある/ない場合のみ表示

[ボタンキャプション](リンク先番号 "実績コード:シナリオコード")
[ボタンキャプション](リンク先番号 "!実績コード:シナリオコード")
[ボタンキャプション](リンク先番号 "-実績コード:シナリオコード")

 ▼

[実績確認用(r01:scepter)](12 "r01:scepter")
[実績なし確認用(r15:tempest)](12 "!r15:tempest")
[実績なし確認用(r15:tempest)](12 "-r15:tempest")

(9)複合条件式

(1)~(8)の条件を複合的に組み合わせ可能です。 組み合わせに際しては、以下の演算子を利用できます。

  • !(否定)
  • &(かつ)
  • |(または)

演算子の優先順位は「!」>「&」>「|」ですが、カッコで括った場合には、そこが最優先となります。

[複合条件1](1 "f01&f02&f03") … f01~03全て揃っている
[複合条件2](1 "!(f01&f02&f03)") … f01~03のいずれかが揃っていない
[複合条件3](1 "(i01|i02)&!f01") … i01、02いずれかを所持、かつ、f01がない
■Note■

複合条件式の導入に伴って、以下の(10)(11)は非推奨とします。
すぐには機能削除はしませんが、新規の執筆では極力、(9)の構文を利用するようにしてください。

(10)指定された条件をすべて満たしている場合のみ表示(カンマ区切り)[非推奨]

利用できる条件は以下の通りです(異種混在も可)

  • フラグ/アイテムを所有している
  • 魔法を利用できる
  • 実績を保持している
  • ステータス条件を満たしている
  • 基本情報が合致している
[ボタンキャプション](リンク先番号 "フラグ/アイテムコード/m魔法/o条件...")

 ▼

[マルチフラグ確認用1](12 "f1,f2,f3")
[マルチアイテム確認用1](12 "i1,i2")
[マルチ魔法確認用1](12 "mHEAL,mCURE")
[マルチステータス確認用1](12 "oSTR5+,oHP50-")
[マルチ実績確認用1](51 "r01:scepter,r02:tempest")
[混合例確認用1](51 "r01:scepter,mHEAL")

(11)指定された条件のいずれかを満たしていない場合のみ表示[非推奨]

利用できる条件は(9)に準じます(異種混在も可)。

[ボタンキャプション](リンク先番号 "-フラグ/アイテムコード/m魔法/o条件,...")

 ▼

[マルチフラグなし確認用1](12 "-f1,f2,f3")
[マルチアイテムなし確認用1](12 "-i1,f2,i3")
[マルチ魔法なし確認用1](12 "-mHEAL,mCURE")
[マルチステータスなし確認用1](12 "-oSTR5+,oHP50-")
[マルチ実績なし確認用1](51 "-r01:scepter,r02:tempest")
[混合例確認用1](51 "-r01:scepter,oSTR5+")

(12)シーン番号を入力しての移動を可能にする場合

以下のように、リンク先をX、キャプションに移動可能なシーン番号をカンマ区切りで列挙したリンクを用意します(任意移動リンクはシーンにひとつしか設置できません)。

[10,11,12](X)

(13)入力文字列を判定して正否によって分岐

以下のように、リンク先をQ、キャプションを「正答,正しい時の移動先,間違った場合の移動先」としたリンクを用意します(文字列入力リンクはシーンにひとつしか設置できません)。

[グーラン,11,12](Q)

上の例では、「グーラン」と入力した場合には11へ、さもなければ12へ移動します。

(14)ランダムな移動を可能にする場合

以下のようにリンク先番号をカンマ区切りで列挙することもできます。この場合、リンク先はその時どきにランダムで決まります。

[ランダムリンク](1,2,3)

SGML

SGMLでは、Markdownを拡張して、テキストのカラーリングや式の埋め込みにも対応しています。

式埋め込み

${...}の形式で、テキストの任意の箇所に式の埋め込みが可能です。利用可能な式は、以下の通りです。

  • ${title} … 称号
  • ${name} … キャラクターの名前
  • ${race?人間:魔法使い:ドワーフ:エルフ} … 種族に応じて単語を置き換え
  • ${sex?男:女} … 性別に応じて単語を置き換え
  • ${state?正常:毒:凍結:石化:忘却} … 状態異常に応じて単語を置き換え
  • ${age?若者:中年:老人} … 年齢帯に応じて単語を置き換え
  • ${rand?1:20} … 指定の値範囲で乱数を生成
  • ${msg?こんにちは:おはよう:こんばんは} … 指定のメッセージをランダムに選択

「?」以降は、「:」区切りで表示すべき任意の単語を指定できます。

フォーム要素の埋め込み

${...}の形式で、本文中にテキストボックスなどのフォーム要素を埋め込むことが可能です。

  • ${input?0}

[+][-]ボタン付きの数値入力ボックス。引数は初期値。 セーブデータなどには反映されないので、シーン内でのメモ用途です。

■Note■

現時点では、数値ボックスのみの対応ですが、将来的にボタン、チェックボックスなどを追加の予定です。

条件分岐

${if xxx}~${/if}の形式で、テキスト内に条件付きで表示するテキストを指定できます。xxxには移動ボタンで利用可能なすべての条件式を利用できます(「-」否定、複合などにも対応)。

${if f04}
フラグ04が立っている時にだけ表示されます。
${/if}

ルビ指定

${元の文字列|ルビ}の形式で、ルビの指定も可能です。

俺は${銀狼|silver wolf}だ!

テキストのカラーリング

%blue%~%/%でテキストを囲むことで、任意のテキストにカラーリングも可能です。

みんな、%blue%ソーサリアン%/%だ!

ただし、現時点では以下の制約があります。

  • 現在利用できるカラーは、blue、red、purple、whiteのみです(whiteはテキスト選択でのみ反転表示される非表示テキストの用途が目的)。
  • カラーリングしたテキストの前後には、半角スペースが入ります。

ツイートボタンへの反映

${tweet}~${/tweet}で、任意のテキストを括ることで、その内容を[ツイート]ボタンに反映できます。以下は制約事項です。

  • ${tweet}配下では、Markdownによる修飾はできません。
  • ${tweet}はひとつのシーンでひとつしか利用できません(複数は上書き)。
  • 指定されていないシーンでは、init-intro要素での設定値が利用されます。
  • 指定したシーンでは、intro要素での設定値は上書きされます。

■Note■独自サイトでSTextを運用する方向け

ツイートボタン機能を利用するには、「class="socialbtn twitter"」「class="socialbtn twitter_custom"」である要素をページの任意の箇所に配置してください。[ツイート]ボタンのプレイスホルダー(表示領域)となります。

※公式のSTextサイトでシナリオ公開する方には関係ありません。

セーブデータ

本項の内容はシナリオ開発には特に関係ありません。システム改定提案の材料にご利用ください。

セーブデータは以下の2種類です。いずれもJSON形式でWeb Storageに保存され、次回起動時に復帰できます。

  • シナリオを跨いだ「グローバルセーブデータ」
  • シナリオ単位に設置される「ローカルセーブデータ」

グローバルセーブデータ

  • 初回のシナリオ生成時に生成され、複数のシナリオ間で共有されます。
  • キーは固定で「sorcerian_text」

以下はセーブデータの構造です。

├──items ………… シナリオ終了時に得られるアイテム(シナリオ共通で累積される)
├──results ……… 実績情報(「シナリオid: 実績リスト」の形式)
├──panel ………… コントロールパネルは表示状態か
└──bgm …………… BGMを再生するか

ローカルセーブデータ

  • 個々のシナリオ開始時に生成され、シナリオ固有の情報を管理します。
  • シナリオ開始時にキャラは自動生成(「ソーサリアンになったったー」のイメージ)
  • 基本ステータスは種族/性別で決定(別表の基準値をもとにランダム決定)
  • キーは「シナリオコード」

以下はセーブデータの構造です。

├──chara …………………… キャラ情報
│  ├──title …………… 称号
│  ├──name  …………… 名前
│  ├──race  …………… 種族
│  ├──sex ……………… 性別
│  ├──age ……………… 年齢帯(YOUNG/ADULT/OLD)
│  ├──job ……………… 職業
│  ├──state …………… 状態異常
│  ├──stone_scene …… 石化の経過シーン数
│  ├──forget_scene  … 忘却の経過シーン数
│  ├──hp_m  …………… HP上限
│  ├──hp  ……………… HP現在値 
│  ├──mp_m  …………… MP上限
│  ├──mp  ……………… MP現在値
│  ├──str_i …………… 強さ初期値(0~10)
│  ├──str ……………… 強さ現在値(0~10)
│  ├──int_i …………… 賢さ初期値(0~10)
│  ├──int ……………… 賢さ現在値(0~10)
│  ├──dex_i …………… 器用さ初期値(0~10)
│  ├──dex ……………… 器用さ現在値(0~10)
│  ├──krm_i …………… 魅力初期値(0~10)
│  ├──krm ……………… 魅力現在値(0~10)
│  ├──free1 …………… 自由ステータス1
│  ├──free2 …………… 自由ステータス2
│  └──free3 …………… 自由ステータス3
├──stars …………………… 所持している七惑星の欠片(月~太陽の個数を配列で)
├──items …………………… 所持しているアイテム(配列)
├──flags …………………… 所持しているフラグ(配列)
├──memos …………………… 冒険メモ(自由入力欄)
├──scene …………………… 現在のシーン
├──ellapsed_scene  ……… 経過したシーン数
├──bgm ……………………… 現在再生中のBGM(空文字列はメインテーマ)
├──bonus …………………… 現在のシナリオで適用されるボーナス
└──isEnded ………………… エンディングに到達しているか