現役プログラマーに戻ることになった2009/11/04 22:09

結局、新システムは自分が作った物をベースに会社のthukune君に
コンフィグ画面を作ってもらうことになった。
細かいツールも自分が作ることになり、
結局自分は現役プログラマーに戻ることになった。

年末はBLACKPACKAGE-TRYのくの一物の製品版と体験版、
そしてBLACKPACKAGEの6人の女教師のDL版を作るので時間が取れないが、
来年の2-3月にはベータテストが出来ると思う。

不評だったWindowsのコントロールを使った設定画面がグラフィカルになるのも進化(DOS時代に逆戻り?)することになる。

しかし、来年の年末のタイトルに使うかは不明だ。
DX9ベースで作ったので表現の幅は広がるが、XP以降とDX9対応GA(内蔵の場合i945以降)と
今までのシステムに比べると少々敷居が高くなるからだ。
(内蔵GAの場合i945としたのは、ネットブックにi945が多々採用されているからと865の内蔵GAが遅かったから)

陵辱ゲームを作るために、そこまでの表現力が必用とされるかも疑問だ。

話は変わるが、自分の作ったシステムで、キャラの表示をする際、
2通りの表現方法がある。

細かい演出はb)の方が出来るが、a)の方法の方が簡単に記述できる。
うちのソフトは8割方a)の方法で作っているが、
萌えゲーなどはb)の方法で細かく制御した方が良いだろう。

ここら辺はコンパイラのマクロが強力なので、問題ない。
式は代入式と比較式の区別はつけない。
極端に言うと、if 文で代入式をいれたり、何もないところで比較式を入れたり出来る。
(シナリオライターのバグの例 if r20==0 とするところを if r20=0 としてしまう )
シナリオライターがスクリプト上でバグを発生させる原因になるが、プログラマが慣れ親しんだC言語風の演算子を使うことが出来る。
それと、選択肢の結果等をを入れる変数を指定するため、アドレス式という物を使用する。(*rnum=*(&rnum)+1とか)
なので、計2種類の式があることに注意が必用。
それとC言語とは違い、全ての式を評価する。

マクロはMASMをも越える物で、C言語でMASMのマクロを使える物
だと思って良い。
この部分はコンパイル時にも実行時にもスピードを稼がなくてはならないので、コンパイラ自身にmakeを内蔵したり、
関数名やラベルなどの定義物は多数のトライ木を使ったり苦労している。
マクロは2種類有り、C言語と同等の機能の#define、
MASMライクな#macroの2種類があり、もちろん様々な条件コンパイルも出来、
最終的にプリプロセッサは、式(逆ポーランド)と
DD,DW,DB,stringにスクリプトを解析してコンパイラに渡す。
よって、プリプロセッサの大きさに比べてコンパイラの大きさは小さい。
そして強力な文字置換により、文字セットもプリプロセッサ時、コンパイル時、実行時の3段階で解決される。
自分のシステムはマクロで作られるマクロ命令群という形を取っているので、
a)やb)の書式が同じシナリオに書くことが出来る。
システムは足回り、コンパイラはスクリプターとぷろぐらまの中間、
と言うことになっている。

自分のシステムは、WAV圧縮、CG圧縮共にmakeを内蔵させ、
マスターアップの混乱時でもスピードアップが出来るような作りになっている。



a)1行でロードと表示をする
;Bキャラを左にCキャラを右に表示
ld_cg1 h00bw00,h00cw00
;BキャラとCキャラを左右に動かし、間にAキャラ出現
ld_cg1m h00bw00,h00aw00,h00cw00
;BキャラとCキャラはその位置のままでAキャラを消す
ld_cg1 h00bw00,cls0,h00cw00


b)ロードと表示をわける
;Bキャラを0番レイヤーにロードし、立ち位置を左(0-4のうち1)にし、表示優先順位を最低(0)にする。
ld_layer 0,h00bw00,1,0
;Cキャラを1番レイヤーにロードし、立ち位置を左(0-4のうち3)にし、表示優先順位を1にする。
ld_layer 1,h00Cw00,3,1
;ロードしたBキャラとCキャラをフェードインで表示する
putcg 1

;Bキャラをより左(0-4のうち0)に移動させる
move h00b,0
;Cキャラをより右(0-4のうち4)に移動させる
move h00c,4
;Aキャラを2番レイヤーにロードし、立ち位置を真ん中(0-4のうち2)にし、表示優先順位を2(一番手前)にする。
ld_layer 2,h00aw00,2,2
;BキャラとCキャラを左右に動かし、間にAキャラ出現
putcg 1

;Aキャラを2番レイヤーにロードし、立ち位置を真ん中(0-4のうち2)にし、表示優先順位を2(一番手前)にする。
ld_layer 2,cls0,2,2
;BキャラとCキャラはその位置のままでAキャラを消す
putcg 1