Tuesday, May 2, 2017

「エイリアス」によるデータ操作


赤丸の部分でキャラクターに、「TEST01」というEditorIDをセット。
青の部分で、TEST01というEditorIDを持ったキャラクターの「エイリアス」を作成。
すると、紫の下線部分のような形で、データにアクセス可能に。

CreateCharacterAlias関数は、character[ EditorID(この場合"TEST01") ]を作って、それを戻り値として返しますcharacter[~]はグローバルに作られるので、戻り値を無視して、character["TEST01"]を使うのもアリです。見やすい方で。
player(黄色の下線)は、プレイヤーキャラクターへのエイリアスとして、ゲーム開始時に自動的に作成されます。

なぜ「エイリアス」を使うのかというと

ld25では、ほとんどのゲームデータはシステム(delphi)側に置いているんですが、Lua側とシステム側のメモリは、それぞれ独立していて、直接代入などで読み書き出来ないためです。
上の例で言うと、Lua側には各エイリアスの「Money」の実際のデータは存在しておらず、エイリアスは自身のMoneyパラメータにI/Oがあった時に、「スタックを使ってシステムと値のやりとりをする」関数を走らせて、システム側のエイリアスのターゲットキャラのMoneyデータに対して操作します。

とりあえず、そのエイリアスの動作確認ができたので、キャラクター以外のデータもそう出来るようにしていきます(キャラクターエイリアスもまだパラメータ全部は書き終わってないですが)。:D

No comments:

Post a Comment