OSDN Git Service

地形に関する変更.
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sat, 29 May 2004 15:46:48 +0000 (15:46 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sat, 29 May 2004 15:46:48 +0000 (15:46 +0000)
* defines.hからFEAT_*マクロを削除. 必要な地形IDは起動時にタグから求め
  て外部変数に代入しておく.
* 参照する必要がない地形IDに関する部分を削除.
* 地形のpowerとして扱っていた値をsubtypeとpowerに分割した. powerは地
  形の耐久や抵抗に関わる値, subtypeは分類のみに使う値とする.
* 鍵のかかった/くさびの打たれたドアがf_info中で連続している必要がない
  ように, その種のドアのIDを起動時に配列に保存するようにした.

27 files changed:
lib/edit/f_info.txt
src/bldg.c
src/cave.c
src/cmd1.c
src/defines.h
src/dungeon.c
src/externs.h
src/floors.c
src/generate.c
src/grid.c
src/grid.h
src/init1.c
src/init2.c
src/load.c
src/object2.c
src/rooms.c
src/spells1.c
src/spells2.c
src/spells3.c
src/store.c
src/streams.c
src/tables.c
src/types.h
src/variable.c
src/wild.c
src/wizard2.c
src/xtra2.c

index 98bed59..90dd7a9 100644 (file)
@@ -195,8 +195,8 @@ E:trap door
 G:^:w:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:MORE | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_0 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | MORE | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x11 --> visible trap -- open pit
 
@@ -206,8 +206,8 @@ E:pit
 G:^:s:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_1 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x12 --> visible trap -- spiked pit
 
@@ -218,8 +218,8 @@ G:^:s:LIT
 M:TRAP_PIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_2 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x13 --> visible trap -- poison pit
 
@@ -230,8 +230,8 @@ G:^:s:LIT
 M:TRAP_PIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_3 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x14 --> visible trap -- rune -- summon
 
@@ -242,8 +242,8 @@ G:^:G:LIT
 W:2
 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 | TELEPORTABLE
+F:SUBTYPE_4 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x15 --> visible trap -- rune -- teleport
 
@@ -253,8 +253,8 @@ E:strange rune
 G:^:o:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_5 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x16 --> visible trap -- spot -- fire
 
@@ -264,8 +264,8 @@ E:discolored spot
 G:^:u:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_6 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x17 --> visible trap -- spot -- acid
 
@@ -276,8 +276,8 @@ G:^:u:LIT
 M:TRAP_FIRE
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_7 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x18 --> visible trap -- dart -- slow
 
@@ -287,8 +287,8 @@ E:dart trap
 G:^:r:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_8 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x19 --> visible trap -- dart -- lose str
 
@@ -299,8 +299,8 @@ G:^:r:LIT
 M:TRAP_SLOW
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_9 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x1A --> visible trap -- dart -- lose dex
 
@@ -311,8 +311,8 @@ G:^:r:LIT
 M:TRAP_SLOW
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_10 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x1B --> visible trap -- dart -- lose con
 
@@ -323,8 +323,8 @@ G:^:r:LIT
 M:TRAP_SLOW
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_11 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x1C --> visible trap -- gas -- blind
 
@@ -334,8 +334,8 @@ E:gas trap
 G:^:g:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_12 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x1D --> visible trap -- gas -- confuse
 
@@ -346,8 +346,8 @@ G:^:g:LIT
 M:TRAP_BLIND
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_13 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x1E --> visible trap -- gas -- poison
 
@@ -358,8 +358,8 @@ G:^:g:LIT
 M:TRAP_BLIND
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_14 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x1F --> visible trap -- gas -- sleep
 
@@ -370,8 +370,8 @@ G:^:g:LIT
 M:TRAP_BLIND
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_15 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 # 0x2x --> locked door (power 0)
 
@@ -821,7 +821,7 @@ J:
 E:Pattern startpoint
 G:*:w
 W:16
-F:POWER_0 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_0 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:66:PATTERN_1
@@ -829,7 +829,7 @@ J:
 E:section of the Pattern
 G:*:B
 W:16
-F:POWER_1 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_1 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:67:PATTERN_2
@@ -837,7 +837,7 @@ J:
 E:section of the Pattern
 G:*:b
 W:16
-F:POWER_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:68:PATTERN_3
@@ -845,7 +845,7 @@ J:
 E:section of the Pattern
 G:*:B
 W:16
-F:POWER_3 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_3 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:69:PATTERN_4
@@ -853,7 +853,7 @@ J:
 E:section of the Pattern
 G:*:b
 W:16
-F:POWER_4 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_4 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:70:PATTERN_END
@@ -861,7 +861,7 @@ J:
 E:section of the Pattern
 G:*:W
 W:16
-F:POWER_5 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_5 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:71:PATTERN_OLD
@@ -869,7 +869,7 @@ J:
 E:section of the Pattern (discharged)
 G:*:W
 W:16
-F:POWER_6 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_6 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:72:PATTERN_EXIT
@@ -877,7 +877,7 @@ J:
 E:Pattern exit
 G:*:w
 W:16
-F:POWER_7 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_7 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 N:73:PATTERN_CORRUPTED
@@ -885,7 +885,7 @@ J:
 E:corrupted section of the Pattern
 G:*:D
 W:16
-F:POWER_8 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
+F:SUBTYPE_8 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | PERMANENT | CAN_FLY |
 F:PATTERN
 
 # 0x4A --> shop -- general store (perm)
@@ -895,7 +895,7 @@ J:
 E:General Store
 G:1:U
 W:10
-F:POWER_0 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_0 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x4B --> shop -- armoury (perm)
@@ -905,7 +905,7 @@ J:
 E:Armoury
 G:2:s
 W:10
-F:POWER_1 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_1 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x4C --> shop -- weapon shop (perm)
@@ -915,7 +915,7 @@ J:
 E:Weapon Smiths
 G:3:w
 W:10
-F:POWER_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x4D --> shop -- temple (perm)
@@ -925,7 +925,7 @@ J:
 E:Temple
 G:4:g
 W:10
-F:POWER_3 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_3 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x4E --> shop -- alchemist (perm)
@@ -935,7 +935,7 @@ J:ϣ
 E:Alchemy Shop
 G:5:b
 W:10
-F:POWER_4 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_4 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x4F --> shop -- magic shop (perm)
@@ -945,7 +945,7 @@ J:
 E:Magic Shop
 G:6:r
 W:10
-F:POWER_5 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_5 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x50 --> shop -- black market (perm)
@@ -955,7 +955,7 @@ J:
 E:Black Market
 G:7:D
 W:10
-F:POWER_6 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_6 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x51 --> shop -- home (perm)
@@ -965,7 +965,7 @@ J:
 E:Home
 G:8:y
 W:10
-F:POWER_7 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_7 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x52 --> shop -- bookstore (perm)
@@ -975,7 +975,7 @@ J:
 E:Bookstore
 G:9:o
 W:10
-F:POWER_8 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_8 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 # 0x53 --> terrain -- deep water
@@ -1040,8 +1040,8 @@ G:^:D:LIT
 W:2
 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 | TELEPORTABLE
+F:SUBTYPE_16 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 N:91:TRAP_ALARM
 J:·ÙÊóÁõÃÖ
@@ -1049,8 +1049,8 @@ E:alarm
 G:^:R:LIT
 W:2
 K:DESTROYED:*FLOOR*
-F:POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM | TRAP |
-F:HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_17 | POWER_5 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 N:92:TRAP_OPEN
 J:³«Ì祹¥¤¥Ã¥Á
@@ -1058,8 +1058,8 @@ E:wall opening trap
 G:^:w:LIT
 W:10
 K:DESTROYED:*FLOOR*
-F:POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | DISARM |
-F:TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
+F:SUBTYPE_18 | POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 N:93:FLOWER
 J:²Ö
@@ -1084,7 +1084,7 @@ J:
 E:Museum
 G:0:v
 W:10
-F:POWER_9 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
+F:SUBTYPE_9 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | STORE | DOOR |
 F:PERMANENT | GLOW
 
 N:96:TREE
@@ -1119,7 +1119,7 @@ J:
 E:Building
 G:+:U
 W:10
-F:POWER_0 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_0 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:129:BUILDING_1
@@ -1127,7 +1127,7 @@ J:
 E:Building
 G:+:U
 W:10
-F:POWER_1 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_1 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:130:BUILDING_2
@@ -1135,7 +1135,7 @@ J:
 E:Building
 G:+:v
 W:10
-F:POWER_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:131:BUILDING_3
@@ -1143,7 +1143,7 @@ J:
 E:Building
 G:+:U
 W:10
-F:POWER_3 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_3 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:132:BUILDING_4
@@ -1151,7 +1151,7 @@ J:
 E:Building
 G:+:U
 W:10
-F:POWER_4 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_4 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:133:BUILDING_5
@@ -1159,7 +1159,7 @@ J:
 E:Building
 G:+:U
 W:10
-F:POWER_5 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_5 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:134:BUILDING_6
@@ -1167,7 +1167,7 @@ J:
 E:Building
 G:+:U
 W:10
-F:POWER_6 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_6 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:135:BUILDING_7
@@ -1175,7 +1175,7 @@ J:
 E:Building
 G:+:o
 W:10
-F:POWER_7 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_7 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:136:BUILDING_8
@@ -1183,7 +1183,7 @@ J:
 E:Building
 G:+:R
 W:10
-F:POWER_8 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_8 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:137:BUILDING_9
@@ -1191,7 +1191,7 @@ J:
 E:Building
 G:+:G
 W:10
-F:POWER_9 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_9 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:138:BUILDING_10
@@ -1199,7 +1199,7 @@ J:
 E:Building
 G:+:v
 W:10
-F:POWER_10 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_10 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:139:BUILDING_11
@@ -1207,7 +1207,7 @@ J:
 E:Building
 G:+:u
 W:10
-F:POWER_11 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_11 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:140:BUILDING_12
@@ -1215,7 +1215,7 @@ J:
 E:Building
 G:+:w
 W:10
-F:POWER_12 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_12 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:141:BUILDING_13
@@ -1223,7 +1223,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_13 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_13 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:142:BUILDING_14
@@ -1231,7 +1231,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_14 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_14 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:143:BUILDING_15
@@ -1239,7 +1239,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_15 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_15 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:144:BUILDING_16
@@ -1247,7 +1247,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_16 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_16 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:145:BUILDING_17
@@ -1255,7 +1255,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_17 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_17 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:146:BUILDING_18
@@ -1263,7 +1263,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_18 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_18 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:147:BUILDING_19
@@ -1271,7 +1271,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_19 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_19 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:148:BUILDING_20
@@ -1279,7 +1279,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_20 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_20 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:149:BUILDING_21
@@ -1287,7 +1287,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_21 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_21 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:150:BUILDING_22
@@ -1295,7 +1295,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_22 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_22 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:151:BUILDING_23
@@ -1303,7 +1303,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_23 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_23 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:152:BUILDING_24
@@ -1311,7 +1311,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_24 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_24 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:153:BUILDING_25
@@ -1319,7 +1319,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_25 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_25 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:154:BUILDING_26
@@ -1327,7 +1327,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_26 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_26 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:155:BUILDING_27
@@ -1335,7 +1335,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_27 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_27 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:156:BUILDING_28
@@ -1343,7 +1343,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_28 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_28 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:157:BUILDING_29
@@ -1351,7 +1351,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_29 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_29 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:158:BUILDING_30
@@ -1359,7 +1359,7 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_30 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_30 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 N:159:BUILDING_31
@@ -1367,45 +1367,46 @@ J:
 E:Building
 G:+:B
 W:10
-F:POWER_31 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:SUBTYPE_31 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
 F:GLOW | BLDG
 
 #### Special fake terrains (160-166) ####
 
 N:160:*FLOOR*
 M:FLOOR
-F:POWER_0 | CONVERT
+F:SUBTYPE_0 | CONVERT
 
 N:161:*WALL*
 M:GRANITE
-F:POWER_1 | CONVERT
+F:SUBTYPE_1 | CONVERT
 
 N:162:*INNER*
 M:GRANITE
-F:POWER_2 | CONVERT
+F:SUBTYPE_2 | CONVERT
 
 N:163:*OUTER*
 M:GRANITE
-F:POWER_3 | CONVERT
+F:SUBTYPE_3 | CONVERT
 
 N:164:*SOLID*
 M:GRANITE
-F:POWER_4 | CONVERT
+F:SUBTYPE_4 | CONVERT
 
 N:165:*STREAM1*
 M:MAGMA_VEIN
-F:POWER_5 | CONVERT
+F:SUBTYPE_5 | CONVERT
 
 N:166:*STREAM2*
 M:QUARTZ_VEIN
-F:POWER_6 | CONVERT
+F:SUBTYPE_6 | CONVERT
 
 N:191:ARENA_GATE
 J:Æþ¾ìÌç
 E:gate of arena
 G:+:v
 W:10
-F:POWER_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT | BLDG
+F:SUBTYPE_2 | LOS | PROJECT | MOVE | NOTICE | REMEMBER | DOOR | PERMANENT |
+F:BLDG
 
 N:192:TOWN
 J:³¹
@@ -1453,8 +1454,8 @@ G:^:v:LIT
 W:10
 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 | TELEPORTABLE
+F:SUBTYPE_19 | POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 N:198:TRAP_PIRANHA
 J:¥Ô¥é¥Ë¥¢¡¦¥È¥é¥Ã¥×
@@ -1463,8 +1464,8 @@ G:^:b:LIT
 W:10
 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 | TELEPORTABLE
+F:SUBTYPE_20 | POWER_100 | LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER |
+F:DISARM | TRAP | HIT_TRAP | CAN_FLY | HURT_DISI | TELEPORTABLE
 
 #### Glass features (199-219) (for testing) ####
 
index fed7b6d..797111f 100644 (file)
@@ -4914,7 +4914,7 @@ void do_cmd_bldg(void)
                return;
        }
 
-       which = f_info[cave[py][px].feat].power;
+       which = f_info[cave[py][px].feat].subtype;
 
        bldg = &building[which];
 
index 7739bf8..3ea8918 100644 (file)
@@ -968,7 +968,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp)
                        else if (darkened_grid(c_ptr))
                        {
                                /* Unsafe cave grid -- idea borrowed from Unangband */
-                               feat = (view_unsafe_grids && (c_ptr->info & CAVE_UNSAFE)) ? FEAT_UNDETECTED : FEAT_NONE;
+                               feat = (view_unsafe_grids && (c_ptr->info & CAVE_UNSAFE)) ? feat_undetected : feat_none;
 
                                /* Access darkness */
                                f_ptr = &f_info[feat];
@@ -1019,10 +1019,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp)
                else
                {
                        /* Unsafe cave grid -- idea borrowed from Unangband */
-                       if (view_unsafe_grids && (c_ptr->info & (CAVE_UNSAFE)))
-                               feat = FEAT_UNDETECTED;
-                       else
-                               feat = FEAT_NONE;
+                       feat = (view_unsafe_grids && (c_ptr->info & CAVE_UNSAFE)) ? feat_undetected : feat_none;
 
                        /* Access darkness */
                        f_ptr = &f_info[feat];
@@ -1061,7 +1058,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp)
                                if (have_flag(f_ptr->flags, FF_LOS) && have_flag(f_ptr->flags, FF_PROJECT))
                                {
                                        /* Unsafe cave grid -- idea borrowed from Unangband */
-                                       feat = (view_unsafe_grids && (c_ptr->info & CAVE_UNSAFE)) ? FEAT_UNDETECTED : FEAT_NONE;
+                                       feat = (view_unsafe_grids && (c_ptr->info & CAVE_UNSAFE)) ? feat_undetected : feat_none;
 
                                        /* Access darkness */
                                        f_ptr = &f_info[feat];
@@ -1135,10 +1132,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp)
                else
                {
                        /* Unsafe cave grid -- idea borrowed from Unangband */
-                       if (view_unsafe_grids && (c_ptr->info & (CAVE_UNSAFE)))
-                               feat = FEAT_UNDETECTED;
-                       else
-                               feat = FEAT_NONE;
+                       feat = (view_unsafe_grids && (c_ptr->info & CAVE_UNSAFE)) ? feat_undetected : feat_none;
 
                        /* Access feature */
                        f_ptr = &f_info[feat];
@@ -1572,7 +1566,7 @@ void display_dungeon(void)
                                /* Clear out-of-bound tiles */
 
                                /* Access darkness */
-                               feature_type *f_ptr = &f_info[FEAT_NONE];
+                               feature_type *f_ptr = &f_info[feat_none];
 
                                /* Normal attr */
                                a = f_ptr->x_attr[F_LIT_STANDARD];
@@ -4654,7 +4648,7 @@ int conv_dungeon_feat(int newfeat)
 
        if (have_flag(f_ptr->flags, FF_CONVERT))
        {
-               switch (f_ptr->power)
+               switch (f_ptr->subtype)
                {
                case CONVERT_TYPE_FLOOR:
                        return floor_type[randint0(100)];
index e5181cb..2e98edf 100644 (file)
@@ -1074,8 +1074,8 @@ static void hit_trap(bool break_trap)
 
        /* Get the cave grid */
        cave_type *c_ptr = &cave[y][x];
-
-       int trap_feat = c_ptr->feat;
+       feature_type *f_ptr = &f_info[c_ptr->feat];
+       int trap_feat_type = have_flag(f_ptr->flags, FF_TRAP) ? f_ptr->subtype : NOT_TRAP;
 
 #ifdef JP
        cptr name = "¥È¥é¥Ã¥×";
@@ -1089,9 +1089,9 @@ static void hit_trap(bool break_trap)
        cave_alter_feat(y, x, FF_HIT_TRAP);
 
        /* Analyze XXX XXX XXX */
-       switch (trap_feat)
+       switch (trap_feat_type)
        {
-               case FEAT_TRAP_TRAPDOOR:
+               case TRAP_TRAPDOOR:
                {
                        if (p_ptr->levitation)
                        {
@@ -1139,7 +1139,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_PIT:
+               case TRAP_PIT:
                {
                        if (p_ptr->levitation)
                        {
@@ -1170,7 +1170,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_SPIKED_PIT:
+               case TRAP_SPIKED_PIT:
                {
                        if (p_ptr->levitation)
                        {
@@ -1225,7 +1225,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_POISON_PIT:
+               case TRAP_POISON_PIT:
                {
                        if (p_ptr->levitation)
                        {
@@ -1299,7 +1299,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_TY_CURSE:
+               case TRAP_TY_CURSE:
                {
 #ifdef JP
                        msg_print("²¿¤«¤¬¥Ô¥«¥Ã¤È¸÷¤Ã¤¿¡ª");
@@ -1327,7 +1327,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_TELEPORT:
+               case TRAP_TELEPORT:
                {
 #ifdef JP
                        msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥È¥é¥Ã¥×¤Ë¤Ò¤Ã¤«¤«¤Ã¤¿¡ª");
@@ -1339,7 +1339,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_FIRE:
+               case TRAP_FIRE:
                {
 #ifdef JP
                        msg_print("±ê¤ËÊñ¤Þ¤ì¤¿¡ª");
@@ -1357,7 +1357,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_ACID:
+               case TRAP_ACID:
                {
 #ifdef JP
                        msg_print("»À¤¬¿á¤­¤«¤±¤é¤ì¤¿¡ª");
@@ -1375,7 +1375,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_SLOW:
+               case TRAP_SLOW:
                {
                        if (check_hit(125))
                        {
@@ -1401,7 +1401,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_LOSE_STR:
+               case TRAP_LOSE_STR:
                {
                        if (check_hit(125))
                        {
@@ -1432,7 +1432,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_LOSE_DEX:
+               case TRAP_LOSE_DEX:
                {
                        if (check_hit(125))
                        {
@@ -1463,7 +1463,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_LOSE_CON:
+               case TRAP_LOSE_CON:
                {
                        if (check_hit(125))
                        {
@@ -1494,7 +1494,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_BLIND:
+               case TRAP_BLIND:
                {
 #ifdef JP
                        msg_print("¹õ¤¤¥¬¥¹¤ËÊñ¤ß¹þ¤Þ¤ì¤¿¡ª");
@@ -1509,7 +1509,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_CONFUSE:
+               case TRAP_CONFUSE:
                {
 #ifdef JP
                        msg_print("¤­¤é¤á¤¯¥¬¥¹¤ËÊñ¤ß¹þ¤Þ¤ì¤¿¡ª");
@@ -1524,7 +1524,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_POISON:
+               case TRAP_POISON:
                {
 #ifdef JP
                        msg_print("»É·ãŪ¤ÊÎп§¤Î¥¬¥¹¤ËÊñ¤ß¹þ¤Þ¤ì¤¿¡ª");
@@ -1539,7 +1539,7 @@ static void hit_trap(bool break_trap)
                        break;
                }
 
-               case FEAT_TRAP_SLEEP:
+               case TRAP_SLEEP:
                {
 #ifdef JP
                        msg_print("´ñ̯¤ÊÇò¤¤Ì¸¤ËÊñ¤Þ¤ì¤¿¡ª");
@@ -1579,7 +1579,7 @@ msg_print("
                        break;
                }
 
-               case FEAT_TRAP_TRAPS:
+               case TRAP_TRAPS:
                {
 #ifdef JP
 msg_print("¤Þ¤Ð¤æ¤¤Á®¸÷¤¬Áö¤Ã¤¿¡ª");
@@ -1593,7 +1593,7 @@ msg_print("
                        break;
                }
 
-               case FEAT_TRAP_ALARM:
+               case TRAP_ALARM:
                {
 #ifdef JP
                        msg_print("¤±¤¿¤¿¤Þ¤·¤¤²»¤¬ÌĤê¶Á¤¤¤¿¡ª");
@@ -1606,7 +1606,7 @@ msg_print("
                        break;
                }
 
-               case FEAT_TRAP_OPEN:
+               case TRAP_OPEN:
                {
 #ifdef JP
                        msg_print("Âç²»¶Á¤È¶¦¤Ë¤Þ¤ï¤ê¤ÎÊɤ¬Êø¤ì¤¿¡ª");
@@ -1621,7 +1621,7 @@ msg_print("
                        break;
                }
 
-               case FEAT_TRAP_ARMAGEDDON:
+               case TRAP_ARMAGEDDON:
                {
                        static int levs[10] = {0, 0, 20, 10, 5, 3, 2, 1, 1, 1};
                        int evil_idx = 0, good_idx = 0;
@@ -1671,7 +1671,7 @@ msg_print("
                        break;
                }
 
-               case FEAT_TRAP_PIRANHA:
+               case TRAP_PIRANHA:
                {
 #ifdef JP
                        msg_print("ÆÍÁ³Êɤ«¤é¿å¤¬°î¤ì½Ð¤·¤¿¡ª¥Ô¥é¥Ë¥¢¤¬¤¤¤ë¡ª");
@@ -3283,8 +3283,8 @@ bool pattern_seq(int c_y, int c_x, int n_y, int n_x)
 
        if (!is_pattern_tile_cur && !is_pattern_tile_new) return TRUE;
 
-       pattern_type_cur = is_pattern_tile_cur ? cur_f_ptr->power : NOT_PATTERN_TILE;
-       pattern_type_new = is_pattern_tile_new ? new_f_ptr->power : NOT_PATTERN_TILE;
+       pattern_type_cur = is_pattern_tile_cur ? cur_f_ptr->subtype : NOT_PATTERN_TILE;
+       pattern_type_new = is_pattern_tile_new ? new_f_ptr->subtype : NOT_PATTERN_TILE;
 
        if (pattern_type_new == PATTERN_TILE_START)
        {
@@ -3689,33 +3689,37 @@ bool move_player_effect(int ny, int nx, u32b mpe_mode)
 
 bool trap_can_be_ignored(int feat)
 {
-       switch (feat)
+       feature_type *f_ptr = &f_info[feat];
+
+       if (!have_flag(f_ptr->flags, FF_TRAP)) return TRUE;
+
+       switch (f_ptr->subtype)
        {
-       case FEAT_TRAP_TRAPDOOR:
-       case FEAT_TRAP_PIT:
-       case FEAT_TRAP_SPIKED_PIT:
-       case FEAT_TRAP_POISON_PIT:
+       case TRAP_TRAPDOOR:
+       case TRAP_PIT:
+       case TRAP_SPIKED_PIT:
+       case TRAP_POISON_PIT:
                if (p_ptr->levitation) return TRUE;
                break;
-       case FEAT_TRAP_TELEPORT:
+       case TRAP_TELEPORT:
                if (p_ptr->anti_tele) return TRUE;
                break;
-       case FEAT_TRAP_FIRE:
+       case TRAP_FIRE:
                if (p_ptr->immune_fire) return TRUE;
                break;
-       case FEAT_TRAP_ACID:
+       case TRAP_ACID:
                if (p_ptr->immune_acid) return TRUE;
                break;
-       case FEAT_TRAP_BLIND:
+       case TRAP_BLIND:
                if (p_ptr->resist_blind) return TRUE;
                break;
-       case FEAT_TRAP_CONFUSE:
+       case TRAP_CONFUSE:
                if (p_ptr->resist_conf) return TRUE;
                break;
-       case FEAT_TRAP_POISON:
+       case TRAP_POISON:
                if (p_ptr->resist_pois) return TRUE;
                break;
-       case FEAT_TRAP_SLEEP:
+       case TRAP_SLEEP:
                if (p_ptr->free_act) return TRUE;
                break;
        }
index d98190f..15ec36b 100644 (file)
 #define MAX_FEAT_STATES         8
 
 
-/*** Terrain Feature Indexes (see "lib/edit/f_info.txt") ***/
-
-/* Nothing */
-#define FEAT_NONE               0x00
-
-/* Various */
-#define FEAT_FLOOR              0x01
-#define FEAT_INVIS              0x02
-#define FEAT_GLYPH              0x03
-#define FEAT_OPEN               0x04
-#define FEAT_BROKEN             0x05
-#define FEAT_LESS               0x06
-#define FEAT_MORE               0x07
-
-/* Quest features -KMW- */
-#define FEAT_QUEST_ENTER               0x08
-#define FEAT_QUEST_EXIT                        0x09
-#define FEAT_QUEST_DOWN                        0x0A
-#define FEAT_QUEST_UP                  0x0B
-
-#define FEAT_LESS_LESS          0x0D
-#define FEAT_MORE_MORE          0x0E
-
-/* Feature 0x0E - 0x0F unused */
-
-/* Traps */
-#define FEAT_TRAP_TRAPDOOR      0x10
-#define FEAT_TRAP_PIT           0x11
-#define FEAT_TRAP_SPIKED_PIT    0x12
-#define FEAT_TRAP_POISON_PIT    0x13
-#define FEAT_TRAP_TY_CURSE      0x14
-#define FEAT_TRAP_TELEPORT      0x15
-#define FEAT_TRAP_FIRE          0x16
-#define FEAT_TRAP_ACID          0x17
-#define FEAT_TRAP_SLOW          0x18
-#define FEAT_TRAP_LOSE_STR      0x19
-#define FEAT_TRAP_LOSE_DEX      0x1A
-#define FEAT_TRAP_LOSE_CON      0x1B
-#define FEAT_TRAP_BLIND         0x1C
-#define FEAT_TRAP_CONFUSE       0x1D
-#define FEAT_TRAP_POISON        0x1E
-#define FEAT_TRAP_SLEEP         0x1F
-
-/* Doors */
-#define FEAT_DOOR_HEAD          0x20
-#define FEAT_DOOR_TAIL          0x2F
-
-/* Extra */
-#define FEAT_SECRET             0x30
-#define FEAT_RUBBLE             0x31
-
-/* Seams */
-#define FEAT_MAGMA              0x32
-#define FEAT_QUARTZ             0x33
-#define FEAT_MAGMA_H            0x34
-#define FEAT_QUARTZ_H           0x35
-#define FEAT_MAGMA_K            0x36
-#define FEAT_QUARTZ_K           0x37
-
-/* Walls */
-#define FEAT_WALL               0x38
-#define FEAT_WALL_INNER         0x39
-#define FEAT_WALL_OUTER         0x3A
-#define FEAT_WALL_SOLID         0x3B
-#define FEAT_PERM               0x3C
-#define FEAT_PERM_INNER         0x3D
-#define FEAT_PERM_OUTER         0x3E
-#define FEAT_PERM_SOLID         0x3F
-
-/* Glyph */
-#define FEAT_MINOR_GLYPH        0x40
-
-/* Pattern */
-#define FEAT_PATTERN_START      0x41
-#define FEAT_PATTERN_1          0x42
-#define FEAT_PATTERN_2          0x43
-#define FEAT_PATTERN_3          0x44
-#define FEAT_PATTERN_4          0x45
-#define FEAT_PATTERN_END        0x46
-#define FEAT_PATTERN_OLD        0x47
-#define FEAT_PATTERN_XTRA1      0x48
-#define FEAT_PATTERN_XTRA2      0x49
-
-/* Shops */
-#define FEAT_SHOP_HEAD          0x4A
-#define FEAT_SHOP_TAIL          0x52
-
-/* Terrains */
-#define FEAT_DEEP_WATER         0x53
-#define FEAT_SHAL_WATER         0x54
-#define FEAT_DEEP_LAVA          0x55
-#define FEAT_SHAL_LAVA          0x56
-#define FEAT_DARK_PIT           0x57
-#define FEAT_DIRT               0x58
-#define FEAT_GRASS              0x59
-
-#define FEAT_TRAP_TRAPS         0x5A
-#define FEAT_TRAP_ALARM         0x5B
-#define FEAT_TRAP_OPEN          0x5C
-
-#define FEAT_FLOWER             0x5D
-#define FEAT_DEEP_GRASS         0x5E
-#define FEAT_MUSEUM             0x5F
-
-/* Terrain */
-#define FEAT_TREES              0x60
-#define FEAT_MOUNTAIN           0x61
-#define FEAT_MOUNTAIN_WALL      0x62
-
-/* Feature 0x63 - 0x7F unused */
-
-/* Buildings */
-#define FEAT_BLDG_HEAD          0x80
-#define FEAT_BLDG_TAIL          0x9F
-
-/* Hack -- Special fake terrains for f_info */
-#define FEAT_CONVERT_FLOOR      0xa0
-#define FEAT_CONVERT_WALL       0xa1
-#define FEAT_CONVERT_INNER      0xa2
-#define FEAT_CONVERT_OUTER      0xa3
-#define FEAT_CONVERT_SOLID      0xa4
-#define FEAT_CONVERT_STREAM1    0xa5
-#define FEAT_CONVERT_STREAM2    0xa6
-
-#define FEAT_TOWN               0xc0
-#define FEAT_ENTRANCE           0xc1
-#define FEAT_SWAMP              0xc2
-
-/* for mirror master */
-#define FEAT_MIRROR             0xc3
-
-/* unknown grid (not detected)  */
-#define FEAT_UNDETECTED         0xc4
-
-/* special traps */
-#define FEAT_TRAP_ARMAGEDDON    0xc5
-#define FEAT_TRAP_PIRANHA       0xc6
-
 /*
  * Wilderness terrains
  */
 #define TELEPORT_DEC_VALOUR 0x00000004
 
 
-/* Type of pattern tiles */
+/* Types of normal traps */
+#define NOT_TRAP        -1
+#define TRAP_TRAPDOOR    0
+#define TRAP_PIT         1
+#define TRAP_SPIKED_PIT  2
+#define TRAP_POISON_PIT  3
+#define TRAP_TY_CURSE    4
+#define TRAP_TELEPORT    5
+#define TRAP_FIRE        6
+#define TRAP_ACID        7
+#define TRAP_SLOW        8
+#define TRAP_LOSE_STR    9
+#define TRAP_LOSE_DEX   10
+#define TRAP_LOSE_CON   11
+#define TRAP_BLIND      12
+#define TRAP_CONFUSE    13
+#define TRAP_POISON     14
+#define TRAP_SLEEP      15
+#define TRAP_TRAPS      16
+#define TRAP_ALARM      17
+
+
+/* Types of special traps */
+#define TRAP_OPEN       18
+#define TRAP_ARMAGEDDON 19
+#define TRAP_PIRANHA    20
+
+
+/* Maximum locked/jammed doors */
+#define MAX_LJ_DOORS 8
+
+
+/* Types of pattern tiles */
 #define NOT_PATTERN_TILE      -1
 #define PATTERN_TILE_START    0
 #define PATTERN_TILE_1        1
 #define PATTERN_TILE_WRECKED  8
 
 
-/* Type of conversions */
+/* Types of conversions */
 #define CONVERT_TYPE_FLOOR   0
 #define CONVERT_TYPE_WALL    1
 #define CONVERT_TYPE_INNER   2
index a9b055f..ca15a0d 100644 (file)
@@ -688,7 +688,7 @@ static void pattern_teleport(void)
 static void wreck_the_pattern(void)
 {
        int to_ruin = 0, r_y, r_x;
-       int pattern_type = f_info[cave[py][px].feat].power;
+       int pattern_type = f_info[cave[py][px].feat].subtype;
 
        if (pattern_type == PATTERN_TILE_WRECKED)
        {
@@ -718,13 +718,13 @@ static void wreck_the_pattern(void)
                scatter(&r_y, &r_x, py, px, 4, 0);
 
                if (pattern_tile(r_y, r_x) &&
-                   (f_info[cave[r_y][r_x].feat].power != PATTERN_TILE_WRECKED))
+                   (f_info[cave[r_y][r_x].feat].subtype != PATTERN_TILE_WRECKED))
                {
-                       cave_set_feat(r_y, r_x, FEAT_PATTERN_XTRA2);
+                       cave_set_feat(r_y, r_x, feat_pattern_corrupted);
                }
        }
 
-       cave_set_feat(py, px, FEAT_PATTERN_XTRA2);
+       cave_set_feat(py, px, feat_pattern_corrupted);
 }
 
 
@@ -741,7 +741,7 @@ static bool pattern_effect(void)
                wreck_the_pattern();
        }
 
-       pattern_type = f_info[cave[py][px].feat].power;
+       pattern_type = f_info[cave[py][px].feat].subtype;
 
        switch (pattern_type)
        {
@@ -761,7 +761,7 @@ static bool pattern_effect(void)
                (void)restore_level();
                (void)hp_player(1000);
 
-               cave_set_feat(py, px, FEAT_PATTERN_OLD);
+               cave_set_feat(py, px, feat_pattern_old);
 
 #ifdef JP
                msg_print("¡Ö¥Ñ¥¿¡¼¥ó¡×¤Î¤³¤ÎÉôʬ¤Ï¾¤ÎÉôʬ¤è¤ê¶¯ÎϤǤʤ¤¤è¤¦¤À¡£");
@@ -3953,7 +3953,7 @@ msg_print("
                                        if (!have_flag(f_ptr->flags, FF_STORE)) continue;
 
                                        /* Verify store type */
-                                       if (f_ptr->power == n)
+                                       if (f_ptr->subtype == n)
                                        {
                                                /* Message */
 #ifdef JP
index 6f691c3..7137f01 100644 (file)
@@ -108,7 +108,6 @@ extern cptr game_inscriptions[];
 extern kamae kamae_shurui[MAX_KAMAE];
 extern kamae kata_shurui[MAX_KATA];
 extern cptr exp_level_str[5];
-extern s16b conv_terrain2feat[MAX_WILDERNESS];
 extern cptr silly_attacks[MAX_SILLY_ATTACK];
 #ifdef JP
 extern cptr silly_attacks2[MAX_SILLY_ATTACK];
@@ -563,6 +562,55 @@ extern bool mon_fight;
 extern bool ambush_flag;
 extern bool generate_encounter;
 extern cptr screen_dump;
+
+/*** Terrain feature variables ***/
+extern s16b feat_none;
+extern s16b feat_floor;
+extern s16b feat_glyph;
+extern s16b feat_explosive_rune;
+extern s16b feat_mirror;
+extern s16b feat_open_door;
+extern s16b feat_broken_door;
+extern s16b feat_closed_door;
+extern s16b feat_locked_door[MAX_LJ_DOORS];
+extern s16b num_locked_door;
+extern s16b feat_jammed_door[MAX_LJ_DOORS];
+extern s16b num_jammed_door;
+extern s16b feat_up_stair;
+extern s16b feat_down_stair;
+extern s16b feat_entrance;
+extern s16b feat_trap_open;
+extern s16b feat_trap_armageddon;
+extern s16b feat_trap_piranha;
+extern s16b feat_rubble;
+extern s16b feat_magma_vein;
+extern s16b feat_quartz_vein;
+extern s16b feat_granite;
+extern s16b feat_permanent;
+extern s16b feat_pattern_start;
+extern s16b feat_pattern_1;
+extern s16b feat_pattern_2;
+extern s16b feat_pattern_3;
+extern s16b feat_pattern_4;
+extern s16b feat_pattern_end;
+extern s16b feat_pattern_old;
+extern s16b feat_pattern_exit;
+extern s16b feat_pattern_corrupted;
+extern s16b feat_black_market;
+extern s16b feat_town;
+extern s16b feat_deep_water;
+extern s16b feat_shallow_water;
+extern s16b feat_deep_lava;
+extern s16b feat_shallow_lava;
+extern s16b feat_dirt;
+extern s16b feat_grass;
+extern s16b feat_flower;
+extern s16b feat_brake;
+extern s16b feat_tree;
+extern s16b feat_mountain;
+extern s16b feat_swamp;
+extern s16b feat_undetected;
+
 extern byte dungeon_type;
 extern s16b *max_dlv;
 extern s16b feat_wall_outer;
@@ -848,6 +896,7 @@ extern void init_file_paths(char *path);
 extern cptr err_str[PARSE_ERROR_MAX];
 extern errr init_v_info(void);
 extern errr init_buildings(void);
+extern s16b f_tag_to_index_in_init(cptr str);
 extern void init_angband(void);
 extern cptr get_check_sum(void);
 
@@ -985,6 +1034,7 @@ extern bool make_gold(object_type *j_ptr);
 extern void place_gold(int y, int x);
 extern s16b drop_near(object_type *o_ptr, int chance, int y, int x);
 extern void acquirement(int y1, int x1, int num, bool great, bool known);
+extern void init_normal_traps(void);
 extern s16b choose_random_trap(void);
 extern void disclose_grid(int y, int x);
 extern void place_trap(int y, int x);
@@ -1605,6 +1655,7 @@ extern void set_floor_and_wall(byte type);
 extern void wilderness_gen(void);
 extern void wilderness_gen_small(void);
 extern errr init_wilderness(void);
+extern void init_wilderness_terrains(void);
 extern void seed_wilderness(void);
 extern errr parse_line_wilderness(char *buf, int ymin, int xmin, int ymax, int xmax, int *y, int *x);
 extern bool change_wild_mode(void);
index 05bf6a2..49490a6 100644 (file)
@@ -1326,19 +1326,13 @@ void change_floor(void)
                                /* No stairs down from Quest */
                                if ((change_floor_mode & CFM_UP) && !quest_number(dun_level))
                                {
-                                       if (change_floor_mode & CFM_SHAFT)
-                                               c_ptr->feat = FEAT_MORE_MORE;
-                                       else
-                                               c_ptr->feat = FEAT_MORE;
+                                       c_ptr->feat = (change_floor_mode & CFM_SHAFT) ? feat_state(feat_down_stair, FF_SHAFT) : feat_down_stair;
                                }
 
                                /* No stairs up when ironman_downward */
                                else if ((change_floor_mode & CFM_DOWN) && !ironman_downward)
                                {
-                                       if (change_floor_mode & CFM_SHAFT)
-                                               c_ptr->feat = FEAT_LESS_LESS;
-                                       else
-                                               c_ptr->feat = FEAT_LESS;
+                                       c_ptr->feat = (change_floor_mode & CFM_SHAFT) ? feat_state(feat_up_stair, FF_SHAFT) : feat_up_stair;
                                }
 
                                /* Paranoia -- Clear mimic */
@@ -1536,17 +1530,15 @@ void stair_creation(void)
        /* Create a staircase */
        if (up)
        {
-               if (dest_sf_ptr->last_visit && dest_sf_ptr->dun_level <= dun_level - 2)
-                       cave_set_feat(py, px, FEAT_LESS_LESS);
-               else
-                       cave_set_feat(py, px, FEAT_LESS);
+               cave_set_feat(py, px,
+                       (dest_sf_ptr->last_visit && (dest_sf_ptr->dun_level <= dun_level - 2)) ?
+                       feat_state(feat_up_stair, FF_SHAFT) : feat_up_stair);
        }
        else
        {
-               if (dest_sf_ptr->last_visit && dest_sf_ptr->dun_level >= dun_level + 2)
-                       cave_set_feat(py, px, FEAT_MORE_MORE);
-               else
-                       cave_set_feat(py, px, FEAT_MORE);
+               cave_set_feat(py, px,
+                       (dest_sf_ptr->last_visit && (dest_sf_ptr->dun_level >= dun_level + 2)) ?
+                       feat_state(feat_down_stair, FF_SHAFT) : feat_down_stair);
        }
 
 
index d26df9d..dc1d04c 100644 (file)
@@ -793,10 +793,10 @@ static bool cave_gen(void)
                build_maze_vault(cur_wid/2-1, cur_hgt/2-1, cur_wid-4, cur_hgt-4, FALSE);
 
                /* Place 3 or 4 down stairs near some walls */
-               if (!alloc_stairs(FEAT_MORE, rand_range(2, 3), 3)) return FALSE;
+               if (!alloc_stairs(feat_down_stair, rand_range(2, 3), 3)) return FALSE;
 
                /* Place 1 or 2 up stairs near some walls */
-               if (!alloc_stairs(FEAT_LESS, 1, 3)) return FALSE;
+               if (!alloc_stairs(feat_up_stair, 1, 3)) return FALSE;
        }
 
        /* Build some rooms */
@@ -828,13 +828,13 @@ static bool cave_gen(void)
                        /* Choose water or lava */
                        if ((randint1(MAX_DEPTH * 2) - 1 > dun_level) && (d_info[dungeon_type].flags1 & DF1_WATER_RIVER))
                        {
-                               feat1 = FEAT_DEEP_WATER;
-                               feat2 = FEAT_SHAL_WATER;
+                               feat1 = feat_deep_water;
+                               feat2 = feat_shallow_water;
                        }
                        else if  (d_info[dungeon_type].flags1 & DF1_LAVA_RIVER)
                        {
-                               feat1 = FEAT_DEEP_LAVA;
-                               feat2 = FEAT_SHAL_LAVA;
+                               feat1 = feat_deep_lava;
+                               feat2 = feat_shallow_lava;
                        }
                        else feat1 = 0;
 
@@ -964,10 +964,10 @@ static bool cave_gen(void)
                }
 
                /* Place 3 or 4 down stairs near some walls */
-               if (!alloc_stairs(FEAT_MORE, rand_range(3, 4), 3)) return FALSE;
+               if (!alloc_stairs(feat_down_stair, rand_range(3, 4), 3)) return FALSE;
 
                /* Place 1 or 2 up stairs near some walls */
-               if (!alloc_stairs(FEAT_LESS, rand_range(1, 2), 3)) return FALSE;
+               if (!alloc_stairs(feat_up_stair, rand_range(1, 2), 3)) return FALSE;
        }
 
        if (!dun->laketype)
@@ -1178,7 +1178,7 @@ static void arena_gen(void)
                for (x = qx + 1; x < qx + SCREEN_WID - 1; x++)
                {
                        /* Create empty floor */
-                       cave[y][x].feat = FEAT_FLOOR;
+                       cave[y][x].feat = feat_floor;
                }
        }
 
@@ -1241,7 +1241,7 @@ static void build_battle(void)
 
        i = y_height + 4;
        j = xval;
-       cave[i][j].feat = FEAT_BLDG_HEAD + 3;
+       cave[i][j].feat = f_tag_to_index("BUILDING_3");
        cave[i][j].info |= (CAVE_GLOW | CAVE_MARK);
        player_place(i, j);
 }
@@ -1275,7 +1275,7 @@ static void battle_gen(void)
                for (x = qx + 1; x < qx + SCREEN_WID - 1; x++)
                {
                        /* Create empty floor */
-                       cave[y][x].feat = FEAT_FLOOR;
+                       cave[y][x].feat = feat_floor;
                }
        }
 
index 61e7c17..79cbc84 100644 (file)
@@ -147,14 +147,14 @@ void place_random_door(int y, int x, bool room)
        if (tmp < 300)
        {
                /* Create open door */
-               set_cave_feat(y, x, FEAT_OPEN);
+               set_cave_feat(y, x, feat_open_door);
        }
 
        /* Broken doors (100/1000) */
        else if (tmp < 400)
        {
                /* Create broken door */
-               set_cave_feat(y, x, FEAT_BROKEN);
+               set_cave_feat(y, x, feat_broken_door);
        }
 
        /* Secret doors (200/1000) */
@@ -204,21 +204,21 @@ void place_closed_door(int y, int x)
        if (tmp < 300)
        {
                /* Create closed door */
-               cave_set_feat(y, x, FEAT_DOOR_HEAD + 0x00);
+               cave_set_feat(y, x, feat_closed_door);
        }
 
        /* Locked doors (99/400) */
        else if (tmp < 399)
        {
                /* Create locked door */
-               cave_set_feat(y, x, FEAT_DOOR_HEAD + randint1(7));
+               cave_set_feat(y, x, feat_locked_door[randint0(num_locked_door)]);
        }
 
        /* Stuck doors (1/400) */
        else
        {
                /* Create jammed door */
-               cave_set_feat(y, x, FEAT_DOOR_HEAD + 0x08 + randint0(8));
+               cave_set_feat(y, x, feat_jammed_door[randint0(num_jammed_door)]);
        }
 
        /* Now it is not floor */
index 96f5219..cc9e36e 100644 (file)
@@ -21,9 +21,9 @@
 /* This should not be used */
 /*#define set_cave_info(Y,X,I)    (cave[(Y)][(X)].info = (I)) */
 
-#define place_rubble(Y,X)       set_cave_feat(Y,X,FEAT_RUBBLE)
-#define place_up_stairs(Y,X)    set_cave_feat(Y,X,FEAT_LESS)
-#define place_down_stairs(Y,X)  set_cave_feat(Y,X,FEAT_MORE)
+#define place_rubble(Y,X)       set_cave_feat(Y,X,feat_rubble)
+#define place_up_stairs(Y,X)    set_cave_feat(Y,X,feat_up_stair)
+#define place_down_stairs(Y,X)  set_cave_feat(Y,X,feat_down_stair)
 
 #define is_floor_bold(Y,X) (cave[Y][X].info & CAVE_FLOOR)
 #define is_extra_bold(Y,X) (cave[Y][X].info & CAVE_EXTRA)
@@ -71,7 +71,7 @@
 
 #define place_extra_perm_bold(Y, X) \
 { \
-       set_cave_feat(Y,X,FEAT_PERM); \
+       set_cave_feat(Y,X,feat_permanent); \
        cave[Y][X].info &= ~(CAVE_MASK); \
        add_cave_info(Y,X,CAVE_EXTRA); \
        delete_monster(Y, X); \
@@ -79,7 +79,7 @@
 
 #define place_extra_perm_grid(C) \
 { \
-       (C)->feat = FEAT_PERM; \
+       (C)->feat = feat_permanent; \
        (C)->info &= ~(CAVE_MASK); \
        (C)->info |= CAVE_EXTRA; \
        if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
 
 #define place_inner_perm_bold(Y, X) \
 { \
-       set_cave_feat(Y,X,FEAT_PERM); \
+       set_cave_feat(Y,X,feat_permanent); \
        cave[Y][X].info &= ~(CAVE_MASK); \
        add_cave_info(Y,X,CAVE_INNER); \
        delete_monster(Y, X); \
 
 #define place_inner_perm_grid(C) \
 { \
-       (C)->feat = FEAT_PERM; \
+       (C)->feat = feat_permanent; \
        (C)->info &= ~(CAVE_MASK); \
        (C)->info |= CAVE_INNER; \
        if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
 
 #define place_outer_perm_bold(Y, X) \
 { \
-       set_cave_feat(Y,X,FEAT_PERM); \
+       set_cave_feat(Y,X,feat_permanent); \
        cave[Y][X].info &= ~(CAVE_MASK); \
        add_cave_info(Y,X,CAVE_OUTER); \
        delete_monster(Y, X); \
 
 #define place_outer_perm_grid(C) \
 { \
-       (C)->feat = FEAT_PERM; \
+       (C)->feat = feat_permanent; \
        (C)->info &= ~(CAVE_MASK); \
        (C)->info |= CAVE_OUTER; \
        if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
 
 #define place_solid_perm_bold(Y, X) \
 { \
-       set_cave_feat(Y,X,FEAT_PERM); \
+       set_cave_feat(Y,X,feat_permanent); \
        cave[Y][X].info &= ~(CAVE_MASK); \
        add_cave_info(Y,X,CAVE_SOLID); \
        delete_monster(Y, X); \
 
 #define place_solid_perm_grid(C) \
 { \
-       (C)->feat = FEAT_PERM; \
+       (C)->feat = feat_permanent; \
        (C)->info &= ~(CAVE_MASK); \
        (C)->info |= CAVE_SOLID; \
        if ((C)->m_idx) delete_monster_idx((C)->m_idx); \
index 2fc8f33..21fc0e7 100644 (file)
@@ -1643,6 +1643,19 @@ errr parse_f_info(char *buf, header *head)
                                while (*t == ' ' || *t == '|') t++;
                        }
 
+                       /* XXX XXX XXX Hack -- Read feature subtype */
+                       if (1 == sscanf(s, "SUBTYPE_%d", &i))
+                       {
+                               /* Extract a "subtype" */
+                               f_ptr->subtype =  i;
+
+                               /* Start at next entry */
+                               s = t;
+
+                               /* Continue */
+                               continue;
+                       }
+
                        /* XXX XXX XXX Hack -- Read feature power */
                        if (1 == sscanf(s, "POWER_%d", &i))
                        {
@@ -3326,12 +3339,12 @@ static errr parse_line_feature(char *buf)
                int index = zz[0][0];
 
                /* Reset the info for the letter */
-               letter[index].feature = FEAT_NONE;
+               letter[index].feature = feat_none;
                letter[index].monster = 0;
                letter[index].object = 0;
                letter[index].ego = 0;
                letter[index].artifact = 0;
-               letter[index].trap = FEAT_NONE;
+               letter[index].trap = feat_none;
                letter[index].cave_info = 0;
                letter[index].special = 0;
                letter[index].random = RANDOM_NONE;
index b7aaf49..fbdad98 100644 (file)
@@ -1589,6 +1589,122 @@ static errr init_quests(void)
 }
 
 
+static feat_tag_is_not_found = FALSE;
+
+
+s16b f_tag_to_index_in_init(cptr str)
+{
+       s16b feat = f_tag_to_index(str);
+
+       if (feat < 0) feat_tag_is_not_found = TRUE;
+
+       return feat;
+}
+
+
+/*
+ * Initialize feature variables
+ */
+static errr init_feat_variables(void)
+{
+       int i;
+
+       /* Nothing */
+       feat_none = f_tag_to_index_in_init("NONE");
+
+       /* Floor */
+       feat_floor = f_tag_to_index_in_init("FLOOR");
+
+       /* Objects */
+       feat_glyph = f_tag_to_index_in_init("GLYPH");
+       feat_explosive_rune = f_tag_to_index_in_init("EXPLOSIVE_RUNE");
+       feat_mirror = f_tag_to_index_in_init("MIRROR");
+
+       /* Doors */
+       feat_open_door = f_tag_to_index_in_init("OPEN_DOOR");
+       feat_broken_door = f_tag_to_index_in_init("BROKEN_DOOR");
+       feat_closed_door = f_tag_to_index_in_init("CLOSED_DOOR");
+
+       /* Locked doors */
+       for (i = 1; i < MAX_LJ_DOORS; i++)
+       {
+               s16b door = f_tag_to_index(format("LOCKED_DOOR_%d", i));
+               if (door < 0) break;
+               feat_locked_door[num_locked_door++] = door;
+       }
+       if (!num_locked_door) return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+
+       /* Jammed doors */
+       for (i = 0; i < MAX_LJ_DOORS; i++)
+       {
+               s16b door = f_tag_to_index(format("JAMMED_DOOR_%d", i));
+               if (door < 0) break;
+               feat_jammed_door[num_jammed_door++] = door;
+       }
+       if (!num_jammed_door) return PARSE_ERROR_UNDEFINED_TERRAIN_TAG;
+
+       /* Stairs */
+       feat_up_stair = f_tag_to_index_in_init("UP_STAIR");
+       feat_down_stair = f_tag_to_index_in_init("DOWN_STAIR");
+       feat_entrance = f_tag_to_index_in_init("ENTRANCE");
+
+       /* Normal traps */
+       init_normal_traps();
+
+       /* Special traps */
+       feat_trap_open = f_tag_to_index_in_init("TRAP_OPEN");
+       feat_trap_armageddon = f_tag_to_index_in_init("TRAP_ARMAGEDDON");
+       feat_trap_piranha = f_tag_to_index_in_init("TRAP_PIRANHA");
+
+       /* Rubble */
+       feat_rubble = f_tag_to_index_in_init("RUBBLE");
+
+       /* Seams */
+       feat_magma_vein = f_tag_to_index_in_init("MAGMA_VEIN");
+       feat_quartz_vein = f_tag_to_index_in_init("QUARTZ_VEIN");
+
+       /* Walls */
+       feat_granite = f_tag_to_index_in_init("GRANITE");
+       feat_permanent = f_tag_to_index_in_init("PERMANENT");
+
+       /* Pattern */
+       feat_pattern_start = f_tag_to_index_in_init("PATTERN_START");
+       feat_pattern_1 = f_tag_to_index_in_init("PATTERN_1");
+       feat_pattern_2 = f_tag_to_index_in_init("PATTERN_2");
+       feat_pattern_3 = f_tag_to_index_in_init("PATTERN_3");
+       feat_pattern_4 = f_tag_to_index_in_init("PATTERN_4");
+       feat_pattern_end = f_tag_to_index_in_init("PATTERN_END");
+       feat_pattern_old = f_tag_to_index_in_init("PATTERN_OLD");
+       feat_pattern_exit = f_tag_to_index_in_init("PATTERN_EXIT");
+       feat_pattern_corrupted = f_tag_to_index_in_init("PATTERN_CORRUPTED");
+
+       /* Various */
+       feat_black_market = f_tag_to_index_in_init("BLACK_MARKET");
+       feat_town = f_tag_to_index_in_init("TOWN");
+
+       /* Terrains */
+       feat_deep_water = f_tag_to_index_in_init("DEEP_WATER");
+       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_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");
+       feat_brake = f_tag_to_index_in_init("BRAKE");
+       feat_tree = f_tag_to_index_in_init("TREE");
+       feat_mountain = f_tag_to_index_in_init("MOUNTAIN");
+       feat_swamp = f_tag_to_index_in_init("SWAMP");
+
+       /* Unknown grid (not detected) */
+       feat_undetected = f_tag_to_index_in_init("UNDETECTED");
+
+       /* Wilderness terrains */
+       init_wilderness_terrains();
+
+       return feat_tag_is_not_found ? PARSE_ERROR_UNDEFINED_TERRAIN_TAG : 0;
+}
+
+
 /*
  * Initialize some other arrays
  */
@@ -2242,9 +2358,11 @@ if (init_misc()) quit("
 #ifdef JP
        note("[¥Ç¡¼¥¿¤Î½é´ü²½Ãæ... (ÃÏ·Á)]");
        if (init_f_info()) quit("ÃÏ·Á½é´ü²½ÉÔǽ");
+       if (init_feat_variables()) quit("ÃÏ·Á½é´ü²½ÉÔǽ");
 #else
        note("[Initializing arrays... (features)]");
        if (init_f_info()) quit("Cannot initialize features");
+       if (init_feat_variables()) quit("Cannot initialize features");
 #endif
 
 
index 981837b..7cbb16d 100644 (file)
@@ -2285,6 +2285,12 @@ static void rd_messages(void)
 /* Old hidden trap flag */
 #define CAVE_TRAP       0x8000
 
+/*** Terrain Feature Indexes (see "lib/edit/f_info.txt") ***/
+#define OLD_FEAT_INVIS              0x02
+#define OLD_FEAT_GLYPH              0x03
+#define OLD_FEAT_MINOR_GLYPH        0x40
+#define OLD_FEAT_MIRROR             0xc3
+
 /*
  * Read the dungeon (old method)
  *
@@ -2486,16 +2492,16 @@ static errr rd_dungeon_old(void)
                        c_ptr = &cave[y][x];
 
                        /* Very old */
-                       if (c_ptr->feat == FEAT_INVIS)
+                       if (c_ptr->feat == OLD_FEAT_INVIS)
                        {
-                               c_ptr->feat = FEAT_FLOOR;
+                               c_ptr->feat = feat_floor;
                                c_ptr->info |= CAVE_TRAP;
                        }
 
                        /* Older than 1.1.1 */
-                       if (c_ptr->feat == FEAT_MIRROR)
+                       if (c_ptr->feat == OLD_FEAT_MIRROR)
                        {
-                               c_ptr->feat = FEAT_FLOOR;
+                               c_ptr->feat = feat_floor;
                                c_ptr->info |= CAVE_OBJECT;
                        }
                }
@@ -2511,16 +2517,16 @@ static errr rd_dungeon_old(void)
                        /* Old CAVE_IN_MIRROR flag */
                        if (c_ptr->info & CAVE_OBJECT)
                        {
-                               c_ptr->mimic = FEAT_MIRROR;
+                               c_ptr->mimic = feat_mirror;
                        }
 
                        /* Runes will be mimics and flags */
-                       else if (c_ptr->feat == FEAT_MINOR_GLYPH ||
-                                c_ptr->feat == FEAT_GLYPH)
+                       else if ((c_ptr->feat == OLD_FEAT_MINOR_GLYPH) ||
+                                (c_ptr->feat == OLD_FEAT_GLYPH))
                        {
                                c_ptr->info |= CAVE_OBJECT;
                                c_ptr->mimic = c_ptr->feat;
-                               c_ptr->feat = FEAT_FLOOR;
+                               c_ptr->feat = feat_floor;
                        }
 
                        /* Hidden traps will be trap terrains mimicing floor */
@@ -2532,10 +2538,10 @@ static errr rd_dungeon_old(void)
                        }
 
                        /* Another hidden trap */
-                       else if (c_ptr->feat == FEAT_INVIS)
+                       else if (c_ptr->feat == OLD_FEAT_INVIS)
                        {
-                               c_ptr->mimic = FEAT_FLOOR;
-                               c_ptr->feat = FEAT_TRAP_OPEN;
+                               c_ptr->mimic = feat_floor;
+                               c_ptr->feat = feat_trap_open;
                        }
                }
        }
index 3052353..9fdef21 100644 (file)
@@ -5254,30 +5254,37 @@ void acquirement(int y1, int x1, int num, bool great, bool known)
 }
 
 
-#define MAX_TRAPS              18
+#define MAX_NORMAL_TRAPS 18
 
-static int trap_num[MAX_TRAPS] =
-{
-       FEAT_TRAP_TRAPDOOR,
-       FEAT_TRAP_PIT,
-       FEAT_TRAP_SPIKED_PIT,
-       FEAT_TRAP_POISON_PIT,
-       FEAT_TRAP_TY_CURSE,
-       FEAT_TRAP_TELEPORT,
-       FEAT_TRAP_FIRE,
-       FEAT_TRAP_ACID,
-       FEAT_TRAP_SLOW,
-       FEAT_TRAP_LOSE_STR,
-       FEAT_TRAP_LOSE_DEX,
-       FEAT_TRAP_LOSE_CON,
-       FEAT_TRAP_BLIND,
-       FEAT_TRAP_CONFUSE,
-       FEAT_TRAP_POISON,
-       FEAT_TRAP_SLEEP,
-       FEAT_TRAP_TRAPS,
-       FEAT_TRAP_ALARM,
-};
+/* See init_feat_variables() in init2.c */
+static s16b normal_traps[MAX_NORMAL_TRAPS];
 
+/*
+ * Initialize arrays for normal traps
+ */
+void init_normal_traps(void)
+{
+       int cur_trap = 0;
+
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TRAPDOOR");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_PIT");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_SPIKED_PIT");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_POISON_PIT");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TY_CURSE");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TELEPORT");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_FIRE");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_ACID");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_SLOW");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_LOSE_STR");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_LOSE_DEX");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_LOSE_CON");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_BLIND");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_CONFUSE");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_POISON");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_SLEEP");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TRAPS");
+       normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_ALARM");
+}
 
 /*
  * Get random trap
@@ -5295,7 +5302,7 @@ s16b choose_random_trap(void)
        while (1)
        {
                /* Hack -- pick a trap */
-               feat = trap_num[randint0(MAX_TRAPS)];
+               feat = normal_traps[randint0(MAX_NORMAL_TRAPS)];
 
                /* Accept non-trapdoors */
                if (!have_flag(f_info[feat].flags, FF_MORE)) break;
index 0171aa7..53ad80f 100644 (file)
@@ -81,7 +81,7 @@ static void place_locked_door(int y, int x)
        }
        else
        {
-               set_cave_feat(y, x, FEAT_DOOR_HEAD+randint1(7));
+               set_cave_feat(y, x, feat_locked_door[randint0(num_locked_door)]);
                cave[y][x].info &= ~(CAVE_FLOOR);
                delete_monster(y, x);
        }
@@ -2676,37 +2676,37 @@ static void build_vault(int yval, int xval, int ymax, int xmax, cptr data,
 
                                /* Black market in a dungeon */
                        case 'S':
-                               set_cave_feat(y, x, FEAT_SHOP_HEAD + STORE_BLACK);
+                               set_cave_feat(y, x, feat_black_market);
                                store_init(NO_TOWN, STORE_BLACK);
                                break;
-                               
+
                                /* The Pattern */
                        case 'p':
-                               set_cave_feat(y, x, FEAT_PATTERN_START);
+                               set_cave_feat(y, x, feat_pattern_start);
                                break;
-                               
+
                        case 'a':
-                               set_cave_feat(y, x, FEAT_PATTERN_1);
+                               set_cave_feat(y, x, feat_pattern_1);
                                break;
-                               
+
                        case 'b':
-                               set_cave_feat(y, x, FEAT_PATTERN_2);
+                               set_cave_feat(y, x, feat_pattern_2);
                                break;
-                               
+
                        case 'c':
-                               set_cave_feat(y, x, FEAT_PATTERN_3);
+                               set_cave_feat(y, x, feat_pattern_3);
                                break;
-                               
+
                        case 'd':
-                               set_cave_feat(y, x, FEAT_PATTERN_4);
+                               set_cave_feat(y, x, feat_pattern_4);
                                break;
-                               
+
                        case 'P':
-                               set_cave_feat(y, x, FEAT_PATTERN_END);
+                               set_cave_feat(y, x, feat_pattern_end);
                                break;
-                               
+
                        case 'B':
-                               set_cave_feat(y, x, FEAT_PATTERN_XTRA1);
+                               set_cave_feat(y, x, feat_pattern_exit);
                                break;
 
                        case 'A':
@@ -3766,39 +3766,39 @@ static bool generate_lake(int y0, int x0, int xsize, int ysize, int c1, int c2,
        switch (type)
        {
        case LAKE_T_LAVA: /* Lava */
-               feat1 = FEAT_DEEP_LAVA;
-               feat2 = FEAT_SHAL_LAVA;
+               feat1 = feat_deep_lava;
+               feat2 = feat_shallow_lava;
                feat3 = floor_type[randint0(100)];
                break;
        case LAKE_T_WATER: /* Water */
-               feat1 = FEAT_DEEP_WATER;
-               feat2 = FEAT_SHAL_WATER;
+               feat1 = feat_deep_water;
+               feat2 = feat_shallow_water;
                feat3 = floor_type[randint0(100)];
                break;
        case LAKE_T_CAVE: /* Collapsed cave */
                feat1 = floor_type[randint0(100)];
                feat2 = floor_type[randint0(100)];
-               feat3 = FEAT_RUBBLE;
+               feat3 = feat_rubble;
                break;
        case LAKE_T_EARTH_VAULT: /* Earth vault */
-               feat1 = FEAT_RUBBLE;
+               feat1 = feat_rubble;
                feat2 = floor_type[randint0(100)];
-               feat3 = FEAT_RUBBLE;
+               feat3 = feat_rubble;
                break;
        case LAKE_T_AIR_VAULT: /* Air vault */
-               feat1 = FEAT_GRASS;
-               feat2 = FEAT_TREES;
-               feat3 = FEAT_GRASS;
+               feat1 = feat_grass;
+               feat2 = feat_tree;
+               feat3 = feat_grass;
                break;
        case LAKE_T_WATER_VAULT: /* Water vault */
-               feat1 = FEAT_SHAL_WATER;
-               feat2 = FEAT_DEEP_WATER;
-               feat3 = FEAT_SHAL_WATER;
+               feat1 = feat_shallow_water;
+               feat2 = feat_deep_water;
+               feat3 = feat_shallow_water;
                break;
        case LAKE_T_FIRE_VAULT: /* Fire Vault */
-               feat1 = FEAT_SHAL_LAVA;
-               feat2 = FEAT_DEEP_LAVA;
-               feat3 = FEAT_SHAL_LAVA;
+               feat1 = feat_shallow_lava;
+               feat2 = feat_deep_lava;
+               feat3 = feat_shallow_lava;
                break;
 
        /* Paranoia */
@@ -5729,7 +5729,7 @@ static bool build_type13(void)
 
        /* Place the wall open trap */
        cave[yval][xval].mimic = cave[yval][xval].feat;
-       cave[yval][xval].feat = FEAT_TRAP_OPEN;
+       cave[yval][xval].feat = feat_trap_open;
 
        /* Sort the entries */
        for (i = 0; i < 16 - 1; i++)
@@ -5855,9 +5855,9 @@ static bool build_type14(void)
        }
 
        if (dun_level < 30 + randint1(30))
-               trap = FEAT_TRAP_PIRANHA;
+               trap = feat_trap_piranha;
        else
-               trap = FEAT_TRAP_ARMAGEDDON;
+               trap = feat_trap_armageddon;
 
        /* Place a special trap */
        c_ptr = &cave[rand_spread(yval, ysize/4)][rand_spread(xval, xsize/4)];
index bcaffd3..fc5c2ad 100644 (file)
@@ -671,7 +671,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
 #else
                        msg_format("A tree %s", message);
 #endif
-                       cave_set_feat(y, x, (one_in_(3) ? FEAT_DEEP_GRASS : FEAT_GRASS));
+                       cave_set_feat(y, x, one_in_(3) ? feat_brake : feat_grass);
 
                        /* Observe */
                        if (c_ptr->info & (CAVE_MARK)) obvious = TRUE;
@@ -893,7 +893,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
                        if (player_bold(y, x)) break;
 
                        /* Create a closed door */
-                       cave_set_feat(y, x, FEAT_DOOR_HEAD + 0x00);
+                       cave_set_feat(y, x, feat_closed_door);
 
                        /* Observe */
                        if (c_ptr->info & (CAVE_MARK)) obvious = TRUE;
@@ -920,7 +920,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
                        if (player_bold(y, x)) break;
 
                        /* Create a closed door */
-                       cave_set_feat(y, x, FEAT_TREES);
+                       cave_set_feat(y, x, feat_tree);
 
                        /* Observe */
                        if (c_ptr->info & (CAVE_MARK)) obvious = TRUE;
@@ -936,7 +936,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
 
                        /* Create a glyph */
                        c_ptr->info |= CAVE_OBJECT;
-                       c_ptr->mimic = FEAT_GLYPH;
+                       c_ptr->mimic = feat_glyph;
 
                        /* Notice */
                        note_spot(y, x);
@@ -956,7 +956,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
                        if (player_bold(y, x)) break;
 
                        /* Place a wall */
-                       cave_set_feat(y, x, FEAT_WALL);
+                       cave_set_feat(y, x, feat_granite);
 
                        break;
                }
@@ -974,13 +974,13 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
                                if (!have_flag(f_ptr->flags, FF_FLOOR)) break;
 
                                /* Place a shallow lava */
-                               cave_set_feat(y, x, FEAT_SHAL_LAVA);
+                               cave_set_feat(y, x, feat_shallow_lava);
                        }
                        /* Deep Lava */
                        else if (dam)
                        {
                                /* Place a deep lava */
-                               cave_set_feat(y, x, FEAT_DEEP_LAVA);
+                               cave_set_feat(y, x, feat_deep_lava);
                        }
                        break;
                }
@@ -997,13 +997,13 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ)
                                if (!have_flag(f_ptr->flags, FF_FLOOR)) break;
 
                                /* Place a shallow water */
-                               cave_set_feat(y, x, FEAT_SHAL_WATER);
+                               cave_set_feat(y, x, feat_shallow_water);
                        }
                        /* Deep Water */
                        else if (dam)
                        {
                                /* Place a deep water */
-                               cave_set_feat(y, x, FEAT_DEEP_WATER);
+                               cave_set_feat(y, x, feat_deep_water);
                        }
                        break;
                }
index dd9ca0d..69e65aa 100644 (file)
@@ -5206,17 +5206,17 @@ bool destroy_area(int y1, int x1, int r, bool in_generate)
                                        if (t < 20)
                                        {
                                                /* Create granite wall */
-                                               cave_set_feat(y, x, FEAT_WALL);
+                                               cave_set_feat(y, x, feat_granite);
                                        }
                                        else if (t < 70)
                                        {
                                                /* Create quartz vein */
-                                               cave_set_feat(y, x, FEAT_QUARTZ);
+                                               cave_set_feat(y, x, feat_quartz_vein);
                                        }
                                        else if (t < 100)
                                        {
                                                /* Create magma vein */
-                                               cave_set_feat(y, x, FEAT_MAGMA);
+                                               cave_set_feat(y, x, feat_magma_vein);
                                        }
                                        else
                                        {
@@ -5234,12 +5234,12 @@ bool destroy_area(int y1, int x1, int r, bool in_generate)
                                        else if (t < 70)
                                        {
                                                /* Create quartz vein */
-                                               c_ptr->feat = FEAT_QUARTZ;
+                                               c_ptr->feat = feat_quartz_vein;
                                        }
                                        else if (t < 100)
                                        {
                                                /* Create magma vein */
-                                               c_ptr->feat = FEAT_MAGMA;
+                                               c_ptr->feat = feat_magma_vein;
                                        }
                                        else
                                        {
@@ -5761,21 +5761,21 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx)
                                if (t < 20)
                                {
                                        /* Create granite wall */
-                                       cave_set_feat(yy, xx, FEAT_WALL);
+                                       cave_set_feat(yy, xx, feat_granite);
                                }
 
                                /* Quartz */
                                else if (t < 70)
                                {
                                        /* Create quartz vein */
-                                       cave_set_feat(yy, xx, FEAT_QUARTZ);
+                                       cave_set_feat(yy, xx, feat_quartz_vein);
                                }
 
                                /* Magma */
                                else if (t < 100)
                                {
                                        /* Create magma vein */
-                                       cave_set_feat(yy, xx, FEAT_MAGMA);
+                                       cave_set_feat(yy, xx, feat_magma_vein);
                                }
 
                                /* Floor */
index 5850529..b263a3f 100644 (file)
@@ -2038,7 +2038,7 @@ msg_print("
 
        /* Create a glyph */
        cave[py][px].info |= CAVE_OBJECT;
-       cave[py][px].mimic = FEAT_GLYPH;
+       cave[py][px].mimic = feat_glyph;
 
        /* Notice */
        note_spot(py, px);
@@ -2065,7 +2065,7 @@ msg_print("
 
        /* Create a mirror */
        cave[py][px].info |= CAVE_OBJECT;
-       cave[py][px].mimic = FEAT_MIRROR;
+       cave[py][px].mimic = feat_mirror;
 
        /* Turn on the light */
        cave[py][px].info |= CAVE_GLOW;
@@ -2101,7 +2101,7 @@ msg_print("
 
        /* Create a glyph */
        cave[py][px].info |= CAVE_OBJECT;
-       cave[py][px].mimic = FEAT_MINOR_GLYPH;
+       cave[py][px].mimic = feat_explosive_rune;
 
        /* Notice */
        note_spot(py, px);
index 835a1e3..695a5d9 100644 (file)
@@ -4606,7 +4606,7 @@ void do_cmd_store(void)
        }
 
        /* Extract the store code */
-       which = f_info[c_ptr->feat].power;
+       which = f_info[c_ptr->feat].subtype;
 
        old_town_num = p_ptr->town_num;
        if ((which == STORE_HOME) || (which == STORE_MUSEUM)) p_ptr->town_num = 1;
index 8336b56..0e8acbe 100644 (file)
@@ -339,11 +339,11 @@ void place_trees(int x, int y)
                                if ((distance(j, i, y, x) > 1) || (randint1(100) < 25))
                                {
                                        if (randint1(100) < 75)
-                                               cave[j][i].feat = FEAT_TREES;
+                                               cave[j][i].feat = feat_tree;
                                }
                                else
                                {
-                                       cave[j][i].feat = FEAT_RUBBLE;
+                                       cave[j][i].feat = feat_rubble;
                                }
 
                                /* Clear garbage of hidden trap or door */
@@ -359,7 +359,7 @@ void place_trees(int x, int y)
        if (!ironman_downward && one_in_(3))
        {
                /* up stair */
-               cave[y][x].feat = FEAT_LESS;
+               cave[y][x].feat = feat_up_stair;
        }
 }
 
index 9a89f59..1ae6051 100644 (file)
@@ -6734,22 +6734,6 @@ cptr exp_level_str[5]=
 {"[Unskilled]", "[Beginner]", "[Skilled]", "[Expert]", "[Master]"};
 #endif
 
-s16b conv_terrain2feat[MAX_WILDERNESS] =
-{
-  FEAT_PERM,
-  FEAT_TOWN,
-  FEAT_DEEP_WATER,
-  FEAT_SHAL_WATER,
-  FEAT_SWAMP,
-  FEAT_DIRT,
-  FEAT_GRASS,
-  FEAT_TREES,
-  FEAT_DIRT,
-  FEAT_SHAL_LAVA,
-  FEAT_DEEP_LAVA,
-  FEAT_MOUNTAIN
-};
-
 /* Weird melee attack types when hallucinating */
 #ifdef JP
 cptr silly_attacks[MAX_SILLY_ATTACK] =
index f164fcd..fdd5e73 100644 (file)
@@ -52,7 +52,7 @@
  * Feature state structure
  *
  * - Action (FF_*)
- * - Result (FEAT_*)
+ * - Result (f_info ID)
  */
 typedef struct feature_state feature_state;
 
@@ -84,6 +84,7 @@ struct feature_type
 
        feature_state state[MAX_FEAT_STATES];
 
+       byte subtype;
        byte power;
 
        byte d_attr[F_LIT_MAX];   /* Default feature attribute */
index bb3242a..e667926 100644 (file)
@@ -1188,6 +1188,80 @@ bool generate_encounter;
 
 cptr screen_dump = NULL;
 
+/*** Terrain feature variables ***/
+
+/* Nothing */
+s16b feat_none;
+
+/* Floor */
+s16b feat_floor;
+
+/* Objects */
+s16b feat_glyph;
+s16b feat_explosive_rune;
+s16b feat_mirror;
+
+/* Doors */
+s16b feat_open_door;
+s16b feat_broken_door;
+s16b feat_closed_door;
+s16b feat_locked_door[MAX_LJ_DOORS];
+s16b num_locked_door = 0;
+s16b feat_jammed_door[MAX_LJ_DOORS];
+s16b num_jammed_door = 0;
+
+/* Stairs */
+s16b feat_up_stair;
+s16b feat_down_stair;
+s16b feat_entrance;
+
+/* Special traps */
+s16b feat_trap_open;
+s16b feat_trap_armageddon;
+s16b feat_trap_piranha;
+
+/* Rubble */
+s16b feat_rubble;
+
+/* Seams */
+s16b feat_magma_vein;
+s16b feat_quartz_vein;
+
+/* Walls */
+s16b feat_granite;
+s16b feat_permanent;
+
+/* Pattern */
+s16b feat_pattern_start;
+s16b feat_pattern_1;
+s16b feat_pattern_2;
+s16b feat_pattern_3;
+s16b feat_pattern_4;
+s16b feat_pattern_end;
+s16b feat_pattern_old;
+s16b feat_pattern_exit;
+s16b feat_pattern_corrupted;
+
+/* Various */
+s16b feat_black_market;
+s16b feat_town;
+
+/* Terrains */
+s16b feat_deep_water;
+s16b feat_shallow_water;
+s16b feat_deep_lava;
+s16b feat_shallow_lava;
+s16b feat_dirt;
+s16b feat_grass;
+s16b feat_flower;
+s16b feat_brake;
+s16b feat_tree;
+s16b feat_mountain;
+s16b feat_swamp;
+
+/* Unknown grid (not detected) */
+s16b feat_undetected;
+
 /*
  * Which dungeon ?
  */
index bd77957..b638295 100644 (file)
@@ -147,325 +147,12 @@ static void plasma_recursive(int x1, int y1, int x2, int y2,
 }
 
 
+#define MAX_FEAT_IN_TERRAIN 18
+
 /*
  * The default table in terrain level generation.
  */
-static int terrain_table[MAX_WILDERNESS][18] =
-{
-       /* TERRAIN_EDGE */
-       {
-                       FEAT_PERM,
-                       FEAT_PERM,
-                       FEAT_PERM,
-
-                       FEAT_PERM,
-                       FEAT_PERM,
-                       FEAT_PERM,
-
-                       FEAT_PERM,
-                       FEAT_PERM,
-                       FEAT_PERM,
-
-                       FEAT_PERM,
-                       FEAT_PERM,
-                       FEAT_PERM,
-
-                       FEAT_PERM,
-                       FEAT_PERM,
-                       FEAT_PERM,
-
-                       FEAT_PERM,
-                       FEAT_PERM,
-                       FEAT_PERM,
-       },
-       /* TERRAIN_TOWN */
-       {
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-       },
-       /* TERRAIN_DEEP_WATER */
-       {
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-       },
-       /* TERRAIN_SHALLOW_WATER */
-       {
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-                       FEAT_DEEP_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-
-                       FEAT_FLOOR,
-                       FEAT_DIRT,
-                       FEAT_GRASS,
-       },
-       /* TERRAIN_SWAMP */
-       {
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_GRASS,
-
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-                       FEAT_TREES,
-
-                       FEAT_DEEP_GRASS,
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-
-                       FEAT_SHAL_WATER,
-                       FEAT_SHAL_WATER,
-                       FEAT_SWAMP,
-
-                       FEAT_SWAMP,
-                       FEAT_SWAMP,
-                       FEAT_SWAMP,
-
-                       FEAT_SWAMP,
-                       FEAT_SWAMP,
-                       FEAT_SWAMP,
-       },
-       /* TERRAIN_DIRT */
-       {
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_FLOWER,
-                       FEAT_DEEP_GRASS,
-
-                       FEAT_GRASS,
-                       FEAT_TREES,
-                       FEAT_TREES,
-       },
-       /* TERRAIN_GRASS */
-       {
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-
-                       FEAT_GRASS,
-                       FEAT_FLOWER,
-                       FEAT_DEEP_GRASS,
-
-                       FEAT_DEEP_GRASS,
-                       FEAT_TREES,
-                       FEAT_TREES,
-       },
-       /* TERRAIN_TREES */
-       {
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_DIRT,
-
-                       FEAT_TREES,
-                       FEAT_TREES,
-                       FEAT_TREES,
-
-                       FEAT_TREES,
-                       FEAT_TREES,
-                       FEAT_TREES,
-
-                       FEAT_TREES,
-                       FEAT_TREES,
-                       FEAT_TREES,
-
-                       FEAT_TREES,
-                       FEAT_TREES,
-                       FEAT_DEEP_GRASS,
-
-                       FEAT_DEEP_GRASS,
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-       },
-       /* TERRAIN_DESERT */
-       {
-                       FEAT_FLOOR,
-                       FEAT_FLOOR,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-                       FEAT_GRASS,
-       },
-       /* TERRAIN_SHALLOW_LAVA */
-       {
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-                       FEAT_DEEP_LAVA,
-
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-                       FEAT_MOUNTAIN,
-       },
-       /* TERRAIN_DEEP_LAVA */
-       {
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-                       FEAT_SHAL_LAVA,
-
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-                       FEAT_DEEP_LAVA,
-
-                       FEAT_DEEP_LAVA,
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-       },
-       /* TERRAIN_MOUNTAIN */
-       {
-                       FEAT_FLOOR,
-                       FEAT_DEEP_GRASS,
-                       FEAT_GRASS,
-
-                       FEAT_GRASS,
-                       FEAT_DIRT,
-                       FEAT_DIRT,
-
-                       FEAT_TREES,
-                       FEAT_TREES,
-                       FEAT_MOUNTAIN,
-
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-                       FEAT_MOUNTAIN,
-       },
-
-};
+static int terrain_table[MAX_WILDERNESS][MAX_FEAT_IN_TERRAIN];
 
 
 static void generate_wilderness_area(int terrain, u32b seed, bool border, bool corner)
@@ -485,7 +172,7 @@ static void generate_wilderness_area(int terrain, u32b seed, bool border, bool c
                {
                        for (x1 = 0; x1 < MAX_WID; x1++)
                        {
-                               cave[y1][x1].feat = FEAT_PERM;
+                               cave[y1][x1].feat = feat_permanent;
                        }
                }
 
@@ -623,7 +310,7 @@ static void generate_area(int y, int x, bool border, bool corner)
                 */
                if (wilderness[y][x].road)
                {
-                       cave[MAX_HGT/2][MAX_WID/2].feat = FEAT_FLOOR;
+                       cave[MAX_HGT/2][MAX_WID/2].feat = feat_floor;
 
                        if (wilderness[y-1][x].road)
                        {
@@ -631,7 +318,7 @@ static void generate_area(int y, int x, bool border, bool corner)
                                for (y1 = 1; y1 < MAX_HGT/2; y1++)
                                {
                                        x1 = MAX_WID/2;
-                                       cave[y1][x1].feat = FEAT_FLOOR;
+                                       cave[y1][x1].feat = feat_floor;
                                }
                        }
 
@@ -641,7 +328,7 @@ static void generate_area(int y, int x, bool border, bool corner)
                                for (y1 = MAX_HGT/2; y1 < MAX_HGT - 1; y1++)
                                {
                                        x1 = MAX_WID/2;
-                                       cave[y1][x1].feat = FEAT_FLOOR;
+                                       cave[y1][x1].feat = feat_floor;
                                }
                        }
 
@@ -651,7 +338,7 @@ static void generate_area(int y, int x, bool border, bool corner)
                                for (x1 = MAX_WID/2; x1 < MAX_WID - 1; x1++)
                                {
                                        y1 = MAX_HGT/2;
-                                       cave[y1][x1].feat = FEAT_FLOOR;
+                                       cave[y1][x1].feat = feat_floor;
                                }
                        }
 
@@ -661,7 +348,7 @@ static void generate_area(int y, int x, bool border, bool corner)
                                for (x1 = 1; x1 < MAX_WID/2; x1++)
                                {
                                        y1 = MAX_HGT/2;
-                                       cave[y1][x1].feat = FEAT_FLOOR;
+                                       cave[y1][x1].feat = feat_floor;
                                }
                        }
                }
@@ -680,7 +367,7 @@ static void generate_area(int y, int x, bool border, bool corner)
                dy = rand_range(6, cur_hgt - 6);
                dx = rand_range(6, cur_wid - 6);
 
-               cave[dy][dx].feat = FEAT_ENTRANCE;
+               cave[dy][dx].feat = feat_entrance;
                cave[dy][dx].special = wilderness[y][x].entrance;
 
                /* Use the complex RNG */
@@ -778,28 +465,28 @@ void wilderness_gen(void)
        /* Special boundary walls -- North */
        for (i = 0; i < MAX_WID; i++)
        {
-               cave[0][i].feat = FEAT_PERM;
+               cave[0][i].feat = feat_permanent;
                cave[0][i].mimic = border.north[i];
        }
 
        /* Special boundary walls -- South */
        for (i = 0; i < MAX_WID; i++)
        {
-               cave[MAX_HGT - 1][i].feat = FEAT_PERM;
+               cave[MAX_HGT - 1][i].feat = feat_permanent;
                cave[MAX_HGT - 1][i].mimic = border.south[i];
        }
 
        /* Special boundary walls -- West */
        for (i = 0; i < MAX_HGT; i++)
        {
-               cave[i][0].feat = FEAT_PERM;
+               cave[i][0].feat = feat_permanent;
                cave[i][0].mimic = border.west[i];
        }
 
        /* Special boundary walls -- East */
        for (i = 0; i < MAX_HGT; i++)
        {
-               cave[i][MAX_WID - 1].feat = FEAT_PERM;
+               cave[i][MAX_WID - 1].feat = feat_permanent;
                cave[i][MAX_WID - 1].mimic = border.east[i];
        }
 
@@ -875,7 +562,7 @@ void wilderness_gen(void)
 
                                if (have_flag(f_ptr->flags, FF_BLDG))
                                {
-                                       if ((f_ptr->power == 4) || ((p_ptr->town_num == 1) && (f_ptr->power == 0)))
+                                       if ((f_ptr->subtype == 4) || ((p_ptr->town_num == 1) && (f_ptr->subtype == 0)))
                                        {
                                                if (c_ptr->m_idx) delete_monster_idx(c_ptr->m_idx);
                                                p_ptr->oldpy = y;
@@ -939,6 +626,8 @@ void wilderness_gen(void)
 }
 
 
+static s16b conv_terrain2feat[MAX_WILDERNESS];
+
 /*
  * Build the wilderness area.
  * -DG-
@@ -951,7 +640,7 @@ void wilderness_gen_small()
        for (i = 0; i < MAX_WID; i++)
        for (j = 0; j < MAX_HGT; j++)
        {
-               cave[j][i].feat = FEAT_PERM;
+               cave[j][i].feat = feat_permanent;
        }
 
        /* Init the wilderness */
@@ -963,13 +652,13 @@ void wilderness_gen_small()
        {
                if (wilderness[j][i].town && (wilderness[j][i].town != NO_TOWN))
                {
-                       cave[j][i].feat = FEAT_TOWN;
+                       cave[j][i].feat = feat_town;
                        cave[j][i].special = wilderness[j][i].town;
                }
-               else if (wilderness[j][i].road) cave[j][i].feat = FEAT_FLOOR;
+               else if (wilderness[j][i].road) cave[j][i].feat = feat_floor;
                else if (wilderness[j][i].entrance && (p_ptr->total_winner || !(d_info[wilderness[j][i].entrance].flags1 & DF1_WINNER)))
                {
-                       cave[j][i].feat = FEAT_ENTRANCE;
+                       cave[j][i].feat = feat_entrance;
                        cave[j][i].special = (byte)wilderness[j][i].entrance;
                }
                else cave[j][i].feat = conv_terrain2feat[wilderness[j][i].terrain];
@@ -1199,6 +888,131 @@ errr init_wilderness(void)
 }
 
 
+static void init_terrain_table(int terrain, s16b feat_global, cptr fmt, ...)
+{
+       va_list vp;
+       cptr    p;
+       int     cur = 0;
+       char    check = 'a';
+       s16b    feat;
+       int     num;
+
+       /* Begin the varargs stuff */
+       va_start(vp, fmt);
+
+       /* Wilderness terrains on global map */
+       conv_terrain2feat[terrain] = feat_global;
+
+       /* Wilderness terrains on local map */
+       for (p = fmt; *p; p++)
+       {
+               if (*p == check)
+               {
+                       int lim;
+
+                       feat = va_arg(vp, s16b);
+                       num = va_arg(vp, int);
+                       lim = cur + num;
+
+                       for (; (cur < lim) && (cur < MAX_FEAT_IN_TERRAIN); cur++)
+                               terrain_table[terrain][cur] = feat;
+                       if (cur >= MAX_FEAT_IN_TERRAIN) break;
+
+                       check++;
+               }
+               else /* Paranoia */
+               {
+                       plog_fmt("Format error");
+               }
+       }
+
+       feat = terrain_table[terrain][cur];
+       for (; cur < MAX_FEAT_IN_TERRAIN; cur++) terrain_table[terrain][cur] = feat;
+
+       /* End the varargs stuff */
+       va_end(vp);
+}
+
+
+/*
+ * Initialize arrays for wilderness terrains
+ */
+void init_wilderness_terrains(void)
+{
+       init_terrain_table(TERRAIN_EDGE, feat_permanent, "a",
+               feat_permanent, MAX_FEAT_IN_TERRAIN);
+
+       init_terrain_table(TERRAIN_TOWN, feat_town, "a",
+               feat_floor, MAX_FEAT_IN_TERRAIN);
+
+       init_terrain_table(TERRAIN_DEEP_WATER, feat_deep_water, "ab",
+               feat_deep_water, 12,
+               feat_shallow_water, MAX_FEAT_IN_TERRAIN - 12);
+
+       init_terrain_table(TERRAIN_SHALLOW_WATER, feat_shallow_water, "abcde",
+               feat_deep_water, 3,
+               feat_shallow_water, 12,
+               feat_floor, 1,
+               feat_dirt, 1,
+               feat_grass, MAX_FEAT_IN_TERRAIN - 17);
+
+       init_terrain_table(TERRAIN_SWAMP, feat_swamp, "abcdef",
+               feat_dirt, 2,
+               feat_grass, 3,
+               feat_tree, 1,
+               feat_brake, 1,
+               feat_shallow_water, 4,
+               feat_swamp, MAX_FEAT_IN_TERRAIN - 11);
+
+       init_terrain_table(TERRAIN_DIRT, feat_dirt, "abcdef",
+               feat_floor, 3,
+               feat_dirt, 10,
+               feat_flower, 1,
+               feat_brake, 1,
+               feat_grass, 1,
+               feat_tree, MAX_FEAT_IN_TERRAIN - 16);
+
+       init_terrain_table(TERRAIN_GRASS, feat_grass, "abcdef",
+               feat_floor, 2,
+               feat_dirt, 2,
+               feat_grass, 9,
+               feat_flower, 1,
+               feat_brake, 2,
+               feat_tree, MAX_FEAT_IN_TERRAIN - 16);
+
+       init_terrain_table(TERRAIN_TREES, feat_tree, "abcde",
+               feat_floor, 2,
+               feat_dirt, 1,
+               feat_tree, 11,
+               feat_brake, 2,
+               feat_grass, MAX_FEAT_IN_TERRAIN - 16);
+
+       init_terrain_table(TERRAIN_DESERT, feat_dirt, "abc",
+               feat_floor, 2,
+               feat_dirt, 13,
+               feat_grass, MAX_FEAT_IN_TERRAIN - 15);
+
+       init_terrain_table(TERRAIN_SHALLOW_LAVA, feat_shallow_lava, "abc",
+               feat_shallow_lava, 14,
+               feat_deep_lava, 3,
+               feat_mountain, MAX_FEAT_IN_TERRAIN - 17);
+
+       init_terrain_table(TERRAIN_DEEP_LAVA, feat_deep_lava, "abcd",
+               feat_dirt, 3,
+               feat_shallow_lava, 3,
+               feat_deep_lava, 10,
+               feat_mountain, MAX_FEAT_IN_TERRAIN - 16);
+
+       init_terrain_table(TERRAIN_MOUNTAIN, feat_mountain, "abcdef",
+               feat_floor, 1,
+               feat_brake, 1,
+               feat_grass, 2,
+               feat_dirt, 2,
+               feat_tree, 2,
+               feat_mountain, MAX_FEAT_IN_TERRAIN - 8);
+}
+
+
 bool change_wild_mode(void)
 {
        int i;
index e3a22ee..7363381 100644 (file)
@@ -1678,8 +1678,8 @@ static void do_cmd_wiz_zap_all(void)
  */
 static void do_cmd_wiz_create_feature(void)
 {
-       static int   prev_feat = FEAT_NONE;
-       static int   prev_mimic = FEAT_NONE;
+       static int   prev_feat = 0;
+       static int   prev_mimic = 0;
        cave_type    *c_ptr;
        feature_type *f_ptr;
        char         tmp_val[160];
index 696f156..65b0bb5 100644 (file)
@@ -604,7 +604,7 @@ msg_print("
 
 
                /* Create stairs down */
-               cave_set_feat(y, x, FEAT_MORE);
+               cave_set_feat(y, x, feat_down_stair);
 
                /* Remember to update everything */
                p_ptr->update |= (PU_FLOW);
@@ -3557,7 +3557,7 @@ static int target_set_aux(int y, int x, int mode, cptr info)
        if (!(c_ptr->info & CAVE_MARK) && !player_can_see_bold(y, x))
        {
                /* Forget feature */
-               feat = FEAT_NONE;
+               feat = feat_none;
        }
 
        f_ptr = &f_info[feat];
@@ -3570,7 +3570,7 @@ static int target_set_aux(int y, int x, int mode, cptr info)
                /* Hack -- special handling for building doors */
                if (have_flag(f_ptr->flags, FF_BLDG) && !p_ptr->inside_arena)
                {
-                       name = building[f_ptr->power].name;
+                       name = building[f_ptr->subtype].name;
                }
                else if (have_flag(f_ptr->flags, FF_ENTRANCE))
                {
@@ -3584,7 +3584,7 @@ static int target_set_aux(int y, int x, int mode, cptr info)
                {
                        name = town[c_ptr->special].name;
                }
-               else if (p_ptr->wild_mode && (feat == FEAT_FLOOR))
+               else if (p_ptr->wild_mode && (feat == feat_floor))
                {
 #ifdef JP
                        name = "ƻ";