github pull request #113 - shopkeeper placement

Fixes #113

Incorporate the contents of pull request #113 to fix shopkeeper setup
for irregularly shaped shop rooms.  Code intending to adjust the Y
coordinate was erroneously incrementing the X one instead.  (I'm not
sure whether we have any irregular shops at all but if so, they don't
have the necessary orientation to trigger this bug.)

And add a couple of formatting tweaks in the vicinity....
This commit is contained in:
PatR
2018-07-04 19:26:59 -07:00
parent faa85e23b4
commit 2596052c39
2 changed files with 10 additions and 6 deletions

View File

@@ -62,6 +62,9 @@ special level loader didn't support populating several types of special rooms
(ant hole, cockatrice nest, leprechaun hall) (ant hole, cockatrice nest, leprechaun hall)
eating rings while polymorphed didn't handle bonus/penalty for increase damage, eating rings while polymorphed didn't handle bonus/penalty for increase damage,
increase accuracy, or protection correctly increase accuracy, or protection correctly
shopkeeper's position in front of shop door didn't correctly handle bottom
edge of irregularly shaped shop due to typo or copy+paste error
(latent bug; no such shops are present in 3.6.x)
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository

View File

@@ -602,6 +602,7 @@ struct mkroom *sroom;
/* check that the shopkeeper placement is sane */ /* check that the shopkeeper placement is sane */
if (sroom->irregular) { if (sroom->irregular) {
int rmno = (int) ((sroom - rooms) + ROOMOFFSET); int rmno = (int) ((sroom - rooms) + ROOMOFFSET);
if (isok(sx - 1, sy) && !levl[sx - 1][sy].edge if (isok(sx - 1, sy) && !levl[sx - 1][sy].edge
&& (int) levl[sx - 1][sy].roomno == rmno) && (int) levl[sx - 1][sy].roomno == rmno)
sx--; sx--;
@@ -613,18 +614,18 @@ struct mkroom *sroom;
sy--; sy--;
else if (isok(sx, sy + 1) && !levl[sx][sy + 1].edge else if (isok(sx, sy + 1) && !levl[sx][sy + 1].edge
&& (int) levl[sx][sy + 1].roomno == rmno) && (int) levl[sx][sy + 1].roomno == rmno)
sx++; sy++;
else else
goto shk_failed; goto shk_failed;
} else if (sx == sroom->lx - 1) } else if (sx == sroom->lx - 1) {
sx++; sx++;
else if (sx == sroom->hx + 1) } else if (sx == sroom->hx + 1) {
sx--; sx--;
else if (sy == sroom->ly - 1) } else if (sy == sroom->ly - 1) {
sy++; sy++;
else if (sy == sroom->hy + 1) } else if (sy == sroom->hy + 1) {
sy--; sy--;
else { } else {
shk_failed: shk_failed:
#ifdef DEBUG #ifdef DEBUG
/* Said to happen sometimes, but I have never seen it. */ /* Said to happen sometimes, but I have never seen it. */