進捗報告 / GW増刊・2年目に向けてのマイルストーン設定
昨日の記事を書きながら検討していてペンディングにしたこと
1)Lisp族からC++ライブラリを操作する(ことは今やらない)
Guache以外のRacket、Chicken、Newlisp、SBCLとかでプランBまで完成させることを想定して調べてみたり実験してみたりしたんですが、今の自分にはまだ早いっぽいというかCおよびC++の経験値が低すぎた。
全部どの選択でも本来出来ることだしLisp族でプログラムするのは楽しいのだけれど、今やりたいことはゲームを作ることなのでいったんペンド。
1つゲームが完成して、プログラミングに重点を置く状況になったら検討してみたい。
2)Python以外のLLでBooCaDiを作る(ことは今やらない)
昨日書いたLuaだとBearLibTerminalは何もしないで使えたけれど、音を出すまでに一苦労しそうだった。Luaだったらlove2d使うと言うてもあるんだけど。
あとnimはBearLibTerminalもコンソール版の音用のエンジンとして検討しているライブラリ版sunbox用の拡張とかも用意されていてかなり有望だった。
特にLuaはLuaで書かれたLisp族のfennelとかUrnで書けそうなのでちょっと魅力的なのだが、プランAから遠くなっちゃうのと単独実行ファイル作るのが一手間ありそうでペンド。
fennelはNeoVimでrepl駆動開発ができるならBerLibTerminal研究用にいじるのはアリかも。
あと1と2両方を跨ぐ、Pythonで書いたLispであるHyという選択肢も無い訳じゃないんですが、処理系自体がまだまだ破壊的な仕様変更を繰り返している段階なので様子見。本当はこの段階までLisp族で作りたかった。
3)ゲームエンジン化を目指す(ことは今やらない)
そこまで汎用に拘ることもないので、まずは考えているゲーム内容限定で作ることに。汎用化は難しいし。本当はLispで作っているとどんどん汎用化するはずなんだけど。
ただ、ゲーム本体が出来てからもどんどんゲームデータは追加したり変更したり出来るMOD導入は簡単な様にしたい。自分もその方が開発楽だし。
今後の予定
上の3つをようやく諦めたので、アルゴリズムのプロトタイプはGaucheで、公開するものはPython/RenPyスクリプトで、という方針がようやく自分の中で納得がいく様になりました。もう脇目を振らんで良かろう。
とりあえず目標としては人様に遊んでいただけるバージョンまで持っていくこと、
アルファ版第1段階
まずは第1段階としてBearLibTerminalも使わない、素のCLIプログラムとしてGauche上で以下のものを作る。
最小限の世界を構成するデータを作る
今あるパーツを使って2人のNPCが自律行動して目標を目指し競り合うものを作る
それにプレイヤーが参戦したり関与できる様にする。
プレイヤーの成長メニューを作る
最小限のゲームメニューを作る
ここまでは小さな関数としてパーツを作っていけるはずなので、パーツが1つできたところでChatGPTなどを使いつつ、Pythonの関数へ移植していく。
アルファ版第2段階
ゲームとして次のプランA、プランBの第1段階を並行ですすめつつGauche上で以下のものを作る。
ゲームとして面白くなる分までデータ量を増やす
第1段階で作れなかった行動内容(トーナメントとか)を作る
この段階ではまだ公開できないレベルでいい。例えば今やってる状態だと、入力時に予期しない入力があるとエラーがでるが、そんなもんでよし。
素のPythonで動く様になっていたら、iPadに持って行って色々遊んでみるのも良いかもしれない。
ベータ版プランA
当初の予定通り、RenPyで組み立てる。
アルファ版の段階で作ったPythonの関数は、RenPyでは引数付きラベルとして使いまわせることは天拝山クエストねこねこパニックで実験済み。
まずは文字だけのゲームとして動く状態にする。
GUI周りを作る。
曲を作り効果音を作る。
グラフィックは最後になるかな。
こっちはMODとかはプライオリティは低くなると思う。
ベータ版プランBと見せかけてCLIゲームを推すコーナー
こっちはPythonとBearLibTeminal、音は現状でsunvoxを予定しているけれど変わるかもしれないプラン。もっとお手軽バージョンで考えていたけれど、こっちもそれなりに作業量は多そうな感じ。
プランAだとプログラムの内容が、シナリオが中心となるRenPyスクリプトにGauche由来の関数をはめ込んでいく感じだけれど、こちらはプログラムの流れが先にあって、外部データとしてシナリオを読み込んで処理していくかたちになるはず。
やることの順番はプランAとほぼ同じで
文字だけで動くバージョンを組み立てる。セーブとかはRenPyと違って自分で作らないといけない。
BearLibTerminalでGUI周りを作る。
音周りの処理を作る。ライブラリは暫定でsunvox。
画像周りが最後になるけれど、あまり重点を置かない。背景画像くらいで良い。REXPaintとか使うとたのしいかも。
ちょっとプランBが楽しくなってきちゃっているんですが、原因その1は前見つけていたBaerLibTerminalを利用したローグライク作るのに便利なclubsandwichというPythonライブラリを再発見したこと。
それからREXPaintの再発見。インストールしてHDDの肥やしになってました。あと、使わないだろうけどアスキーアートをpingファイルにするansiloveとか見つけて盛り上がったりしてました。
Cogmindってゲームは全編これでグラフィックを作ってるみたい。
まあでも、こういうグラフィックテイストは別にRenPyでも問題なく行けるとは思いますが。
あとプランBの方だと途中段階で公開を始めて、フィードバックもらってどんどん改良改造していくのが楽そうだなあ、というのもあります。
それとBooCaDiは別にローグライクでも何でもないですが、ローグライクってちょっと作ってみたくなるジャンルではありまして、clubsandwichをいじってみたい気持ちがあったり。
全然遊べてないんですが、今も開発が続くCataclysm DDAとか、まさにclubsandwichで作ってくれと言わんばかりのゲームだったり。
BooCaDiも別に俺レトロゲームを作りたいわけではなくて新しいジャンルのゲームを作りたいんですが、個人でできることは限られているので、システムとテキストと音に全振りするなら、こういう見た目もありかしら、と思います。