#simutrans Squirrel API(と簡単なサンプルの適当な訳)

投稿者: | 2016年11月11日

http://dwachs.github.io/simutrans-sqapi-doc/

Squirrel APIの説明が掲載されているようです。

さっと読んでみましたが中々初心者には難しいようで。


http://dwachs.github.io/simutrans-sqapi-doc/page_script_mill.html
As first the savegame is specified:
まずは1つ目の例
map.file = “millionaire.sve”
セーブするファイル名の指定

Then we provide some meta-information about the scenario
scenario.short_description = “Millionaire”
scenario.author = “prissi (scripting by Dwachs)”
scenario.version = “0.1”
シナリオについての簡単な説明
short_descriptionはいわゆる概要
authorは作者
versionはバージョンを表します。

Rules and goals are not that special. The texts returned in this functions will be shown in the scenario info window. String constants with leading ‘@’ can span multiple lines.
function get_rule_text(pl)
{
return ttext(“No limits.”)
}
function get_goal_text(pl)
{
return ttext(“Become millionaire as fast as possible.”)
}
function get_info_text(pl)
{
return ttext(“You started a small transport company to become rich. Your grandparents did not have a glue, where all their money flows into.”)
}
get_rule_textはルール条件の文章
get_goal_textはゴール条件の文章
get_info_textはその他情報の文章になっています。

The method presenting the result text is a little bit more advanced. If the player has enough cash, he has won the scenario.
The get_cash() method accesses the player’s bank account via player_x.cash, which is equivalent to calling player_x.get_cash().
function get_result_text(pl)
{
local cash = get_cash(pl)
local text = ttext(“Your bank account is worth {tcash}.”)
text.tcash = cash

local text2 = “”
if ( cash >= 1000000 )
text2 = ttext(“Congratulation!

You won the scenario!”)
else
text2 = ttext(“You still have to work a little bit harder.”)
return text + “

” + text2
}
結果用の文書みたいです。
player_xクラスのget_cash()で現在の資金を取得、1000000以上ならばシナリオ達成となります。

Last but not least, the function that computes the actual progress in the scenario. If it returns a negative value, the player has lost. If the return value is larger than 100, this is equivalent to winning the scenario.
function get_cash(pl)
{
return player_x(pl).cash[0]
}
最後にシナリオの実際の動作を指定するところです。
もしreturnがマイナスになれば負け、100以上なら勝ちとなります。

http://dwachs.github.io/simutrans-sqapi-doc/page_script_pharm.html
We will learn how to make the translation of the script’s output possible.
We do not care about the meta information, and jump right into the get_rule_text method.

いわゆる翻訳用の処理はこちら
function get_rule_text(pl)
{
return ttext(“You can build everything you like. The sky (and your bank account) is the limit.”)
}
This function does not return a plain string, it sends the string into an instance of ttext. When the simutrans program now fetches the text, it will magically translate it. This magic works only if there are translation files present.

These files must be placed in a directory with the same name as the scenario, in our case at pharmacy-max/ The translation files itself are plain text files with the naming convention iso.tab, where iso refers to the ISO abbreviation of the language (en, de, cz etc).

These text files have a simple line-oriented structure. Lets look into de.tab:

プレーンテキストではなくttextの文字列を代わりにreturnするようにします。simutransは翻訳用の処理が予め組み込まれているため、該当のファイルが存在すれば自動的に翻訳されます。
シナリオと同じフォルダにある時、今回はpharmacy-max/内にiso.tabがある時にISO内の言語を参照します(?)
これらのテキストは1列ごとのシンプルな構造です。de.tabを見てみましょう。

* You can build everything you like. The sky (and your bank account) is the limit.
* Alles ist erlaubt. Der Himmel (und das Bankkonto) ist die Grenze.
*


※訳が微妙なので注釈。
いわゆる翻訳ファイルと同じように、

基になる文章
翻訳後の文章

というフォーマットでscenario用の翻訳ファイルを作成します。
シナリオ名でディレクトリを作成し、その中に各種翻訳ファイルを入れます。

これだけで翻訳は完了です。


The first line is the string as it appears in the script, it will be mapped to the string in the following line. A German user thus will read ‘Alles ist erlaubt. Der Himmel (und das Bankkonto) ist die Grenze.’.

Similarly, the methods get_info_text and get_goal_text are implemented. Some interesting stuff however happens in get_result_text :

Do you see the strange {med} string in the text? Here, you can see variable substitution in action:

まずスクリプトの最初に”Alles ist erlaubt. Der Himmel (und das Bankkonto) ist die Grenze.”があります。
メソッドはget_info_textとget_goal_textを処理します。いくつかの特徴的なものはget_result_textに反映されます。
テキスト内に{med}という奇妙なものを見かけますね。これはスクリプト内で置換可能な文字列となっています。
function get_result_text(pl)
{
local con = get_medicine_consumption()
local text = ttext(“The pharmacy sold {med} units of medicine per month.”)
text.med = con

That means the text now gets to know the precise value of {med}.

When this text is transferred to simutrans (or when text.to_string() is called) the following happens:

First the translation of the string is searched, which can contain this {med} as well.
Then the occurrences of {med} are replaced by the concrete number. The user will then hear ‘The pharmacy sold 11 units of medicine per month.’.

Now a second string is created, which features some html-like tags.

つまりテキストは{med}の代わりにconが使われました。
simutransで翻訳する時には次のことが起こります。
・まず、翻訳で{med}という単語を持つテキストを探します。
・見つかった場合、{med}はconに格納されている値に置き換わります。例えば”pharmacyは一ヶ月に11個の医療品を売りました”みたいに。
また、テキストはhtmlのようにタグっぽく表示されます。({med}がそのまま?

local text2 = “”
if ( con >=120 )
text2 = ttext(“Congratulation!

You won the scenario!”)
else
text2 = ttext(“Still too few units.”)
return text.tostring() + “

” + text2.tostring()
}
この場合は
で改行。

Both of the strings are translated by means of calls to ttext::to_string and the result is returned.

Thats it. The remaining parts of this script are plain routine.

両方の文字列はttext::to_stringと結果時に出力されます。

これらのパーツは常に基本のルーチンとなります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です