stella
repo
- wakame-tech/sateryte · GitHub · GitHub
- GitHub - wakame-tech/bevy_crossterm: Crossterm plugin for the bevy game engine
- CUIで ローグライクゲーム調査 ゲームを作りたい
- Rust製ECSである bevy を触っている.
- スキルやアイテムの処理は rhai で書けるようにしたい.
- MineCraftのプラグイン機構に影響を受けているので
- イベントAPIなどを用意してプラグインが作れるようななるべく拡張可能なゲームを作りたい
- MineCraftのプラグイン機構に影響を受けているので
- 折角 bevyなのでいつかWebアプリとしてもデプロイしたいと考えている.
ローグライクゲーム制作者調査
現状の機能
- グリッド
Point,Rect,Area
- マップ生成
- ダンジョン生成
- satellite (C#) を移植
- ダンジョン生成
- UI
- メッセージログ
- ステータスバー
- 設定
- キーコンフィグ
- ron ファイルから読み込み
- 操作
- ダッシュ, 振り向き, iダッシュ
求めるもの
- 一つのミスが命取りなので快適な操作性
- 統計
- スコア
- 歩数
- 時間
機能
- ダッシュ
- iダッシュ:通路をショートカット
- key configはダッシュとは変える
- iダッシュ:通路をショートカット
- 向きだけ変更
- その時にガイドラインを表示
- グリッドも表示
- 離れている敵に方向を合わせる
- プレイヤーの攻撃
- 罠を調べる
- アイテムの上に乗る
- アイテムを拾う
- 回収コマンド: 乗ったことのあるアイテムを自分の周りに集める
- インベントリにアイテムを入れる
- アイテムを置く
- アイテムを使用する
- アイテムを装備する
- スタック可能なアイテム
- アイテムを投げる
- 杖
- 振ると魔法が飛んでいく
- 入れ替え
- 飛びつき
- 振ると魔法が飛んでいく
- 壺
- 保存の壺
- アイテムのコスト
- インベントリにはコスト上限がある
- 足踏み
- 足踏み罠チェック
- マップ
- オートマッピング
- オートタイル: 角のタイルは丸くするみたいな
- 罠
- 敵の出現テーブル
- 出現レベル, 開始層, 終了層, 出現率
- アイテムを出現させる
- 敵の移動
- 行き止まりだったらUターン
- 敵の攻撃
- 経験値
- 倍速敵
- 眠り状態
- セーブ・ロード
- アイテムとか敵に色を付ける
ダメージ計算
-
攻撃: 攻撃力 * 割合
-
防御
- 攻撃の50%まで: * 29/30 / 1def
- 攻撃の75%まで: -1 / 2def
- 100%まで: -1 / 4def
-
ex. atk=100, def=100
-
100*(29/30)^20 = 50 (80)
-
50 - 50/2 = 25 (30)
-
25 - 30/4 = 18 (0)
-
18ダメージ
-
- ほぼほぼbevyに移行完了した
- ゲームシステムを考える
ダンジョン生成
概要
再帰的分割アルゴリズムによるダンジョン生成システム。
生成アルゴリズム
1. Region(Region)の定義
- 各RegionはRoomを持つ内部に部屋を持つ可能性がある
- Regionから部屋を生成する際は境界から一定の余白を設ける
2. 再帰分割フェーズ
- マップ全体を初期Regionとして開始
- 各Regionを以下の条件で分割:
- ランダムに垂直分割または水平分割を選択
- 分割可能な最小サイズを下回るまで再帰的に分割
- 分割位置はランダムに決定
3. グラフ構造の構築
- 分割されたRegionをノードとする無向グラフを作成
- 隣接するRegion間にエッジを追加
- エッジの重みはRegion中心間のマンハッタン距離
- 最小全域木アルゴリズムで冗長な接続を除去
4. 部屋生成フェーズ
- 各Region内に部屋を配置
- 部屋はRegion境界から余白を持って生成
- 部屋領域を床タイルで埋める
5. 通路生成フェーズ
- 最小全域木のエッジに基づいて通路を生成
- 隣接する部屋の境界上からランダムな接続点を選択
- 接続点間を直線的な通路で結ぶ
- 通路も床タイルで構成
6. 特殊要素配置
- 生成された床タイルからランダムに階段を配置
特徴
- 全ての部屋が通路で接続される(最小全域木により保証)
- 余分な通路が生成されない(冗長性の排除)
- 地域分割により自然な部屋配置
- ランダム性により毎回異なるレイアウト