script language for game machine (documents are written in Japanese)
License
FUKUZAWA-Tadashi/Hayat
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
-*- coding: sjis-dos; -*- スクリプト言語 Hayat 「ハヤット」と読みます。 クラスベースの動的型オブジェクト指向スクリプト言語です。 ゲーム機上で動作するように作成されました。 Rubyを参考にして作ったので、Rubyに似ています。 例えばこんなスクリプトを書けます: 男 = new Person("宇絵夫") 女 = new Person("久家子") 3.times { 男「愛してるよ、{女.name}」 女「わたしもよ、{男.name}」 } ゲームスクリプターには理解しやすいのではないでしょうか。 receiver「string1{value}string2」 という形式は、 ヒアドキュメントに似て非なるsayCommandという仕組みです。 「 」 の替わりに << >> を使って receiver<<string1{value}string2>> とも書けます。 他言語のヒアドキュメントでは、全てが文字列に変換されて結合される訳ですが、 Hayatでは要素毎に逐次実行します。 内部的に複数のメソッド呼び出しに分解され実行されます。 receiver.sayCommandStart(1,1) // 通し番号、行数 receiver.sayCommand(string1) receiver.sayCommand(value) receiver.sayCommand(string2) receiver.sayCommandEnd() プログラマは、sayCommandStart, sayCommand, sayCommandEnd を定義した クラスを用意します。 これにより、途中で文字の色を変えたりサイズを変えたりといった動作が わかりやすく記述できます。 アインシュタイン「人生は{青}退屈すれば長く{白}、 {赤}充実すれば短い{白}。」 これは以下の動作となります。 アインシュタイン.sayCommandStart(1,2) アインシュタイン.sayCommand("人生は") アインシュタイン.sayCommand(青) アインシュタイン.sayCommand("退屈すれば長く") アインシュタイン.sayCommand(白) アインシュタイン.sayCommand("、\n") アインシュタイン.sayCommand(赤) アインシュタイン.sayCommand("充実すれば短い") アインシュタイン.sayCommand(白) アインシュタイン.sayCommand("。") アインシュタイン.sayCommandEnd() sayCommand内で、BLUE,RED,WHITE などの値を解釈するようにしておけば 良いのです。 enum { 白, 青, 赤 } // 0,1,2 class Person def sayCommandStart(serialNo, numLines) {} def sayCommand(x) { if (x.getClass() == Int) Font.setColor(x) else myGamePrintString(x) } def sayCommandEnd() {} end ======== その他の特徴 ======== ●インタプリタではない コンパイラにてバイトコードにコンパイルしてから、エンジンで実行します。 しかし、実行中にバイトコードの差し替えができるので、インタプリタと同様に 動作中にスクリプトの挙動を変更する事ができます。 ●動作環境 過去動作した事のある環境は以下の通り: linux cygwin Microsoft VisualStudio 2008 Nintendo DS SONY PSP SONY PS3 なお、linux、cygwin、VisualStudio以外は、機種依存コードを同梱していません。 ●C++にて作られている 今時C言語しか使わないプロジェクトも無いかと思います。 実機上で動作する部分では、boostやSTLなどのテンプレートライブラリを使用していません。 コンパイラも実機上で動かす可能性があったので、同様です。(動かした事はありません) 独自開発のPEGパーサジェネレータを使用しています。 STL使用禁止プロジェクトでも動作させる事ができます。(そんなプロジェクトがあるのか?) ●フレーム単位の実行 ゲーム機上での動作を主眼として、フレーム単位での処理を前提としています。 1tick毎に、 Hayat::Engine::gThreadManager.exec1tick(); を呼んでもらいます。 OSネイティブスレッドに対応していません。 マルチスレッドセーフではありません。 Hayat標準ライブラリのThreadクラスは、エンジン内部でフレーム単位での 動作切り替えをサポートするクラスです。 ●文字コード スクリプトで使用する文字コードとして UTF-8, SJIS, EUCJP を使用できます。 バイトコードに出力する文字コードとして UTF-8, SJIS, EUCJP を指定する事が できます。スクリプトとバイトコードで文字コードが異なる場合には、コンパイラが 変換します。 識別子に全角文字を使用する事ができます。 スペース文字として、全角スペースを使用する事ができます。 ●インクリメンタルGCを実装 GCはインクリメンタルに実行しますので、時々コントロールできないタイミングで GCの処理が重くなって処理落ちするといった事は少ないはずです。 ●実行速度が遅い パフォーマンスチューニングをしていません。Ruby1.8より倍くらい遅いかと。 特にメソッド検索が遅い事はわかっているので、まずはメソッドオーバーロードの 仕組みを無くすか簡略化すべきとは思っています。 しかしそれでも、DS上で動作するアドベンチャーとかボードゲームなどでは 十分処理は間に合っていました。 ●名前の由来 出身地のお寺「光前寺」に伝わる「霊犬早太郎の伝説」から名前の一部を頂いて Hayat としました。 ●今後 ゲーム業界から足を洗ってしまったので、今後のサポートを期待されても あまり対応出来ないかと思います…。 xtal とか squirrel とかが sayCommand の仕組みを入れて識別子に全角を 使えるようになれば、そっちを使う方が良いだろうと思います。 ●ライセンス MITラインセンスです。 どんどん改造して無断で有料ソフトにて使用してもかまいません。 無保証です。 Copyright (c) 2011 福澤 正 alien@apple.nifty.jp
About
script language for game machine (documents are written in Japanese)
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published