• R/O
  • SSH
  • HTTPS

junnethack: Commit


Commit MetaInfo

Revision333 (tree)
Time2010-09-23 12:35:00
Authorso-miya

Log Message

UnNetHack SVN版rev.675を適用した。
Fix create_door() routine (from SporkHack rev. 655, 656)
create_door()ルーチンを修正(SporkHack rev. 655, 656から)

Change Summary

Incremental Difference

--- junnethack/trunk/src/sp_lev.c (revision 332)
+++ junnethack/trunk/src/sp_lev.c (revision 333)
@@ -1282,43 +1282,43 @@
12821282 dwall = 1 << rn2(4);
12831283
12841284 dpos = dd->pos;
1285- if (dpos == -1) /* The position is RANDOM */
1286- dpos = rn2(((dwall & (W_WEST|W_EAST)) ? 2 : 1) ?
1287- (broom->hy - broom->ly + 1) : (broom->hx - broom->lx + 1));
12881285
12891286 /* Convert wall and pos into an absolute coordinate! */
12901287 wtry = rn2(4);
1291- for (walltry = 0; walltry < 4; walltry++) {
1292- switch ((wtry+walltry) % 4) {
1288+ switch (wtry) {
12931289 case 0:
1294- if (!(dwall & W_NORTH)) break;
1290+ if (!(dwall & W_NORTH)) goto redoloop;
12951291 y = broom->ly - 1;
1296- x = broom->lx + dpos;
1292+ x = broom->lx + ((dpos == -1) ? rn2(1+(broom->hx - broom->lx)) : dpos);
1293+ if (IS_ROCK(levl[x][y-1].typ)) goto redoloop;
12971294 goto outdirloop;
12981295 case 1:
1299- if (!(dwall & W_SOUTH)) break;
1296+ if (!(dwall & W_SOUTH)) goto redoloop;
13001297 y = broom->hy + 1;
1301- x = broom->lx + dpos;
1298+ x = broom->lx + ((dpos == -1) ? rn2(1+(broom->hx - broom->lx)) : dpos);
1299+ if (IS_ROCK(levl[x][y+1].typ)) goto redoloop;
13021300 goto outdirloop;
13031301 case 2:
1304- if (!(dwall & W_WEST)) break;
1302+ if (!(dwall & W_WEST)) goto redoloop;
13051303 x = broom->lx - 1;
1306- y = broom->ly + dpos;
1304+ y = broom->ly + ((dpos == -1) ? rn2(1+(broom->hy - broom->ly)) : dpos);
1305+ if (IS_ROCK(levl[x-1][y].typ)) goto redoloop;
13071306 goto outdirloop;
13081307 case 3:
1309- if (!(dwall & W_EAST)) break;
1308+ if (!(dwall & W_EAST)) goto redoloop;
13101309 x = broom->hx + 1;
1311- y = broom->ly + dpos;
1310+ y = broom->ly + ((dpos == -1) ? rn2(1+(broom->hy - broom->ly)) : dpos);
1311+ if (IS_ROCK(levl[x+1][y].typ)) goto redoloop;
13121312 goto outdirloop;
13131313 default:
13141314 x = y = 0;
13151315 panic("create_door: No wall for door!");
13161316 goto outdirloop;
1317- }
13181317 }
13191318 outdirloop:
13201319 if (okdoor(x,y))
13211320 break;
1321+redoloop: ;
13221322 } while (++trycnt <= 100);
13231323 if (trycnt > 100) {
13241324 impossible("create_door: Can't find a proper place!");
Show on old repository browser