変愚蛮怒のメインリポジトリです
Revision | 30fd86e28b180f681503b09c8f6c32fbc7b3d763 (tree) |
---|---|
Time | 2004-01-27 10:44:43 |
Author | nothere <nothere@0568...> |
Commiter | nothere |
複数出現モンスターや護衛を率いるモンスターの護衛がvaultに生成されて
vaultに入りきらない場合に, 他の部屋の壁や近くの通路のドアに埋まって生
成される場合があるバグを修正. grid.hのplace_*_*()やgrid.c, rooms.cの
ドア配置関数でモンスター削除処理を行うようにした. なお, 以下の変更を
含む.
* 1.7.0ではFEAT_SECRETは隠しドアとしてそのまま処理することができ,
@@ -179,6 +179,8 @@ void place_random_door(int y, int x, bool room) | ||
179 | 179 | |
180 | 180 | /* Closed, locked, or stuck doors (400/1000) */ |
181 | 181 | else place_closed_door(y, x); |
182 | + | |
183 | + delete_monster(y, x); | |
182 | 184 | } |
183 | 185 | |
184 | 186 |
@@ -42,6 +42,7 @@ | ||
42 | 42 | set_cave_feat(Y,X,floor_type[randint0(100)]); \ |
43 | 43 | cave[Y][X].info &= ~(CAVE_MASK); \ |
44 | 44 | add_cave_info(Y,X,CAVE_FLOOR); \ |
45 | + delete_monster(Y, X); \ | |
45 | 46 | } |
46 | 47 | |
47 | 48 | #define place_floor_grid(C) \ |
@@ -49,6 +50,7 @@ | ||
49 | 50 | (C)->feat = floor_type[randint0(100)]; \ |
50 | 51 | (C)->info &= ~(CAVE_MASK); \ |
51 | 52 | (C)->info |= CAVE_FLOOR; \ |
53 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
52 | 54 | } |
53 | 55 | |
54 | 56 | #define place_extra_bold(Y, X) \ |
@@ -56,6 +58,7 @@ | ||
56 | 58 | set_cave_feat(Y,X,fill_type[randint0(100)]); \ |
57 | 59 | cave[Y][X].info &= ~(CAVE_MASK); \ |
58 | 60 | add_cave_info(Y,X,CAVE_EXTRA); \ |
61 | + delete_monster(Y, X); \ | |
59 | 62 | } |
60 | 63 | |
61 | 64 | #define place_extra_grid(C) \ |
@@ -63,6 +66,7 @@ | ||
63 | 66 | (C)->feat = fill_type[randint0(100)]; \ |
64 | 67 | (C)->info &= ~(CAVE_MASK); \ |
65 | 68 | (C)->info |= CAVE_EXTRA; \ |
69 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
66 | 70 | } |
67 | 71 | |
68 | 72 | #define place_extra_perm_bold(Y, X) \ |
@@ -70,6 +74,7 @@ | ||
70 | 74 | set_cave_feat(Y,X,FEAT_PERM); \ |
71 | 75 | cave[Y][X].info &= ~(CAVE_MASK); \ |
72 | 76 | add_cave_info(Y,X,CAVE_EXTRA); \ |
77 | + delete_monster(Y, X); \ | |
73 | 78 | } |
74 | 79 | |
75 | 80 | #define place_extra_perm_grid(C) \ |
@@ -77,6 +82,7 @@ | ||
77 | 82 | (C)->feat = FEAT_PERM; \ |
78 | 83 | (C)->info &= ~(CAVE_MASK); \ |
79 | 84 | (C)->info |= CAVE_EXTRA; \ |
85 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
80 | 86 | } |
81 | 87 | |
82 | 88 | #define place_extra_noperm_bold(Y, X) \ |
@@ -87,6 +93,7 @@ | ||
87 | 93 | if (permanent_wall(_f_ptr)) cave[Y][X].feat = feat_state(cave[Y][X].feat, FF_UNPERM); \ |
88 | 94 | cave[Y][X].info &= ~(CAVE_MASK); \ |
89 | 95 | add_cave_info(Y,X,CAVE_EXTRA); \ |
96 | + delete_monster(Y, X); \ | |
90 | 97 | } |
91 | 98 | |
92 | 99 | #define place_inner_bold(Y, X) \ |
@@ -94,6 +101,7 @@ | ||
94 | 101 | set_cave_feat(Y,X,feat_wall_inner); \ |
95 | 102 | cave[Y][X].info &= ~(CAVE_MASK); \ |
96 | 103 | add_cave_info(Y,X,CAVE_INNER); \ |
104 | + delete_monster(Y, X); \ | |
97 | 105 | } |
98 | 106 | |
99 | 107 | #define place_inner_grid(C) \ |
@@ -101,6 +109,7 @@ | ||
101 | 109 | (C)->feat = feat_wall_inner; \ |
102 | 110 | (C)->info &= ~(CAVE_MASK); \ |
103 | 111 | (C)->info |= CAVE_INNER; \ |
112 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
104 | 113 | } |
105 | 114 | |
106 | 115 | #define place_inner_perm_bold(Y, X) \ |
@@ -108,6 +117,7 @@ | ||
108 | 117 | set_cave_feat(Y,X,FEAT_PERM); \ |
109 | 118 | cave[Y][X].info &= ~(CAVE_MASK); \ |
110 | 119 | add_cave_info(Y,X,CAVE_INNER); \ |
120 | + delete_monster(Y, X); \ | |
111 | 121 | } |
112 | 122 | |
113 | 123 | #define place_inner_perm_grid(C) \ |
@@ -115,6 +125,7 @@ | ||
115 | 125 | (C)->feat = FEAT_PERM; \ |
116 | 126 | (C)->info &= ~(CAVE_MASK); \ |
117 | 127 | (C)->info |= CAVE_INNER; \ |
128 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
118 | 129 | } |
119 | 130 | |
120 | 131 | #define place_outer_bold(Y, X) \ |
@@ -122,6 +133,7 @@ | ||
122 | 133 | set_cave_feat(Y,X,feat_wall_outer); \ |
123 | 134 | cave[Y][X].info &= ~(CAVE_MASK); \ |
124 | 135 | add_cave_info(Y,X,CAVE_OUTER); \ |
136 | + delete_monster(Y, X); \ | |
125 | 137 | } |
126 | 138 | |
127 | 139 | #define place_outer_grid(C) \ |
@@ -129,6 +141,7 @@ | ||
129 | 141 | (C)->feat = feat_wall_outer; \ |
130 | 142 | (C)->info &= ~(CAVE_MASK); \ |
131 | 143 | (C)->info |= CAVE_OUTER; \ |
144 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
132 | 145 | } |
133 | 146 | |
134 | 147 | #define place_outer_perm_bold(Y, X) \ |
@@ -136,6 +149,7 @@ | ||
136 | 149 | set_cave_feat(Y,X,FEAT_PERM); \ |
137 | 150 | cave[Y][X].info &= ~(CAVE_MASK); \ |
138 | 151 | add_cave_info(Y,X,CAVE_OUTER); \ |
152 | + delete_monster(Y, X); \ | |
139 | 153 | } |
140 | 154 | |
141 | 155 | #define place_outer_perm_grid(C) \ |
@@ -143,6 +157,7 @@ | ||
143 | 157 | (C)->feat = FEAT_PERM; \ |
144 | 158 | (C)->info &= ~(CAVE_MASK); \ |
145 | 159 | (C)->info |= CAVE_OUTER; \ |
160 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
146 | 161 | } |
147 | 162 | |
148 | 163 | #define place_outer_noperm_bold(Y, X) \ |
@@ -152,6 +167,7 @@ | ||
152 | 167 | else set_cave_feat(Y,X,feat_wall_outer); \ |
153 | 168 | cave[Y][X].info &= ~(CAVE_MASK); \ |
154 | 169 | add_cave_info(Y,X,(CAVE_OUTER | CAVE_VAULT)); \ |
170 | + delete_monster(Y, X); \ | |
155 | 171 | } |
156 | 172 | |
157 | 173 | #define place_outer_noperm_grid(C) \ |
@@ -161,6 +177,7 @@ | ||
161 | 177 | else (C)->feat = feat_wall_outer; \ |
162 | 178 | (C)->info &= ~(CAVE_MASK); \ |
163 | 179 | (C)->info |= (CAVE_OUTER | CAVE_VAULT); \ |
180 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
164 | 181 | } |
165 | 182 | |
166 | 183 | #define place_solid_bold(Y, X) \ |
@@ -168,6 +185,7 @@ | ||
168 | 185 | set_cave_feat(Y,X,feat_wall_solid); \ |
169 | 186 | cave[Y][X].info &= ~(CAVE_MASK); \ |
170 | 187 | add_cave_info(Y,X,CAVE_SOLID); \ |
188 | + delete_monster(Y, X); \ | |
171 | 189 | } |
172 | 190 | |
173 | 191 | #define place_solid_grid(C) \ |
@@ -175,6 +193,7 @@ | ||
175 | 193 | (C)->feat = feat_wall_solid; \ |
176 | 194 | (C)->info &= ~(CAVE_MASK); \ |
177 | 195 | (C)->info |= CAVE_SOLID; \ |
196 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
178 | 197 | } |
179 | 198 | |
180 | 199 | #define place_solid_perm_bold(Y, X) \ |
@@ -182,6 +201,7 @@ | ||
182 | 201 | set_cave_feat(Y,X,FEAT_PERM); \ |
183 | 202 | cave[Y][X].info &= ~(CAVE_MASK); \ |
184 | 203 | add_cave_info(Y,X,CAVE_SOLID); \ |
204 | + delete_monster(Y, X); \ | |
185 | 205 | } |
186 | 206 | |
187 | 207 | #define place_solid_perm_grid(C) \ |
@@ -189,6 +209,7 @@ | ||
189 | 209 | (C)->feat = FEAT_PERM; \ |
190 | 210 | (C)->info &= ~(CAVE_MASK); \ |
191 | 211 | (C)->info |= CAVE_SOLID; \ |
212 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
192 | 213 | } |
193 | 214 | |
194 | 215 | #define place_solid_noperm_bold(Y, X) \ |
@@ -199,6 +220,7 @@ | ||
199 | 220 | else set_cave_feat(Y,X,feat_wall_solid); \ |
200 | 221 | cave[Y][X].info &= ~(CAVE_MASK); \ |
201 | 222 | add_cave_info(Y,X,CAVE_SOLID); \ |
223 | + delete_monster(Y, X); \ | |
202 | 224 | } |
203 | 225 | |
204 | 226 | #define place_solid_noperm_grid(C) \ |
@@ -209,6 +231,7 @@ | ||
209 | 231 | else (C)->feat = feat_wall_solid; \ |
210 | 232 | (C)->info &= ~(CAVE_MASK); \ |
211 | 233 | (C)->info |= CAVE_SOLID; \ |
234 | + if ((C)->m_idx) delete_monster_idx((C)->m_idx); \ | |
212 | 235 | } |
213 | 236 | |
214 | 237 |
@@ -2529,13 +2529,6 @@ static errr rd_dungeon_old(void) | ||
2529 | 2529 | c_ptr->mimic = FEAT_FLOOR; |
2530 | 2530 | c_ptr->feat = FEAT_TRAP_OPEN; |
2531 | 2531 | } |
2532 | - | |
2533 | - /* Hidden doors will be closed doors mimicing wall */ | |
2534 | - else if (c_ptr->feat == FEAT_SECRET) | |
2535 | - { | |
2536 | - place_closed_door(y, x); | |
2537 | - c_ptr->mimic = FEAT_WALL; | |
2538 | - } | |
2539 | 2532 | } |
2540 | 2533 | } |
2541 | 2534 |
@@ -83,6 +83,7 @@ static void place_locked_door(int y, int x) | ||
83 | 83 | { |
84 | 84 | set_cave_feat(y, x, FEAT_DOOR_HEAD+randint1(7)); |
85 | 85 | cave[y][x].info &= ~(CAVE_FLOOR); |
86 | + delete_monster(y, x); | |
86 | 87 | } |
87 | 88 | } |
88 | 89 |
@@ -113,6 +114,7 @@ static void place_secret_door(int y, int x) | ||
113 | 114 | } |
114 | 115 | |
115 | 116 | c_ptr->info &= ~(CAVE_FLOOR); |
117 | + delete_monster(y, x); | |
116 | 118 | } |
117 | 119 | } |
118 | 120 |