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向けのダンジョンフラグを追加する
- Mon Dec 24 22:37:02 2018 +0900: [Feature] #38635 d_info.txt向けの新フラグ4種追加 / Add 4 flags for 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) { --
んでもって
で き ま し た。
冷気と電撃、他に池などは引き続き次回の明日に。
ぼくも仕事中にArenaのデッキレシピ考えてるせいで仕事が進みません(半ギレ) <br>酸の沼はくさそう、冷気属性の床はスリップして黒塗りの高級車に追突しそう
毒とかもう岡山の県北が-more- <br>Arenaいいですよね、もう当分中毒です(マジキチスマイル)