Godot3.5でローグライク系スロットダンジョンゲームを作る
https://gyazo.com/cd56a2acc35b77bfc77f526a5afadd05
開発で学んだことなどのメモ
アイデアの種になった程度で。
72時間の使い方
最初の1時間: 企画をざっくり決める。ここで時間をかけると間に合わなくなるので、短めに決めた
2時間: スロットマシーンの基盤実装
Youtubeの動画が参考になった。英語じゃなくてポルトガル語?の動画だったが、画面だけ観ればなんとなく分かった。便利な時代だ。
https://www.youtube.com/watch?v=pRI94L-9iGk
1時間以内: 仮のUI配置
8時間程度? : ひたすらゲームロジックの実装
ここがメインの実装時間だが時間は覚えていない。
新規素材を用意する時間も入れたらもっとかかってたかも
1時間程度: メッセージウインドウシステムの導入
Youtube動画を観て導入。すぐに動いてくれて助かった。
かなりバトルのテンポが早くてメッセージウインドウが追いつかない問題の調整が厄介だった。
2~3時間程度?: サウンドシステム整備、サウンド素材を当て込み
音を入れるととても良くなる。ただ、思ったより時間がかかる。
4時間程度?: テストプレイ、デバッグ
4時間程度: 提出できる状態になってからの細かい調整
まず仮状態で提出してitch.io上でプレイできることを確認。最悪このバージョンで出せる状態にしておく。 頭からプレイして、簡単過ぎたところ・難しすぎたところのパラメータを調整。10回ぐらい提出し直した。
72時間のうち、実際のゲーム開発に費やした時間は、20~30時間ぐらい?
金曜の13時からゲームジャム開始なので、午後の5時間程度はまだ仕事の時間
12時間ぐらいは家族の時間や家事など
休日なので半日ほど家族ででかけたりもした
睡眠時間も3日分で20時間程度
スロットシステムの実装
上にも貼ったYoutube動画を参考にした。
スロットマシーンの各リールを縦長オブジェクトとして生成しておき、毎フレーム位置をずらして回転するように見せている。
リールの最天井に到達したら、また最初のポジション=0に戻してループさせる。
ループ時に見え方がおかしくならないように、リールオブジェクトは全く同じ状態をコピーして付け足している。
https://gyazo.com/996323d74ea238aa720020d26f0db69e
次回作を作るなら、ここの処理を改善したい。
ダンジョン内部だけリールが見えるようにするため、Light2Dを使ってリール画像をマスク
ダメージ数値フローティングテキスト
メッセージウインドウ
HTML版とローカル実行版とでは揺れ方が違ったので困った
Dictionary 型を使う
code:gd
var my_dict = {} # Creates an empty dictionary.
var dict_variable_key = "Another key name"
var dict_variable_value = "value2"
var another_dict = {
"Some key name": "value1",
dict_variable_key: dict_variable_value,
}
var points_dict = {"White": 50, "Yellow": 75, "Orange": 100}
他のプログラミング言語でいう Object や JSON 型とほぼ同じ
ヘルスバー
ダメージ計算式
今回はシンプルにドラクエ方式でよく採用されている 攻撃力 - 防御力/2 * 乱数にした。
ただ、主人公の防御力が高くなりすぎると後半敵の攻撃を防ぎすぎてヌルゲー化するのを避けるため、各敵に最低ダメージ値を設定した
signal が呼ばれないあるある
レシーバー関数とsignalとの引数とのズレで、signalが呼ばれずに数分デバッグで困ったことがあった
プレイ動画を挙げてもらったのが嬉しい
https://www.youtube.com/watch?v=kFPAe30jqVU