individual game devlog

個人でスマホ用のゲームを作ってます

Asepriteのベータ版を使う

Asepriteでコマンドラインからパレットを適用した画像を出力しようとしましたが、 --palette オプションでスプライトのパレットを変更できるのは v1.2 からでした。

 

Aseprite - Docs - Cli

 

v1.2 はまだ beta ですが、Steam の設定からバージョンを切り替えることができました。

 

1. Steam の Library から Aseprite のプロパティを開く

Aseprite を右クリックして一番下の Properties をクリックします。

f:id:yuushimizu:20170407013628p:plain

2. BETAS タブのバージョンを変える

「Select the beta you would like opt into:」 を 「beta - Beta version - Preview features」に変えます。下の access code は空欄でOKです。

f:id:yuushimizu:20170407013749p:plain

 以上。あとは CLOSE して Aseprite を起動すれば v1.2-beta になっています。

C++1zで作り直し中

f:id:yuushimizu:20170404070251p:plain

Cocos2d-x + C++1zで作り直しています。

 

Luaも良い言語だったんですが、富豪的に作りすぎてパフォーマンスがでなくなりました。1ターン毎に処理落ちするようになり、プロファイリングをしようにもうまくいかず、デバッグもしにくく、、、コードが多くなると開発し難くなってしまいました。

 

パフォーマンスが落ちたのはメモリ周りの問題のような気がします。細かいデータにもテーブルを使いまくっていたので、毎ターンかなりの量のメモリの確保と解放が発生していました。あとGC周りがどうなってるのかよくわからない。

 

パフォーマンスを気にして書く必要があるなら*1Luaを使うメリットはあまり無いと判断し、結局C++1zで作り直すことに決めました。Luaで書いた部分と以前C++で書いていたものを参考にしつつ、だいたい書き直しです。

 

C++は良いです。moveの存在がでかい。あと速い。

 

他の環境周りでは、iPhoneじゃなくてMac上で普通に実行できることに気付いたので、デバッグが捗るようになりました。

 

あとドット絵エディタをEDGE2*2からAsepriteに乗り換えました。コマンドラインで画像を操作できるのでゲームのビルド時に画像処理をまとめて行えるのでかなり楽です。

 

作り直すたびにコードも設計も良くなってるけど、完成からどんどん離れている気がするのが悩ましい・・・。

*1:このくらいのゲームなら気にしなくていいと思ってしまったのが甘かった

*2:Wineで無理やり使ってた

開発再開とリファクタリング

ゲーム的には全然変わっていません。。。

 

途中、別のゲームを作り始めたり・・・(エターなった)

f:id:yuushimizu:20161202163116p:plain

 

LispLuaが書けたらいいなと思ってなんか作ってたり・・・(断念)

GitHub - yuushimizu/LuaLi: Lisp for Lua

 

色々やってましたが、やっぱりローグライクの開発を再開することにしました。新しく得られた知見でリファクタリングしまくったので、コード的にはなかなか良くなった気がします。

 

妙に複雑になっていた部分を、シンプルなプロトタイプベースな感じで書き直してスッキリさせたり、シーケンス的なものを作ってテーブルのループとかコピーを減らしたり

 

gist9e13c6b754b8ccd65a48a0fdf0dffc2d

 

簡単なプリプロセッサを作って関数を書きやすくしたり

 

GitHub - yuushimizu/luapp: Lua Preprocessor for myself

 

しました。

 

gist96649b8c6e23c3d54e15f2deda8d145a

 

こんな感じで書けます。

 

このまま新しい部分も進めていこう。。。

アニメーションとかできるようになりました

だいぶ滞っています(u_u )

 

前回と比べると、HP表示とメッセージ表示と攻撃ボタンを追加して、足踏みアニメーションもするようになりました。今回は動画で。音はありません。

 


ローグライク進捗1

 

足踏みみたいにループするアニメーションでもコルーチンが活躍します。Luaだと書きやすくて良い感じです。できるだけ部品を作って組み合わせる形に持っていくほうがスッキリして作りやすいですね。

 

敵の種類によって移動ルーチンが違うのも、行動のルールを部品化して組み合わせで実装してます(ガンビットみたいなもの)。こうすると組み合わせとか順番を変えるだけでルーチンが違うキャラクターが簡単に作れたりします(多分)。

 

やることはまだまだありますが、とりあえず入力周りが雑なのでどうにかしたいです。あとは主人公が地味なので描き直してます。いつまでたっても完成する気がしない。

移動処理とマップを実装

f:id:yuushimizu:20160610051437p:plainキーで自由に移動できるようになりました。あとマップが付きました。(右が黒いのは気にしない)

 

この8方向キーは良さそうだと思ったんですが、実際に使ってみたら斜め移動が暴発しやすかったです。調整次第かもしれません。

 

入力を受けて、移動して、アニメーションして、マップを更新する、という流れを実装するために色々リファクタリングしたり試行錯誤したりしましたが、なかなか良い感じになったと思います。HP表示とかメッセージ表示とかを追加するのも簡単にできそうです。

 

コルーチンを使ってゲーム内部の状態とアニメーションの同期を取って、Observerパターンめいたものでマップの更新をしています。

 

その辺りの説明もそのうち書きたい感じです。

ランダムダンジョン生成のアルゴリズム

f:id:yuushimizu:20160601214357p:plain

キャラが動いた!

 

今回はダンジョン生成アルゴリズムを画像付きで紹介します。

 

基本的な流れは

1. 空間を分割する

2. 部屋を配置する

3. 通路を作る

というよくあるものになっています。

続きを読む

ローグライクを作ってます

ローグライク(いわゆる不思議のダンジョン)を作ってます。 

f:id:yuushimizu:20160527051330p:plain

iOS用にC++OpenGLでゴリゴリとここまで作ったんですが、コードが上手く設計できずに破綻しました。(エフェクトの割り込みとか、状態異常とか・・・)

 

その後、数ヶ月放置してましたが、最近Cocos2d-xとLuaで書きなおしています。

f:id:yuushimizu:20160527051500j:plain

とりあえずマップ生成ができて、キャラクタの表示も一応できたくらいです。自分で土台を作ってくのも楽しかったですが、やっぱりゲームエンジンを使ったほうがゲーム自体の制作はスムーズにいくと思いました。

 

マップ生成のアルゴリズムとか、作っててネタになることを今後書いていきます。