SRCの話

公式HPと本体管理移行ということで、いろいろ思うところはありますが、さし当たって移行に関しての議論には参加しないで一歩引いて見守ろうかなと考えています。
移行が一段落したら、バグフィックスやら何やら投げまくろうとは思ってますが。
で、SRCがついにオープンソース化ということでSRCの派生プログラムがわんさか出てくると面白いなーと思っているのですが、とりあえず私は参戦しない方向で考えています。
いろんなSRCが出てきたら、バグフィックスなりソース提供なりで協力していこうかなと。
ただ、誰もSRC派生のプログラムを作らない事態になり、その原因がVB5環境を作れない人が多いというような場合のみ、VB.NET環境へのバージョンアップは全力で参加しようと考えています。
まあ誰かがすぱっとやってしまいそうな気がしますが。もし乾さんや総帥が.NET移行チーム作るぞーって言い出したら断られても手伝うつもりではいます。

結局

今日は他のことやっててSRC関連は一切作業せず。
今仕事で触ってるプログラムが作業量たいしたことないし、テストも適当でいいっぽいからしばらく時間取れるかも。
何でそんなプログラムやってるかというと、単純に他に現場にC言語できる人がいなかったから。
まあ私も実は新人研修の片手間に触っただけなんですが、そんな難しいプログラムじゃないっぽかったので
「Cとか楽勝っすよw一般常識ww」
くらいの勢いで立候補しました。ハッタリは大事。

んで、SRCの話ですが、ソース投稿の方は特にレスついてないので様子見。
僕の考えたSRCについて、いっそシナリオクラスを作って、ロードごとに全部破棄して新しく作っちゃえば後腐れなくデータロードできるねとか考えたり。

メイン

ループ開始

シナリオインスタンス作成
Scenario Scenario = New Scenario(eveFileName, saveFileName)

result = Scenario.Exec()

戻り値が終了ならプログラム終了。
戻り値がロードならシナリオインスタンス破棄し、
ループ戻って新しいシナリオインスタンス作成。

みたいなみたいな。

SRCの設計(簡易版)

セーブファイルから起動した場合
起動→初期設定→セーブファイル読み込んでユニットグローバル変数他作成→インターミッション→(次のステージを選択)→次のステージで指定されたeveファイルをクラス化→クラス化したシナリオのプロローグラベル実行→スタートラベル実行→味方の1ターン目開始→ユーザーの入力待ち

eveから起動した場合
起動→初期設定→指定したeveファイルをクラス化→クラス化したシナリオのプロローグラベル実行→スタートラベル実行→味方の1ターン目開始→ユーザーの入力待ち

引数なしで起動した場合
起動→初期設定→ダイアログ表示→選んだファイル種別に応じて上の2つのうちどちらかを実行

ユーザー入力の結果Continueコマンドが実行されると
シナリオクラスのエピローグラベル実行→インターミッション→(次のステージを選択)→次のステージで指定されたeveファイルをクラス化→クラス化したシナリオのプロローグラベル実行→スタートラベル実行→味方の1ターン目開始→ユーザーの入力待ち

ユーザー入力の結果GameClearなど終了する処理が実行されると
クラス類解放→メインウィンドウ終了

メモ書きから起こした。作成中のアプリだと

起動

シナリオループ                            ←┐
↓                                     │
入力待ちメインループ                     ←┐ │
↓                                  │ │
入力に応じて各種実行(ContinueやGameClearまでループ)┘ │
↓                                     │
インターミッション等(ゲーム終了までループ)           ┘

全シナリオ終わるか、終了指示が出たら終了

という二重ループ設計を考えてます。入力がDirectInputなので入力待ちをWindows任せでは無くちゃんと実装してやら無いといけないのです。

ソース投稿

完了した。
一応自分とこで動作確認したけど何かすっごい特殊な使い方されてデグレっちゃいそうで怖い。
ソース受け入れてもらえれば、新GUITalkコマンドのセンタリングしたときのカーソルがちゃんとマスに収まるようになります。
また、ついでにInfo(オプション, NewGUI)で新GUIを使っているかを取得できるようになるソースも投稿しました。
拡大アニメでこの記述入ってたと思うので、これで新GUIでもワイドな枠が表示されるはず。

とりあえず家帰ってきてやったこと

GUIでのカーソル表示位置調整
SPアニメの表示位置をずらすコードがSRC内にあったので、それに合わせて実装。

Info(オプション, NewGUI)で新GUIモードのOn/Offが取得できるように

ついでに中箱さんがバグ報告で書いてたやつ(3434番)をちょっと調べてみた。
原因は、文字列を切り分けたあと配列に載せる時に、数字型か文字型かの判別で、
『(1)は数字型だろJK』ってVBさんが判断してるから。で、数字型として解釈すると-1になるらしい。ちょっと笑った。IsNumeric("(1)")がtrueなんですってよ奥さん。
回避方法は"'(1)' '(10)'"みたく''で囲っておいて、切り分け後に''を取り除けば何とかなりました。

割と勢いでコード書いたので見落としあるといけないので明日改めてチェックしてからソース投稿します。
思ったより早く帰れなかったので今日は寝ます。

昨日の話

で、さっそくシナリオ用にアイコンを描き始めました。
とりあえず「喋らない主人公」なので一枚だけアイコン作っとこうと描いたんですが、全然描けないわけですよこれが。
2時間ぐらいウンウンうなりながら作ったのがこちら。泣けるでぇ。

あまりにも上手くいかないので髪塗りの途中で切れたのが如実に
というか主線を引いた時点で死にたくなったが戒めとして公開。さぼるなっていう。