トップ «前の日記(2013/03/03) 最新 次の日記(2013/03/05)» 編集

SikabaneWorksが関係するコンテンツ(主に*band系ローグライク)の開発近況・補足から全く個人的な雑記まで。

[WEB:屍の見える丘公園]| [RSS]

Angband | Badiashimshe | C# | CRAUZEL | D'angband/小説草稿 | D'angband/開発 | DarkSouls | Demon'sSouls | DungeonCrawl | ElvenUteruses | Haskell | Hengband | J9シリーズ | LEGO | LineDrawing | MISC | MTG | Mac | Math | Moria | R-18 | Roguelike | Rough | RoughSketch | Ruby | SDL | UNIX | VMware | WarHammer | Zangband | アタシラヂョウヲウ | イラスト | ガジェット | ゲーム | ゲーム紹介 | ゲーム製作技術 | ゲーム論 | スケッチ | ツクール | テクノロジー | ニコニコ動画 | ファルコム | ファンタジー | ヴィーヤウトゥムノ | 別記事追加予定 | 変愚蛮怒 | 変愚蛮怒/スポイラー | 変愚蛮怒/元ネタ探訪 | 変愚蛮怒/攻略 | 変愚蛮怒/開発 | 宗教 | 情報 | 政治 | 文字コード | 日ペ昔話 | 東方ワンドロ | 東方外法漢女 | 歴史 | 漫画製作 | 版権絵 | 画像処理 | 翻訳 | 自然言語 | 艦隊これくしょん | 落書き | 言語解析 | 読書 | 超人ロック | 軍事 | 追記予定 | 通信 | 阿片窟 | 馬鹿馬鹿蛮怒/開発 | 魔法少女まどか☆マギカ | 魚類版深夜の真剣お絵描き60分一本勝負


2013/03/04

[変愚蛮怒/スポイラー][追記予定]generate_area()と派生関数の地上中間処理(変愚蛮怒 Ver2.1.2 rev3327)

最も肝心な処理はplasma_recursive()にあるのだが、ここもまたがっつり読まないと把握しきれないので次回以降に。

generate_area()

static void generate_area(int y, int x, bool border, bool corner)

x/y : 生成する地上の広域マップで該当する位置
border : 広域マップの上下左右境界の生成を行う
corner : 広域マップの四隅の生成を行う

generate_area()関数は、地上マップの生成を実際に行う。受け取った引数に応じて、マップ中央か広域マップの周囲8マスに当たる外縁部分の生成を行う。

処理の流れは以下の通り。

  • 該当の座標にあたる広域マップ情報から、町ID(town_num)と生成レベル(base_level)を取得。
  • 物理的な階層(dun_level)は0とするが、モンスター(monster_level)とアイテム(object_level)は生成レベルに準拠する。
  • 町IDが0(町なし)以外ならば、t_info.txtを呼び出して、町の生成を行う。
  • そうでなければgenerate_wilderness_area()関数で、荒野の生成を行う。
  • 現在の町IDが0でなくcornerでもないならば、広域マップの座標関係に合わせて、道路作成を行う。
    • 現在の広域マップ座標が道路ありで、かつ広域マップの上下左右も道路ならば、各辺の中央から広域マップの中央にかけて道路地形を敷く。
  • 広域マップ座標に該当のダンジョン入口があり、町でなく、さらにWINNERフラグのないダンジョンか、勝利者ならばダンジョンの入口を外縁周辺6マスより内側の位置に生成する。

generate_wilderness_area()

static void generate_wilderness_area(int terrain, u32b seed, bool border, bool corner)
terrain : 広域マップから得た地勢
seed : 乱数の種
border : 広域マップの上下左右境界の生成を行う
corner : 広域マップの四隅の生成を行う
  • terrainがEDGE(広域マップ外縁一マスの地形)ならば全フロアを永久壁で埋め尽くして終わり。
  • 境界であるかマップ中央であるか毎に生成範囲を指定した上でplasma_recursive()関数による再帰生成で、地形を埋め尽くしていく。

[落書き]よその子

Pixivで頼まれた某人のゲームの持ちキャラ。

よその子