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:
@@ -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
|
||||||
|
|||||||
13
src/shknam.c
13
src/shknam.c
@@ -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. */
|
||||||
|
|||||||
Reference in New Issue
Block a user