トップ «前の日記(2018/12/23) 最新 次の日記(2018/12/25)» 編集

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分一本勝負


2018/12/24

[変愚蛮怒/開発]変愚蛮怒開発日誌part112…特別編「変愚蛮怒の地形実装例 ~毒沼やら酸の沼やら~(中編)」

前回はこちら。風邪でダウンしたりMtG Arenaにハマってしまったりしたのでこの件も全中後編で行きます。ゆ る し て。

グローバル変数上の定義も追加する

前回、f_info.txtで定義を追加しましたが、ダンジョンフロア作成処理向けには別途グローバル変数で各IDを加え込む処理が必要だったのでそれを追加しました。このコミットには、他にちょっとした修正も入っています。

diff --git a/src/externs.h b/src/externs.h
index c639cc2..34e84b8 100644
--- a/src/externs.h
+++ b/src/externs.h
@@ -428,6 +428,14 @@ extern FEAT_IDX feat_deep_water;
 extern FEAT_IDX feat_shallow_water;
 extern FEAT_IDX feat_deep_lava;
 extern FEAT_IDX feat_shallow_lava;
+extern FEAT_IDX feat_heavy_cold_zone;
+extern FEAT_IDX feat_cold_zone;
+extern FEAT_IDX feat_heavy_electrical_zone;
+extern FEAT_IDX feat_electrical_zone;
+extern FEAT_IDX feat_deep_acid_puddle;
+extern FEAT_IDX feat_shallow_acid_puddle;
+extern FEAT_IDX feat_deep_poisonous_puddle;
+extern FEAT_IDX feat_shallow_poisonous_puddle;
 extern FEAT_IDX feat_dirt;
 extern FEAT_IDX feat_grass;
 extern FEAT_IDX feat_flower;
diff --git a/src/init2.c b/src/init2.c
index c95785d..f64375e 100644
--- a/src/init2.c
+++ b/src/init2.c
@@ -1737,6 +1737,14 @@ static errr init_feat_variables(void)
 	feat_shallow_water = f_tag_to_index_in_init("SHALLOW_WATER");
 	feat_deep_lava = f_tag_to_index_in_init("DEEP_LAVA");
 	feat_shallow_lava = f_tag_to_index_in_init("SHALLOW_LAVA");
+	feat_heavy_cold_zone = f_tag_to_index_in_init("HEAVY_COLD_ZONE");
+	feat_cold_zone = f_tag_to_index_in_init("COLD_ZONE");
+	feat_heavy_electrical_zone = f_tag_to_index_in_init("HEAVY_ELECTRICAL_ZONE");
+	feat_electrical_zone = f_tag_to_index_in_init("ELECTRICAL_ZONE");
+	feat_deep_acid_puddle = f_tag_to_index_in_init("DEEP_ACID_PUDDLE");
+	feat_shallow_acid_puddle = f_tag_to_index_in_init("SHALLOW_ACID_PUDDLE");
+	feat_deep_poisonous_puddle = f_tag_to_index_in_init("DEEP_POISONOUS_PUDDLE");
+	feat_shallow_poisonous_puddle = f_tag_to_index_in_init("SHALLOW_POISONOUS_PUDDLE");
 	feat_dirt = f_tag_to_index_in_init("DIRT");
 	feat_grass = f_tag_to_index_in_init("GRASS");
 	feat_flower = f_tag_to_index_in_init("FLOWER");
diff --git a/src/variable.c b/src/variable.c
index fd8958e..f8cf1b9 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -935,6 +935,14 @@ FEAT_IDX feat_deep_water;
 FEAT_IDX feat_shallow_water;
 FEAT_IDX feat_deep_lava;
 FEAT_IDX feat_shallow_lava;
+FEAT_IDX feat_heavy_cold_zone;
+FEAT_IDX feat_cold_zone;
+FEAT_IDX feat_heavy_electrical_zone;
+FEAT_IDX feat_electrical_zone;
+FEAT_IDX feat_deep_acid_puddle;
+FEAT_IDX feat_shallow_acid_puddle;
+FEAT_IDX feat_deep_poisonous_puddle;
+FEAT_IDX feat_shallow_poisonous_puddle;
 FEAT_IDX feat_dirt;
 FEAT_IDX feat_grass;
 FEAT_IDX feat_flower;
--

d_info.txt向けのダンジョンフラグを追加する

これらの地形をさらにダンジョンフロアに生成するためのフラグを作成し、それを各ダンジョンの定義を行う、d_info.txtに追加します。

diff --git a/src/init1.c b/src/init1.c
index 8b4d290..4f3f150 100644
--- a/src/init1.c
+++ b/src/init1.c
@@ -963,8 +963,8 @@ static cptr d_info_flags1[] =
 	"CAVE",
 	"CAVERN",
 	"ARCADE",
-	"XXX",
-	"XXX",
+	"LAKE_ACID",
+	"LAKE_POISONOUS",
 	"XXX",
 	"FORGET",
 	"LAKE_WATER",
@@ -980,8 +980,8 @@ static cptr d_info_flags1[] =
 	"NO_MELEE",
 	"CHAMELEON",
 	"DARKNESS",
-	"XXX",
-	"XXX"
+	"ACID_RIVER",
+	"POISONOUS_RIVER"
 };

新たに適用されるダンジョンは、まあそれっぽいものに。

---
 lib/edit/d_info.txt | 6 ++++++
 src/init1.c         | 8 ++++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/edit/d_info.txt b/lib/edit/d_info.txt
index cdb6f3f..5aa9142 100644
--- a/lib/edit/d_info.txt
+++ b/lib/edit/d_info.txt
@@ -62,6 +62,7 @@ L:FLOOR:100:FLOOR:0:FLOOR:0:50
 A:GRANITE:100:GRANITE:0:GRANITE:0:GRANITE:GRANITE:MAGMA_VEIN:QUARTZ_VEIN
 F:CAVERN | WATER_RIVER | LAVA_RIVER | ARENA | DESTROY | CURTAIN | GLASS_ROOM |
 F:LAKE_WATER | LAKE_LAVA | LAKE_RUBBLE | LAKE_TREE | ARCADE
+F:LAKE_ACID | ACID_RIVER | LAKE_POISONOUS | POISONOUS_RIVER
 F:MONSTER_DIV_64

 N:2:イークの洞穴
@@ -111,6 +112,7 @@ A:GRANITE:90:DARK_PIT:10:GRANITE:0:GRANITE:GRANITE:MAGMA_VEIN:DARK_PIT
 F:BIG | LAVA_RIVER | CAVERN | DESTROY
 F:MONSTER_DIV_10
 F:CAVE | LAKE_LAVA | LAKE_TREE | LAKE_RUBBLE
+F:LAKE_ACID | ACID_RIVER | LAKE_POISONOUS | POISONOUS_RIVER
 M:DRAGON | R_CHAR_dD

 # Vecna is there, guarding Soulsword
@@ -124,6 +126,7 @@ L:FLOOR:85:SHALLOW_WATER:15:FLOOR:0:30
 A:GRANITE:75:DARK_PIT:25:GRANITE:0:GRANITE:GRANITE:SHALLOW_WATER:DEEP_WATER
 F:MONSTER_DIV_4 | FINAL_GUARDIAN_804 | FINAL_ARTIFACT_89
 F:WATER_RIVER | DESTROY | ARENA | LAKE_WATER | LAKE_RUBBLE | DESTROY
+F:LAKE_POISONOUS | POISONOUS_RIVER
 M:UNDEAD | NONLIVING

 N:7:森
@@ -208,6 +211,7 @@ L:FLOOR:50:SHALLOW_WATER:30:DEEP_WATER:20:100
 A:GRANITE:100:GRANITE:0:GRANITE:0:GRANITE:GRANITE:SHALLOW_WATER:DEEP_WATER
 F:MONSTER_DIV_16 | ARENA | WATER_RIVER | LAKE_WATER |
 F:FINAL_GUARDIAN_857 | FINAL_ARTIFACT_129
+F:LAKE_ACID | ACID_RIVER | LAKE_POISONOUS | POISONOUS_RIVER
 M:DEMON | ELDRITCH_HORROR

 N:14:山
@@ -232,6 +236,7 @@ L:FLOOR:100:FLOOR:0:FLOOR:0:0
 A:GRANITE:60:MAGMA_TREASURE:20:QUARTZ_TREASURE:20:GRANITE:GRANITE:MAGMA_VEIN:QUARTZ_VEIN
 F:MONSTER_DIV_1 | WATER_RIVER | CAVE | CAVERN | SMALLEST
 F:LAVA_RIVER | DESTROY
+F:LAKE_ACID | ACID_RIVER
 M:R_CHAR_$

 N:16:反魔法の洞窟
@@ -281,6 +286,7 @@ L:FLOOR:100:FLOOR:0:FLOOR:0:50
 A:GRANITE:100:GRANITE:0:GRANITE:0:GRANITE:GRANITE:MAGMA_VEIN:QUARTZ_VEIN
 F:CAVERN | WATER_RIVER | LAVA_RIVER | ARENA | DESTROY | GLASS_ROOM |
 F:LAKE_WATER | LAKE_LAVA | LAKE_RUBBLE | LAKE_TREE
+F:LAKE_ACID | ACID_RIVER | LAKE_POISONOUS | POISONOUS_RIVER
 F:MONSTER_DIV_64 | DARKNESS | FINAL_GUARDIAN_803

 N:20:ガラスの城

ACID_RIVERとPOISONOUS_RIVERを実装する。

溶岩の川の実装をベースに。普通の川を先に優先しつつ、そちらが選ばれなければフラグのある限り、他の川を当確率に指定します。

diff --git a/src/floor-generate.c b/src/floor-generate.c
index 77b11d3..fb33ba0 100644
--- a/src/floor-generate.c
+++ b/src/floor-generate.c
@@ -711,20 +711,43 @@ static bool cave_gen(void)
 		/* Hack -- Add some rivers */
 		if (one_in_(3) && (randint1(dun_level) > 5))
 		{
-			IDX feat1 = 0, feat2 = 0;
+			FEAT_IDX feat1 = 0, feat2 = 0;

-			/* Choose water or lava */
+			/* Choose water mainly */
 			if ((randint1(MAX_DEPTH * 2) - 1 > dun_level) && (d_info[dungeon_type].flags1 & DF1_WATER_RIVER))
 			{
 				feat1 = feat_deep_water;
 				feat2 = feat_shallow_water;
 			}
-			else if  (d_info[dungeon_type].flags1 & DF1_LAVA_RIVER)
+			else /* others */
 			{
-				feat1 = feat_deep_lava;
-				feat2 = feat_shallow_lava;
+				FEAT_IDX select_deep_feat[10];
+				FEAT_IDX select_shallow_feat[10];
+				int select_id_max = 0, selected;
+
+				if (d_info[dungeon_type].flags1 & DF1_LAVA_RIVER)
+				{
+					select_deep_feat[select_id_max] = feat_deep_lava;
+					select_shallow_feat[select_id_max] = feat_shallow_lava;
+					select_id_max++;
+				}
+				if (d_info[dungeon_type].flags1 & DF1_POISONOUS_RIVER)
+				{
+					select_deep_feat[select_id_max] = feat_deep_poisonous_puddle;
+					select_shallow_feat[select_id_max] = feat_shallow_poisonous_puddle;
+					select_id_max++;
+				}
+				if (d_info[dungeon_type].flags1 & DF1_ACID_RIVER)
+				{
+					select_deep_feat[select_id_max] = feat_deep_acid_puddle;
+					select_shallow_feat[select_id_max] = feat_shallow_acid_puddle;
+					select_id_max++;
+				}
+
+				selected = randint1(select_id_max);
+				feat1 = select_deep_feat[selected];
+				feat2 = select_shallow_feat[selected];
 			}
-			else feat1 = 0;

 			if (feat1)
 			{
--

んでもって

で き ま し た。

冷気と電撃、他に池などは引き続き次回の明日に。

酸の川1

酸の川2

本日のツッコミ(全2件) [ツッコミを入れる]
sunawa (2018/12/24 23:38)

ぼくも仕事中にArenaのデッキレシピ考えてるせいで仕事が進みません(半ギレ) <br>酸の沼はくさそう、冷気属性の床はスリップして黒塗りの高級車に追突しそう

deskull (2018/12/28 22:31)

毒とかもう岡山の県北が-more- <br>Arenaいいですよね、もう当分中毒です(マジキチスマイル)