FEAT_FLOORを内部でfloor_type[randint0(100)]に変換するhackを破棄.
普通にFEAT_FLOORを使えるようになる. 以下の特殊タグが使える.
*FLOOR*: floor_type[randint0(100)]
*WALL*: fill_type[randint0(100)]
*INNER*: feat_wall_inner
*OUTER*: feat_wall_outer
*SOLID*: feat_wall_solid (現在はfeat_wall_outerと同じ)
*STREAM1*: d_info[dungeon_type].stream1
*STREAM2*: d_info[dungeon_type].stream2
なお, feat_wall_*がset_floor_and_wall()でも初期化されないので修正.
G:.:w:LIT
M:FLOOR
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:SECRET:INVIS
F:LOS | PROJECT | MOVE | PLACE | SECRET | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI
E:glyph of warding
G:;:y:LIT
W:16
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | GLYPH | CAN_FLY |
F:HURT_DISI
E:open door
G:':U
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:CLOSE:CLOSED_DOOR
F:LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | CLOSE | DOOR | CAN_FLY |
F:HURT_DISI | TELEPORTABLE
E:broken door
G:':u
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:CLOSE:BROKEN_DOOR
F:LOS | PROJECT | MOVE | PLACE | DROP | NOTICE | REMEMBER | CLOSE | DOOR |
F:CAN_FLY | HURT_DISI | TELEPORTABLE
E:trap door
G:^:w:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_TRAPDOOR
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:MORE | HIT_TRAP | CAN_FLY | HURT_DISI
E:pit
G:^:s:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_PIT
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:s:LIT
M:TRAP_PIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_SPIKED_PIT
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:s:LIT
M:TRAP_PIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_POISON_PIT
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:evil rune
G:^:G:LIT
W:2
-K:DESTROYED:FLOOR
-K:HIT_TRAP:FLOOR
+K:DESTROYED:*FLOOR*
+K:HIT_TRAP:*FLOOR*
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:strange rune
G:^:o:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_TELEPORT
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:discolored spot
G:^:u:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_FIRE
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:u:LIT
M:TRAP_FIRE
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_ACID
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:dart trap
G:^:r:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_SLOW
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:r:LIT
M:TRAP_SLOW
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_LOSE_STR
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:r:LIT
M:TRAP_SLOW
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_LOSE_DEX
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:r:LIT
M:TRAP_SLOW
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_LOSE_CON
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:gas trap
G:^:g:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_BLIND
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:g:LIT
M:TRAP_BLIND
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_CONFUSE
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:g:LIT
M:TRAP_BLIND
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_POISON
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
G:^:g:LIT
M:TRAP_BLIND
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_SLEEP
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:door
G:+:U
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_1
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_2
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_3
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_4
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_5
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_6
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_7
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_7
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_1
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_2
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_3
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_4
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_5
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_6
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_7
G:+:U
M:CLOSED_DOOR
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
K:SPIKE:JAMMED_DOOR_7
G:#:w
M:GRANITE
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:SECRET:CLOSED_DOOR
K:OPEN:OPEN_DOOR
K:BASH:BROKEN_DOOR
E:pile of rubble
G:::w:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:POWER_10 | REMEMBER | TUNNEL | HAS_ITEM | HURT_ROCK | CAN_PASS | CAN_DIG |
F:HURT_DISI
E:magma vein
G:%:s:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:MAY_HAVE_GOLD:MAGMA_TREASURE
F:POWER_10 | REMEMBER | TUNNEL | MAY_HAVE_GOLD | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
E:quartz vein
G:%:w:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:MAY_HAVE_GOLD:QUARTZ_TREASURE
F:POWER_20 | REMEMBER | TUNNEL | MAY_HAVE_GOLD | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
G:%:s:LIT
M:MAGMA_VEIN
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:SECRET:MAGMA_TREASURE
F:POWER_10 | SECRET | REMEMBER | TUNNEL | HAS_GOLD | WALL | HURT_ROCK |
F:CAN_PASS | HURT_DISI
G:%:w:LIT
M:QUARTZ_VEIN
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:SECRET:QUARTZ_TREASURE
F:POWER_20 | SECRET | REMEMBER | TUNNEL | HAS_GOLD | WALL | HURT_ROCK |
F:CAN_PASS | HURT_DISI
E:magma vein with treasure
G:*:o:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:ENSECRET:MAGMA_HIDDEN
F:POWER_20 | REMEMBER | TUNNEL | HAS_GOLD | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
E:quartz vein with treasure
G:*:o:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:ENSECRET:QUARTZ_HIDDEN
F:POWER_20 | REMEMBER | TUNNEL | HAS_GOLD | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
E:granite wall
G:#:w:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:POWER_40 | REMEMBER | TUNNEL | WALL | HURT_ROCK | CAN_PASS | HURT_DISI
# 0x39 --> granite wall -- inner
G:#:w:LIT
M:GRANITE
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:POWER_40 | REMEMBER | TUNNEL | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
G:#:w:LIT
M:GRANITE
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:POWER_40 | REMEMBER | TUNNEL | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
G:#:w:LIT
M:GRANITE
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:POWER_40 | REMEMBER | TUNNEL | WALL | HURT_ROCK | CAN_PASS |
F:HURT_DISI
E:explosive rune
G:;:R:LIT
W:16
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
F:LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | CAN_FLY | MINOR_GLYPH |
F:HURT_DISI
E:compact rune
G:^:D:LIT
W:2
-K:DESTROYED:FLOOR
-K:HIT_TRAP:FLOOR
+K:DESTROYED:*FLOOR*
+K:HIT_TRAP:*FLOOR*
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:alarm
G:^:R:LIT
W:2
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_ALARM
F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
F:HIT_TRAP | CAN_FLY | HURT_DISI
E:wall opeing trap
G:^:w:LIT
W:10
-K:DESTROYED:FLOOR
+K:DESTROYED:*FLOOR*
K:HIT_TRAP:TRAP_OPEN
F:POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM |
F:TRAP | HIT_TRAP | CAN_FLY | HURT_DISI
E:mountain chain
G:^:o:LIT
W:5
-K:UNPERM:GRANITE
+K:UNPERM:*INNER*
F:REMEMBER | TUNNEL | WALL | PERMANENT | MOUNTAIN | TELEPORTABLE |
F:PLACE | CAN_FLY | AVOID_RUN
G:^:o:LIT
M:MOUNTAIN
W:5
-K:UNPERM:GRANITE
+K:UNPERM:*INNER*
F:REMEMBER | TUNNEL | WALL | PERMANENT
N:128:BUILDING_0
E:Armageddon trap
G:^:v:LIT
W:10
-K:DESTROYED:FLOOR
-K:HIT_TRAP:FLOOR
+K:DESTROYED:*FLOOR*
+K:HIT_TRAP:*FLOOR*
F:POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM |
F:TRAP | HIT_TRAP | CAN_FLY | HURT_DISI
E:Piranha trap
G:^:b:LIT
W:10
-K:DESTROYED:FLOOR
-K:HIT_TRAP:FLOOR
+K:DESTROYED:*FLOOR*
+K:HIT_TRAP:*FLOOR*
F:POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM |
F:TRAP | HIT_TRAP | CAN_FLY | HURT_DISI
}
+int conv_dungeon_feat(int newfeat)
+{
+ switch (newfeat)
+ {
+ case FEAT_DUNGEON_FLOOR:
+ return floor_type[randint0(100)];
+ case FEAT_DUNGEON_WALL:
+ return fill_type[randint0(100)];
+ case FEAT_DUNGEON_INNER:
+ return feat_wall_inner;
+ case FEAT_DUNGEON_OUTER:
+ return feat_wall_outer;
+ case FEAT_DUNGEON_SOLID:
+ return feat_wall_solid;
+ case FEAT_DUNGEON_STREAM1:
+ return d_info[dungeon_type].stream1;
+ case FEAT_DUNGEON_STREAM2:
+ return d_info[dungeon_type].stream2;
+ default:
+ return newfeat;
+ }
+}
+
+
/*
* Take a feature, determine what that feature becomes
* through applying the given action.
int feat_state(int feat, int action)
{
feature_type *f_ptr = &f_info[feat];
- int newfeat, i;
+ int i;
/* Get the new feature */
for (i = 0; i < MAX_FEAT_STATES; i++)
{
- if (f_ptr->state[i].action == action)
- {
- newfeat = f_ptr->state[i].result;
- return (newfeat == FEAT_FLOOR) ? floor_type[randint0(100)] : newfeat;
- }
+ if (f_ptr->state[i].action == action) return conv_dungeon_feat(f_ptr->state[i].result);
}
if (have_flag(f_ptr->flags, FF_PERMANENT)) return feat;
- if (feature_action_flags[action] & FAF_DESTROY)
- {
- newfeat = f_ptr->destroyed;
- return (newfeat == FEAT_FLOOR) ? floor_type[randint0(100)] : newfeat;
- }
- else return feat;
+ return (feature_action_flags[action] & FAF_DESTROY) ? conv_dungeon_feat(f_ptr->destroyed) : feat;
}
/*
#define FEAT_TRAP_ARMAGEDDON 0xc5
#define FEAT_TRAP_PIRANHA 0xc6
+/* Hack -- Special fake terrain for f_info */
+#define FEAT_DUNGEON_FLOOR -1
+#define FEAT_DUNGEON_WALL -2
+#define FEAT_DUNGEON_INNER -3
+#define FEAT_DUNGEON_OUTER -4
+#define FEAT_DUNGEON_SOLID -5
+#define FEAT_DUNGEON_STREAM1 -6
+#define FEAT_DUNGEON_STREAM2 -7
+
/*
* Wilderness terrains
*/
extern void wiz_lite(bool ninja);
extern void wiz_dark(void);
extern void cave_set_feat(int y, int x, int feat);
+extern int conv_dungeon_feat(int newfeat);
extern int feat_state(int feat, int action);
extern void cave_alter_feat(int y, int x, int action);
extern void remove_mirror(int y, int x);
/* Fill the arrays of floors and walls in the good proportions */
set_floor_and_wall(dungeon_type);
-
/* Prepare allocation table */
get_mon_num_prep(get_monster_hook(), NULL);
- feat_wall_outer = d_info[dungeon_type].outer_wall;
- feat_wall_inner = d_info[dungeon_type].inner_wall;
- feat_wall_solid = d_info[dungeon_type].outer_wall;
-
/* Randomize the dungeon creation values */
dun_tun_rnd = rand_range(DUN_TUN_RND_MIN, DUN_TUN_RND_MAX);
dun_tun_chg = rand_range(DUN_TUN_CHG_MIN, DUN_TUN_CHG_MAX);
/*
+ * Special feature info tags
+ */
+static cptr f_info_special_tags[] =
+{
+ "*FLOOR*",
+ "*WALL*",
+ "*INNER*",
+ "*OUTER*",
+ "*SOLID*",
+ "*STREAM1*",
+ "*STREAM2*",
+ NULL,
+};
+
+
+/*
* Monster race flags
*/
static cptr r_info_flags1[] =
}
}
+ /* Search for special index corresponding to this fake tag */
+ for (i = 0; f_info_special_tags[i]; i++)
+ {
+ if (streq(f_info_special_tags[i], str))
+ {
+ /* Return the special index */
+ return (s16b)(FEAT_DUNGEON_FLOOR - i);
+ }
+ }
+
/* Not found */
return 0;
}
}
}
+ /* Search for special index corresponding to this fake tag */
+ for (i = 0; f_info_special_tags[i]; i++)
+ {
+ if (streq(f_info_special_tags[i], f_tag + (-(*feat))))
+ {
+ /* Record special index */
+ *feat = (s16b)(FEAT_DUNGEON_FLOOR - i);
+ return;
+ }
+ }
+
/* Undefined tag */
#ifdef JP
msg_format("̤ÄêµÁ¤Î¥¿¥° '%s'¡£", f_tag + (-(*feat)));
set_floor_and_wall_aux(floor_type, d_ptr->floor);
set_floor_and_wall_aux(fill_type, d_ptr->fill);
+
+ feat_wall_outer = d_ptr->outer_wall;
+ feat_wall_inner = d_ptr->inner_wall;
+ feat_wall_solid = d_ptr->outer_wall;
}