TIC-80で小さなゲームを作る
TIC-80で小さなゲームを作ったので、更新内容とか見直してメモです。TIC-80のメモリを読み書きしたり、SCN(),OVR()使って、fantasy consoleっぽいことは、ほとんどやってないです。Luaは少し書けるようになったけど、また書かなくなったら、すぐ元通りに戻っちゃうと思う。だいたい一か月くらいLua書いたり消したりしてました。作ったゲームは以下です。
調査とチュートリアル
hello worldのカートリッジから始めた。zombie.ticから作成したので、ゾンビ倒すゲームつくる気持ちだったっぽい。いつも通りツインスティックシューターを作ろうとして、TIC-80スティック2つないしなぁと思いながら、TIC-80ですでに作られていないか調べたりしてた。マウスが使えるのでマウスでエイムする操作にすることにした。
Entity追加
Entityをリストに登録して、リストのEntityのupdateとdrawを回すmanagerを作成し、playerとmouse位置のEntityを登録した。Luaのoopをどう記述していいのかわからなくて、たくさん検索した、今でもよくわかってなくて、継承の記述は行き当たりばったりになってる。
Entityの削除対応
verlet integrationのテスト
敵キャラ同士もcollision detectionやりたいけど、どれだけ敵を出して動かせるか試してる。あと画面にどれくらい出すと、密度感でるか見てる。別のカートリッジ追加して試した。お互いcollision detectionやって、500体くらい出しても大丈夫そうだったので、作れそうかなと判断した。collisionのブロードフェーズはどうするかいろいろ動かしてみた。最初、sweep and pruneを探してきて試したけど、パフォーマンス出なかったのでやめた、Entityは毎フレーム位置の変動があるので、ソートでO(nlogn)かかってたと思う。SpatialHash uniform-grid試して、それを使っている、これはさらに後で、collisionのリストの処理がやりづらかったので、別のを使ている。ゲームエンジンのLoveのライブラリが割と少し直すと使えるものが多いと感じた、PICO-8はLuaのライブラリそのまま動かないみたいなので、TIC-80はこのあたりは有利っぽいかなと思った。
ランダムマップ
コリジョン応答
verletを組み込んで、ステージコリジョン対応しようとしている。コリジョン応答をいれた。壁との応答とるとやっぱり重い。あとmoving circle vs AABBでとらないとまともにならないっぽいので、ステージは単純な形状で、壁やめることにした。
robtronの影響
カートリッジを別にした、tictron.tic,robtronの影響。BGのスクロールをやったりした。TIC-80のチュートリアルを参考にしたけど、自分のはスタート位置が原点で、負の方向にも移動するようにしたかったけど、負の値の方に対応されてなくて、結局自分でまじめにやった。でも完璧でなくて、スプライトの表示とBGが少しずれる場合があるけど、どうせキャラずっと動いてるでしょで、修正してない。
タイトル追加
spawner
spawnerを追加。coroutineのリストを作って、登録したcoroutineを順次実行していく、spawnのシーケンス終わったらリストから削除されて破棄される。フレームで複数同時に動かせる。matrixを渡して、2d座標をtrans, rotationできるようにして、単純な生成を組み合わせができるように。この辺から、プログラムの文字数が苦しくなてきてる、インデントをspace2からtab2に切り替えた。
ダッシュのシステム
2重スクロール
カメラ
パーティクル
パーティクル追加したり、エネルギーdot追加したり。パーティクルは、pix()関数で、ピクセル打ってるだけ、colorのフェードもかけてないし、だいぶ手抜き。エネルギーdotは雰囲気でいれてる。この段階ではなにに使うかとか考えてないよね。背景の見づらさやばい。
ボス
透視変換
shake
カメラのshakeいれた。解像度低いし演出そんなにできないけど、画面揺らすの効果的。PICO-8にはカメラがあるみたいだけど、TIC-80には特にそれがないっぽい。スクロールさせる段階でカメラ追加しといてよかった。
dashを強く
textri
animation
キーリプレイ
キーリプレイをいれようとしてる。gifアニメをとるのにいい感じのところとれるようにするためとか。Luaは現在のrandomのseed値がとれないっぽいかよ。Luaからxorshiftの乱数とかを生成した方が融通ききそう。次があればそうする。
調整
新しい敵を入れたりした。ダッシュをつかわせたいので、ダッシュのダメージの耐性をさげてショットに対しては固い敵を追加。ダッシュでひき殺せて、爆風で殺せる。SEも追加した。データつくるの苦手。BGMは無理だった。データつくるの苦手。
難易度をいれた。難易度曲線でぐぐったけど、ゲームの進行と、難易度の関係式をみんなどうしてんのか知りたかったけどわかんなかった。結局線形で、特定のイベントで下げる、ゼビウスっぽい制御だった、何年前のだよ。スクショいいところとりやすいように、ポーズできるようにとかした。ダッシュをさらに強くしたり、最終調整したつもり。ボスのパフォーマンスは調整しきれてない。弾いっぱい打つところ、お互い衝突判定とってないのになんで重いんだろう。単に数が多い?でも5-600ぐらいなんだけど。
結論
一通り手がつけれた、TIC-80では大きなプログラムは組めないので、ある程度のところで、あきらめがつける。解像度が低いのでデータ作るのが苦手でもそれなりにできる気がする。BGMが作れないのはつらい。とりあえずでも完成させたのはえらい。実はこれは3Dで作っていたものから要素を差し引いたもの、2Dやfantasy consoleの制約のおかけで、発散しすぎないで、完成できたのかも。fantasy console,結局32bitのfloatで計算してるし、メモリも結構使っちゃってるのを考えると、8bit風の見た目とかなんなんだろうって気がする。collisionの判定を自分でかいたり、physics自分で書いたり、わりと計算自分でしないといけないのを考えると、TIC-80でゲーム作るの、unityで作ったりするより難しいかもと思ったけど、どうなんだろう。あと、マウスの二つのボタンでショットとダッシュになっているけど、Macの人はボタン一つしかないので、遊べないといまさら気づいた、操作直そうかな。
0 件のコメント:
コメントを投稿