LGP4 準備室
<目的>
1.実行系の強化 1.DirectX9に対応(特に3D処理の強化を目的とします)
2.関数コールの高速化(初バージョンからは機能ドロップしました・・・)
3.DLLコールの強化(初バージョンからは機能ドロップしました・・・)
2.言語系の強化 1.1命令を複数行に記述できるようにします
2.浮動小数点のサポート
3.変数の定義チェック機能の実装(初バージョンからは機能ドロップしました・・・)
3.ソースコードの整理 1.生成するバイナリの改善(486命令からPentium命令に変更)
2.最適化

色々とやりたいことはあるのですが、欲張りすぎで開発がこれ以上遅れるのは・・・なので、一部機能をドロップします・・・

>>LGP4 マニュアル(ver00.34)のダウンロードはここから<<
状況

2008/9/24 以下の問題を修正しました。
・カメラの向きによってビルボードの方角が正しく反映されない問題を修正しました。

ダウンロード >>LGP4 Ver00.48 <<

2008/9/13 以下の問題を修正しました。
・LGPが生成したexeファイルが正常に動作しない問題を修正しました。
・G3@FRMMAKEBOARDで生成したポリゴンが初期状態で裏を向いたいたものを、手前が表になるように方向を変更しました。

以下の機能を追加しました。
・ビルボード描画を行う「G3@FRMSETBILL」関数を追加しました。

そのた
・ビルボードのデモプログラムを添付しました。

ダウンロード >>LGP4 Ver00.47 <<

2008/9/8 以下の問題を修正しました。
・WHILE文の判定式による挙動が判定と逆という問題を修正しました。

以下の機能を追加しました。
・2D描画で描画の奥行きを指定できる関数「G@CHRCOPY2」「G@CHRCOPYF2」「G@CHRCOPYC2を追加しました。(これ前に公開しなかったけ?忘れてたか^^:)
・任意のサイズの四角形のポリゴンを作成する関数「G3@FRMMAKEBOARD」を追加しました。
・G3@FRMMAKEBOARDのポリゴンのキャラクタ番号を取得する関数「G3@FRMGETCHR」を追加しました。取得したキャラクタは2Dのキャラクタと同様に描画ができます。もちろん即画面に反映されます。
・指定したフレームを描画する3D空間上のXYZ座標を取得する関数「G3@FRMGETDATAMX」「G3@FRMGETDATAMY」「G3@FRMGETDATAMZ」を追加しました。
・指定したフレームを描画する2D空間上のXY座標を取得する関数「G3@FRMGETDATAX」「G3@FRMGETDATAY」を追加しました。

ダウンロード >>LGP4 Ver00.45 <<

2008/8/12 以下の問題を修正しました。
・G@FRMSETSCALE関数によるフレームの拡大縮小の演算方法を変更しました。多くの使用方法で意図しない動きとなるため。

以下のマニュアルの記述を変更しました。
・G3@FRMMAKETEXTの第2引数の意味を変更しました。
 変更前: size    :文字の大きさ
 変更後: deviation :文字の滑らかさ

 G3@FRMMAKETEXT関数では文字のサイズは指定できません。同じサイズのメッシュを生成します。大きさを変更して表示する場合は、G@FRMSETSCALE関数でサイズを変更してください。

ダウンロード >>LGP4 Ver00.44 <<

2008/7/18 以下の問題を修正しました。
・G@CHRMAKE関数で生成した画像をコピー元としてG@CHRCOPY関数等でコピーすると、透過色が反映されない問題を修正しました。
・G@CHRCOPYC関数で中心がぶれる問題を修正しました。
以下の仕様を追加しました。
・G@CHRMAKE関数に透過を指定する引数を追加しました。

ダウンロード >>LGP4 Ver00.43 <<

2008/6/26 以下の問題を修正しました。
・G@CHRSAVE関数で暗号化したファイルの読み込みに失敗することがある問題を修正しました。
・G@CHRSAVE関数の暗号化で異常終了することがある問題を修正しました。

ダウンロード >>LGP4 Ver00.42 <<

2008/6/9 以下の問題を修正しました。
・ラベルがGOTO文よりも後方に記述するとエラーとなる問題を修正しました。

ダウンロード >>LGP4 Ver00.41 <<

2008/5/21 以下の問題を修正しました。
・G@CHRLOADCKEY関数を指定すると抜き色が無効になる問題を修正しました。

以下の仕様を変更しました。
・3D描画でアニメーションの自動再生時間を更新するタイミングを変更しました。「変更前:G3@RENDER関数の実行時」→「変更後:G@FLIP関数実行後の最初のG3@REDER関数の実行時」

ダウンロード >>LGP4 Ver00.40 <<

2008/5/3 以下の問題を修正しました。
・2D描画にてG@CHRMAKE関数で生成したキャラクターパターンをコピー先としてG@CHRCOPY関数でコピーを行うと、コピーの結果が不正となる(グシャグシャの描画)問題を修正しました。

ダウンロード >>LGP4 Ver00.39 <<

2008/4/14 以下の機能を追加しました。
・3D描画でフォグ効果を与える関数G3@FRMSETFOGMODE関数等を追加しました。

ダウンロード >>LGP4 Ver00.38 <<

2008/3/31 以下の仕様を変更しました。
・2D描画で画像の拡大縮小、回転、反転の指定を組み合わせると、描画する位置が一定にならないため利用しづらかったため、描画の位置が一定になるように仕様を変更しました。

以下の機能を追加しました。
・2D描画で指定した座標が中心となるように画像を描画するG@CHRCOPYC関数を追加しました。

ダウンロード >>LGP4 Ver00.37 <<

2008/3/23 以下の問題を修正しました。
・配列の中で配列を記述すると正しい結果を取得できない問題を修正しました。
・2D描画で透明色を指定するG@CHRLOADKEY関数で不透明の指定が正しくきかない場合がある問題を修正しました。

以下の機能を追加しました。
・3D描画で読み込むテクスチャファイルで同一のテクスチャは重複して読み込まずに再利用するようになりました。(2D描画の画像ファイルは既に再利用しています)
・2D描画でキャラクターの色合いと半透明を指定するG@CHRCOLORA関数を実装しました。(実は昔から実装していたけどマニュアルに掲載してませんでした^^: なお今回仕様をちょっとかえました)
ダウンロード >>LGP4 Ver00.36 <<

2008/3/17 以下の問題を修正しました。
・実数を含む比較式の結果に対してさらに比較を行うと構文エラーとなる問題を修正しました。
・頂点カラーを持つメッシュ(Xファイル)にアンビエント光が反映されない問題を修正しました。
以下の機能を追加しました。
・指定のメッシュまでの距離を取得するG3@FRMGETRAY、G3@FRMGETRAYDATA関数を追加しました。
ダウンロード >>LGP4 Ver00.35 <<

2008/3/1 以下の問題を修正しました。
・複数のオブジェクトを内包する3Dキャラ(Xファイル)が綺麗に描画されない問題を改善しました。カメラの描画範囲(G3@CAMERASETPRO)の初期値が小さすぎたため、微小なXファイル(各頂点の座標が小さい)の場合に大きな計算の誤差が発生していました。

ダウンロード >>LGP4 Ver00.34 <<

2008/2/20 以下の問題を修正しました。
・Ver00.31以降 Windows Vistaで動作しないようなので、対策しました。多分動くはずです・・・・。どうもセキュリティ権限関係のチェックで落とされている模様。Ver00.31から開発環境をVisualC++2005から2008に変更したのですが、なんか設定が漏れているようです。もうしわけない。
ダウンロード >>LGP4 Ver00.33 <<

2008/2/18 以下の問題を修正しました。(極悪な問題なのでバージョンアップを必ず行ってください)
・実数の比較式で判定結果が誤る問題を修正しました。

2008/2/3 LGP4 Ver00.31を差し替えさせていただきます。
2008/2/1版では.NET3.5のインストールが必須となってました・・・

2008/2/1 以下の問題を修正しました。
・文字列配列に文字列を代入しても反映されない場合がある問題を修正しました。
・文字列の引数をもつ一部の関数に一度も代入を行っていない文字列変数を指定するとLGPが異常終了する問題を修正しました。
・文字列の比較演算で正否の結果が誤ることがある問題を修正しました。

以下の機能を追加/変更しました。
・3D機能のカメラで広角の初期値を変更しました。従来は広角が広めに設定したため、キャラが画面の端に行くとキャラが歪む事がありました。
・3D機能のライト光源で8つ以上のライトを描画させた場合、後に追加した8つのみ描画に反映されていた仕様を、各フレーム毎で最も近い8つを描画に反映するように仕様を変更しました。
・ライト光源の種類に「半球ライティング」を追加しました。従来、太陽のような一方方向から当たる光源の表現にはディレクショナルライトを使用しましたが、ディレクショナルライトでは光源の反対側にはまったく光が当たらないためキャラクタの半分が真っ暗になっていました。しかし実際の環境では壁や地面からの反射があるため、光源の反対側でもある程度の光があたります。そこで、この反射光も表現する半球ライティングを実装しました。中身は単純で、通常のディレクショナルライトと、その反対方向のディレクショナルライト(少し明るさ抑え目)に配置をしているだけです。単純ですが効果的面です。ただし、2つのライトを消費していることになります。詳細はマニュアルのG3@LIGHTAKEを参照。

2007/12/19 以下の問題を修正しました。
・実数変数に対する足し算で構文エラーが発生することがある問題を修正しました。

2007/12/13 以下の問題を修正しました。
・G3@RELEASE関数でメモリの開放漏れが発生する問題を修正しました。

2007/11/11 以下の問題を修正しました。
・関数や配列の括弧内に演算の括弧が含まれるとエラーと判断されることがある問題を修正しました。

2007/11/5 以下の問題を修正しました。
・アンビエント光源が正しく反映されない問題を修正しました。
・ARRAY文の指定値にマイナス値を指定できない問題を修正しました。
・#defineに記号を指定できない問題(たとえばマイナス値)を修正しました。
・FOR文のSTEP節に負数を指定すると強制終了する問題を修正しました。

なお、以下の問題が見つかっていますが未対策です。
・システム関数、拡張関数内の要素に整数同士の演算を行うと構文エラーとなる

2007/9/29 今回は3Dアニメーションのあたりを見直してみました。LGP4のパッケージにデモがありますので試してみてください。(私の自作ヘボキャラを動かせますw)
3Dキャラのアニメーションをかなり簡単に利用できる点が見所です。アニメーションを繰り返し表示したり、2つの動作の間をスムーズに切り替わるような見せ方も簡単にできるので、ぜひ遊んでみてください

以下の機能を追加しました。
・3Dキャラのアニメーション関数(G3@FRMSETANI、G3@FRMSETANICHG)の引数を追加しました。デフォルトではモーションを繰り返して再生しないようにし、追加した引数でループするかを指定するようにしました。また、更に追加した引数で2つのモーションをスムーズにつなげて再生する際の切替の間隔を指定できるようにしました。
・アニメーションの繰り返し回数を取得するG3@FRMGETANIACT関数を追加しました。

以下の機能を修正しました。
・3Dキャラのアニメーション(G3@FRMSETANI、G3@FRMSETANICHG)の調整を行いました。

2007/9/1 以下の機能を追加しました。
・G3@FRMSETMCOLORでG3@FRMMAKExxxx関数で生成したフレームに色をつけれるようになりました。
・RANDF関数で0〜1.0の乱数を取得できるようになりました。

以下の機能を修正しました。
・G3@LIGHTSETENABLEでライトが影響を与える範囲を指定できるようになりました。
・ライトの色々な問題を修正しました。
・ライトの初期値を変更しました。
・コンパイル後のEXEの実行で浮動小数点を戻り値とする関数の動作が不安定となる問題を改善しました。

注意事項
・ライトはG3@LIGHTMAKEで複数生成できるが、有効(G3@LIGHTSETENABLE)にできるライトはグラフィックカードの性能で制限されます。最大8つを目安にするとよいでしょう。

2007/8/20 以下の機能を修正しました。
・G@RENDERで描画先サーフェスと描画するフレームを指定できるようになりました。

2007/6/21 以下の問題を修正しました。
<言語処理>
・Ver 00.21の修正漏れ

以下の機能を追加しました。
<2D画像処理>
・G@CHRCOPYで描画する画像の透明度等を設定するG@CHRCOLORA関数を追加しました。

2007/6/19 以下の問題の修正を行いました。
<言語処理>
・ユーザ関数内で文字列を戻り値とする関数を実行するとメモリの開放漏れが発生する(LGP3 Ver01.03.39と同件)
・DEFALUT文、OTHER文が実行されない場合がある

以下の機能改善を行いました。
<言語処理>
・IF文、FOR文、SWITCH文の処理を高速化しました。ものによってはLGP3と同等かそれ以上高速化しました

2007/5/14 以下の問題の修正を行いました。
<言語処理>
・左辺が実数値で右辺が実数の演算結果が整数になる問題を修正しました
・配列の要素にSTATIC変数を指定するとプログラムが異常終了する問題を修正しました

2007/5/7 以下の問題の修正と新規機能を実装を行いました。
<言語処理>
・「#include」「#define」がver00.14から機能していなかった問題を修正しました。
・SWITCH文とSELECT文で意図したシーケンスが実行されない問題を修正しました。
<M関数>
・楽曲の総演奏時間を取得するM@LTIME関数を追加しました。

2007/4/27 以下の問題を修正しました。
<言語処理>
・実数変数と数値の演算を行うとLGPが異常終了する場合がある。
・SWITCH文内のCASE文の処理でBREAK文等でSWITCH文を抜ける前に次のCASE文が現れるとSWITCH文を抜けてしまた。引き続き次のCASE文下の処理の実行を行うのが正しい仕様である。SELECT文にも同様の問題がある。
・STR文等の実行で得た文字列を連結する処理を数回行うとLGPが異常終了する場合がある。
・SWICTH文の引数に配列を指定するとLGPが異常終了する。
<2D関数>
・G@PRINT文で長い文字列を表示しようとするとLGPが異常終了する。
・G@PRINT文で文字列配列を表示できない場合がある。
<3D関数>
・G3@ADDで追加したライトが、追加先のフレームの移動に追従しない
・G3@ADDで同一フレーム配下に複数のフレームを追加した場合で、配下のフレームに移動等の指示を行うと、同一フレーム配下の他のフレームの動きに影響を与えてしまう

2007/4/2 DirectX9に対応した3D画像処理関数(G3系関数)を実装しました。
一部の仕様がLGP3から変更となっています。詳細はマニュアルの1.6章を参照してください。

2007/3/4 DirectX9に対応した2D画像処理関数(G系関数)を実装しました。
一部の仕様がLGP3から変更となっています。詳細はマニュアルの1.6章を参照してください。

2007/2/27 浮動小数点(単精度)を一部サポートしました。
<実装を完了した機能>
1.標準関数
2.ユーザ関数

<現在実装中の機能>
1.外部関数
2.拡張関数

外部関数の実装は取りあえず置いといて、拡張関数の実装を進めます。DirectXに関係するG系、G3系、I系、M系、S系の拡張関数を一旦削除し、逐次DirectX9へ対応させてゆきます。

2007/2/19 浮動小数点(単精度)を一部サポートしました。
<実装を完了した機能>
1.浮動小数点の変数/配列/動的配列
  (変数名の後ろにシャープ記号「#」を付けて指定します)
2.代入/演算/比較
  (整数と浮動小数点の演算結果は浮動小数点の精度を持ちます)
3.ステートメント文の浮動小数点の利用
  (ただし、FOR文は指定できません。ARRAY文は対応中です。)
4.STR( )関数
  (テストの為に一足先に実装しました)
<現在実装中の機能>
1.標準関数、ユーザ関数、外部関数、拡張関数

2006/10/23 以下の問題を対策しました。
1.正しく固定小数点を設定できない(以前直した問題が復活)
2.引数がないEXUSER関数を定義すると定義エラーとなる問題
3.戻り値がないEXUSER関数/FUNC関数を定義するとコンパイルが終了しない問題

2006/10/12 本バージョンから実行ファイル(.exe形式)の出力を行うようになりました。
また、LGP3 Ver 01.03.37と同等の不良修正を行いました。

2006/10/9 これまでに開発した分となる言語処理系のテストを完了しました。

2006/10/1 「関数」「DLL呼び出し」のテストを完了しました。
以下の問題を対策しました。
1.関数に関するエラーチェックの問題
2.括弧や関数を含む演算式で正しい演算結果を取得できない場合がある

残るテストは「複雑な演算」となります。それが完了したら取りこぼしの問題を修正しつつ、DirectX9の実装を開始します。

2006/9/28 前回からテストは進んでいませんが、以下の問題を対策しました。
 1.戻り値を持つ関数を記述するとエラーとなる事がある。
 2.括弧を含む数値演算で意図しない計算結果を得る問題。

2006/9/24 ステートメントのテストを完了しました。
色々なおしました^^:

次は関数のテストを行います。

2006/9/20 一部ステートメントのテストを完了しました。「FOR〜NEXT」「ARRAY」がテスト未実施です。
複数のステートメントの修正を行いました。

2006/9/11 ステートメントのテストを開始しました。
今回は「IF〜THEN〜ELSE〜ENDIF」しか完了していません orz
  • IF文とTHEN文の間に指定する比較式で括弧を使用すると、文法誤りのエラーとしてしまう場合がる不良を修正しました。
  • IF/THEN/ELSE/ENDIF文の組み合わせによるエラーチェック漏れがある不良を修正しました。
  • ソースプログラム中に全角空白を指定しても文法エラーとならないよう改善しました。

2006/9/6 昨晩公開したVer00.03の中身が誤ってました。
それ以降に修正した分も含めた最新版を提供します。

本日は「数値の比較」をテストしました。問題は特に見つかりませんでした。

2006/9/5 文字列処理全般のテストを完了しました。
以下の不良を修正しましたバージョンを公開します。
・ソースファイルの読み込み失敗することがある
・ソースファイルの後半を読み込まないことがある
・IF文での文字列比較で分岐を誤ることがある

明日は「数値の比較」を実施する予定です。
その次に行うテストは「複雑な演算」「ステートメント文」「文法」「各種文法エラー」「関数」「実行ファイル生成」

2006/9/1 文字列処理の目に見えるバグを直してみました。(テストは未実施です)
変数を加算すると異常終了になったり、表示すると文字化けとなる問題が直りました。
修正前(ver 00.01)には、例えば「A$="1"+"2"+"3"」と3つの文字を加算すると文字化けする問題がありました。また、関数に文字列を引き渡す場合で、関数の引数にスタティック文字列変数や文字列配列を指定すると文字化けする問題がありました。つまり、文字列処理は全般的にダメダメだったということです^^:

明日は「数値の比較」「文字列全般のテスト」を実施する予定です。

2006/8/30 ダウンロードのリンクが壊れていました>w<

2006/8/29 ここまで開発したところのテストを開始しました。
本日のテストでは「数値演算」「数値代入」を実施しましたが、正常に動作しています。
ただし、以下の不良が見つかっています。

1.REDIMを格納した変数に数値を代入できてしまう。
2.変数が意味なく記述されていても(例「A=B+3 Z E=4」の変数Zとか)エラーにならない。
3.STATIC変数にREDIMを代入できる。(将来的にはサポートしたいけど、とり合えず現在はエラー)

2006/8/28 LGP4のファーストバージョンを公開します。
本サイトで公開しているサンプルプログラムが動作する事を確認した程度のテストしか行っていませんが、もしよければ試してみてください。
現状はコンパイラの修正のみ行っただけであり、DirectX9の実装は行っておらず、従来どおりDirectX7.1で動作します。
機能はLGP3 Ver 01.03.36相当です。
また、現バージョンは 実行ファイルを生成しません。(コンパイル後の実行はおこないます)

ダウンロード >>LGP4 Ver 00.01 <<

LGP3から変更となった主要な部分を記述します。
(1)ソースコードの記述方法の変更
従来1つの命令は改行せずに1行で記述する仕様でしたが、複数行にまたがって記述することができるようになりました。
旧) G@CHRRECT(GH,X,Y,X+100,Y+100)

新) G@CHRRECT(GH,
X,Y, X+100,Y+100)
(2)文字列を複数行にまたがって記述することができるようになりました。

旧)  A$="LGPはDirectXを使ったゲームを簡単に開発できるプログラミング言語です"

新)  A$="LGPはDirectXを使ったゲームを"
         "簡単に開発できるプログラミング"
         "言語です"
(3)実行速度の高速化
LGPでコンパイルしたプログラムの実行速度をほんの少しですが高速化しました。

2006/8/23 文字列処理をマシン語に変換する部分が完成しました。
次は変換したマシン後をあつめて、一つのプログラムにまとめる部分を見直します。(既に動作しているので、チューニング的な作業です)
その後に簡単なテストを行った後、アルファ版として公開します。(動作しなくても文句言わないようにw)

2006/8/22 文字列処理をマシン語に変換する部分を作成中。
文字列の代入がやっと完了〜。
次は、文字列の加算と文字列の比較を作ります。

2006/8/8 数値処理のマシン語部分は完成〜。
文字の加算をとり合えず動かしてみる・・・ハングアップ・・・続きは明日にしときます。

2006/8/7 マシン語を生成する部分の見直しを行ってます。
数値の代入と演算は後1時間程度で完了。
その後は、文字の加算/数値比較/文字比較を見直せばここは完了。
さらにその後は、構文自体の動作確認を行います。そこまで行けば、とり合えず公開しても品質的に大丈夫かな?^^:
構文エラーのチェックが、まだあまいので、そこらも色々やらねば・・・

2006/7/30 ARRAY文完成。現在REDIM文実装中です。
これが終われば、ここまで開発した分の簡単なテストをした後、一旦公開したいと思います。

2006/5/30 言語処理部のスクラッチビルド中。ARRAY文以外は実装完了。明日はARRAY文の実装を予定。