diff --git a/graph.cpp b/graph.cpp index dfdaf598..f3cd39d8 100644 --- a/graph.cpp +++ b/graph.cpp @@ -1789,8 +1789,9 @@ bool drawMonster(const transmatrix& Vparam, int ct, cell *c, int col) { int d = c->mondir; if(d == NODIR) forCellIdEx(c2, i, c) - if(c2->monst == moHexSnakeTail && c2->mondir == c->spin(i)) + if(among(c2->monst, moHexSnakeTail, moHexSnake) && c2->mondir == c->spin(i)) d = i; + if(d == NODIR) { d = hrand(c->type); createMov(c, d); } int c1 = nestcolors[pattern_threecolor(c)]; int c2 = nestcolors[pattern_threecolor(c->mov[d])]; col = (c1 + c2); // sum works because they are dark and should be brightened diff --git a/landgen.cpp b/landgen.cpp index 4028e20d..5ee10892 100644 --- a/landgen.cpp +++ b/landgen.cpp @@ -1521,7 +1521,7 @@ void giantLandSwitch(cell *c, int d, cell *from) { ONEMPTY { if(hrand(30000) < 30+items[itRedGem]+yendor::hardness() && !c->monst && !c->wall && !peace::on) { vector gooddir; - for(int t=0; ttype; t++) if(c->mov[t]->mpdist > c->mpdist && !pseudohept(c->mov[t])) + for(int t=0; ttype; t++) if(c->mov[t]->mpdist > c->mpdist) gooddir.push_back(t); if(size(gooddir)) generateSnake(c, gooddir[hrand(size(gooddir))]); diff --git a/monstergen.cpp b/monstergen.cpp index 0f9919c7..aee0b83e 100644 --- a/monstergen.cpp +++ b/monstergen.cpp @@ -656,7 +656,7 @@ void generateSnake(cell *c, int i) { if(c3->monst || c3->bardir != NODIR || c3->wall) break; c2 = c3; c2->monst = moHexSnakeTail; - i = (j + (c2->type%4 == 0 ? c2->type/2 : (len%2 ? 2 : c2->type - 2))) % S6; + i = (j + (c2->type%4 == 0 ? c2->type/2 : (len%2 ? 2 : c2->type - 2))) % c2->type; createMov(c2, i); if(!inpair(c2->mov[i], cpair)) { vector goodsteps;