Bugs and issues in 4.1.0

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • PowerWyrm
    Prophet
    • Apr 2008
    • 2941

    Originally posted by PowerWyrm
    But this still doesn't work in some cases. Sometimes, the straight path moves the monster to a position where the straight path is blocked and pathfinding moves the monster back where it was, so there's still an endless loop. In that case, the loop must be broken by still continuing using pathfinding one more time.
    It does now. Simply adding old position for monster and checking if the old position is the first step on the straight path (in this case using pathfinding code instead) did the job. I tested with a char inside and outside a permawalled vault, and each time Morgoth was able to find the @ without getting stuck.

    Code below (from PWMAngband) if interested (this replaces monster_near_permwall):

    Code:
    /*
     * Find whether a PASS_WALL or KILL_WALL monster has a clear path to the player.
     *
     * This is a modified/simplified version of project_path().
     */
    static bool can_path_player(struct player *p, const struct monster *mon, struct chunk *c)
    {
        int y, x;
        int y1 = mon->fy;
        int x1 = mon->fx;
        int y2 = p->py;
        int x2 = p->px;
    
        /* Absolute */
        int ay, ax;
    
        /* Offsets */
        int sy, sx;
    
        /* Fractions */
        int frac;
    
        /* Scale factors */
        int full, half;
    
        /* Slope */
        int m;
    
        /* If player is in LOS, there's no need to go around walls */
        if (projectable_wall(c, y1, x1, y2, x2)) return true;
    
        /* Analyze "dy" */
        if (y2 < y1)
        {
            ay = (y1 - y2);
            sy = -1;
        }
        else
        {
            ay = (y2 - y1);
            sy = 1;
        }
    
        /* Analyze "dx" */
        if (x2 < x1)
        {
            ax = (x1 - x2);
            sx = -1;
        }
        else
        {
            ax = (x2 - x1);
            sx = 1;
        }
    
        /* Number of "units" in one "half" grid */
        half = (ay * ax);
    
        /* Number of "units" in one "full" grid */
        full = half << 1;
    
        /* Vertical */
        if (ay > ax)
        {
            /* Start at tile edge */
            frac = ax * ax;
    
            /* Let m = ((dx/dy) * full) = (dx * dx * 2) = (frac * 2) */
            m = frac << 1;
    
            /* Start */
            y = y1 + sy;
            x = x1;
    
            /* Never go back from whence we came */
            if ((x == mon->old_fx) && (y == mon->old_fy)) return false;
    
            /* Create the projection path */
            while (1)
            {
                /* Stop at destination grid */
                if ((x == x2) && (y == y2)) return true;
    
                /* Stop at permawall grids */
                if (square_isperm(c, y, x)) return false;
    
                /* Slant */
                if (m)
                {
                    /* Advance (X) part 1 */
                    frac += m;
    
                    /* Horizontal change */
                    if (frac >= half)
                    {
                        /* Advance (X) part 2 */
                        x += sx;
    
                        /* Advance (X) part 3 */
                        frac -= full;
                    }
                }
    
                /* Advance (Y) */
                y += sy;
            }
        }
    
        /* Horizontal */
        else if (ax > ay)
        {
            /* Start at tile edge */
            frac = ay * ay;
    
            /* Let m = ((dy/dx) * full) = (dy * dy * 2) = (frac * 2) */
            m = frac << 1;
    
            /* Start */
            y = y1;
            x = x1 + sx;
    
            /* Never go back from whence we came */
            if ((x == mon->old_fx) && (y == mon->old_fy)) return false;
    
            /* Create the projection path */
            while (1)
            {
                /* Stop at destination grid */
                if ((x == x2) && (y == y2)) return true;
    
                /* Stop at permawall grids */
                if (square_isperm(c, y, x)) return false;
    
                /* Slant */
                if (m)
                {
                    /* Advance (Y) part 1 */
                    frac += m;
    
                    /* Vertical change */
                    if (frac >= half)
                    {
                        /* Advance (Y) part 2 */
                        y += sy;
    
                        /* Advance (Y) part 3 */
                        frac -= full;
                    }
                }
    
                /* Advance (X) */
                x += sx;
            }
        }
    
        /* Diagonal */
        else
        {
            /* Start */
            y = y1 + sy;
            x = x1 + sx;
    
            /* Never go back from whence we came */
            if ((x == mon->old_fx) && (y == mon->old_fy)) return false;
    
            /* Create the projection path */
            while (1)
            {
                /* Stop at destination grid */
                if ((x == x2) && (y == y2)) return true;
    
                /* Stop at permawall grids */
                if (square_isperm(c, y, x)) return false;
    
                /* Advance (Y) */
                y += sy;
    
                /* Advance (X) */
                x += sx;
            }
        }
    }
    Code:
    /* If the monster can pass through nearby walls, do that */
    if (monster_passes_walls(mon->race) && can_path_player(p, mon, c))
    ...
    PWMAngband variant maintainer - check https://github.com/draconisPW/PWMAngband (or http://www.mangband.org/forum/viewforum.php?f=9) to learn more about this new variant!

    Comment

    • dreembeard
      Scout
      • Sep 2017
      • 46

      monster memory still based on old pathfinding

      Some (newly arrived) cold hounds just burst through a door at relative position 2 S, 36 E. That means that the info in the monster memory "... ever vigilant for intruders, which it may notice from 300 ft" is misleading.

      Not sure how the new multi-sense pathfinding works exactly, but I'd say the monster memory should either list max(hearing, smell) instead of hearing as the monster's detection range, or add something like "It can also pick up your scent" or "... follow your scent trail." for monsters that can.
      Two monsters to turn cavers into cadavers,
      But only when together,
      With the small one in front.

      A hard one for poor Sméagol, who has never played angband.

      Comment

      • Pete Mack
        Prophet
        • Apr 2007
        • 6697

        The easy way to solve this is to set up another path finding table conditionally if a KILL WALL/PASSWALL monster runs into permarock. It's expensive, since it needs to cover every square in the dungeon. But it's a lot simpler codewise than messing around with special cases.

        I don't find the permarock issue that big a deal actually.sic The primary effect of it is to make Morgoth too smart to fight @ in a confined space. Yeah, it also keeps certain annoying monsters from finding you in a vault, but that's a lesser issue.

        The big thing about pathfinding is that monsters get really stupid around low level (permanently scared) and/or sleeping monsters.

        Comment

        • Nick
          Vanilla maintainer
          • Apr 2007
          • 9351

          Originally posted by Pete Mack
          The easy way to solve this is to set up another path finding table conditionally if a KILL WALL/PASSWALL monster runs into permarock. It's expensive, since it needs to cover every square in the dungeon. But it's a lot simpler codewise than messing around with special cases.
          That's a good point. I'll have a thin about that vs PowerWyrm's code.

          Originally posted by dreembeard
          Not sure how the new multi-sense pathfinding works exactly, but I'd say the monster memory should either list max(hearing, smell) instead of hearing as the monster's detection range, or add something like "It can also pick up your scent" or "... follow your scent trail." for monsters that can.
          Another good point. Pathfinding currently (essentially) uses sight, sound and smell; in the upcoming monster list rework it would make sense to think of each monster in terms of how good it is at each of these, and report that sensibly in monster memory. It also raises the question of blinding or deafening monsters as a status effect.
          One for the Dark Lord on his dark throne
          In the Land of Mordor where the Shadows lie.

          Comment

          • PowerWyrm
            Prophet
            • Apr 2008
            • 2941

            Originally posted by PowerWyrm
            Found a cursed randart ring with the following properties:

            Code:
                 It randomly makes you teleport.
                 It occasionally makes a loud noise.
                 It paralyses you every now and then.
                 It makes you too scared to fight.
                 Provides resistance to lightning.
                 Cannot be harmed by lightning.
                 Makes you afraid of melee, and worse at shooting and casting spells.
                 Prevents teleportation. Aggravates nearby creatures.
            So we have both "teleport" and "no-teleport" effects, and the "terror" effect twice.

            When adding a curse, "teleport" and "no-teleport" are conflicting, so an object cannot get both teleportation and anti-teleportation curses. However, for randarts, the code that handles curses (the "make_bad" function) adds the OF_NO_TELEPORT flag directly, and not the anti-teleportation curse, so the conflict can still happen.

            For the double "terror" effect, this simply comes from the fact that the "cowardice" curse is added on a randart based off a ring of Escaping.

            Looking at append_object_curse(), there's a test made to reject curses where the effect would be foiled by an object property (for ex. paralysis curse on an item with free action), but nothing is done to reject curses with a flag conflicting with an object property (for ex. teleportation curse on an item with OF_NO_TELEPORT), or curses with a flag already present on the object (for ex. cowardice curse on an item with OF_AFRAID).
            In PWMAngband, I added a "reject:flag" line in curse.txt to reject curses where the flag is already present on the object (either conflicting or redundant). This impacts teleportation (NO_TELEPORT), impair mana recovery (IMPAIR_MANA), impair hitpoint recovery (IMPAIR_HP), cowardice (AFRAID) and anti-teleportation (NO_TELEPORT) curses. The other curses are not impacted because they often add more maluses than simply a flag (for example: vulnerability adds -AC along with AGGRAVATE, so objects with the AGGRAVATE flag will still "malefit" from the curse).
            PWMAngband variant maintainer - check https://github.com/draconisPW/PWMAngband (or http://www.mangband.org/forum/viewforum.php?f=9) to learn more about this new variant!

            Comment

            • Nick
              Vanilla maintainer
              • Apr 2007
              • 9351

              New builds up on the nightlies page, with the following changes:
              • Line of sight updates correctly after rubble falls (#2043)
              • No more crashes in debug "play with object" (#2051)
              • Door opening and bashing logic corrected and clarified (#2034)
              • No more crash when exiting fullscreen in map mode in the SDL port (#2052)
              • Windows sound now works (#2028)


              The issue of characters with RBlind being apparently blind after darkness is cast appears actually to be incomplete refreshing of the field of view - so adjacent grids remain "unknown". I haven't worked out why it's happening yet, though.
              One for the Dark Lord on his dark throne
              In the Land of Mordor where the Shadows lie.

              Comment

              • Thraalbee
                Knight
                • Sep 2010
                • 692

                Broken savefile in nightlies

                I shut down the game properly yesterday. Then today I can't open the savefile.
                angband-4.1.0-29-g79244767. It says:
                Code:
                Cannot read monster 17
                Savefile corrupted - Couldn't load block monsters
                A pain since I was in perfect shape to accomplish my goal, but I have a savefile from a couple of days ago on a backup so not critical for my part. Still a painful bug so posting here.
                Attached Files

                Comment

                • Nick
                  Vanilla maintainer
                  • Apr 2007
                  • 9351

                  Originally posted by Thraalbee
                  I shut down the game properly yesterday. Then today I can't open the savefile.
                  angband-4.1.0-29-g79244767. It says:
                  Code:
                  Cannot read monster 17
                  Savefile corrupted - Couldn't load block monsters
                  A pain since I was in perfect shape to accomplish my goal, but I have a savefile from a couple of days ago on a backup so not critical for my part. Still a painful bug so posting here.
                  I'll need your randart file too (it should be called randart_0d64e15a.txt).
                  One for the Dark Lord on his dark throne
                  In the Land of Mordor where the Shadows lie.

                  Comment

                  • Thraalbee
                    Knight
                    • Sep 2010
                    • 692

                    Thanks. File attached
                    Attached Files

                    Comment

                    • Nick
                      Vanilla maintainer
                      • Apr 2007
                      • 9351

                      This should work:
                      Attached Files
                      One for the Dark Lord on his dark throne
                      In the Land of Mordor where the Shadows lie.

                      Comment

                      • Thraalbee
                        Knight
                        • Sep 2010
                        • 692

                        Sure did. Thanks!

                        Comment

                        • passer_by
                          Rookie
                          • May 2015
                          • 19

                          • When a monster has picked up/destroyed an unknown object on an unknown-but-Detected space, the red star should (IMO) disappear if you cast Detection again: currently it doesn't.
                          • Now I have fire immunity from Narya, when I cast Resist Heat and Cold I get the "You feel more resistant to cold!" but not "You feel more resistant to fire!". Fair enough, but when the effect ends I get "You are no longer resistant to fire" which seems wrong.
                          • You can't examine/inspect a fully-identified object if it is on the floor, at a distance, in a pile.
                          Last edited by passer_by; October 9, 2017, 04:54.

                          Comment

                          • Mondkalb
                            Knight
                            • Apr 2007
                            • 891

                            Is there any hope, that we will get an updated version with repaired sound?
                            It drives me crazy to play the game without any sounds.
                            Pretty please!
                            My Angband winners so far

                            My FAangband efforts so far

                            Comment

                            • Nick
                              Vanilla maintainer
                              • Apr 2007
                              • 9351

                              Originally posted by Mondkalb
                              Is there any hope, that we will get an updated version with repaired sound?
                              It drives me crazy to play the game without any sounds.
                              Pretty please!
                              You mean like the latest build from yesterday?
                              One for the Dark Lord on his dark throne
                              In the Land of Mordor where the Shadows lie.

                              Comment

                              • Nick
                                Vanilla maintainer
                                • Apr 2007
                                • 9351

                                More new builds up, usual place, changes are:
                                • A fix to an issue that was causing savefile corruption on some levels where there was a mimic
                                • Removed cheat_know option, because now there's a better way of doing that via copying monster.txt to lore.txt (#2039)
                                • Made lava glow (fixing #2031 and #2036)
                                • Added a birth option to know all flavors


                                If anyone finds that last one controversial, there's a much more radical birth option coming soon
                                One for the Dark Lord on his dark throne
                                In the Land of Mordor where the Shadows lie.

                                Comment

                                Working...
                                😀
                                😂
                                🥰
                                😘
                                🤢
                                😎
                                😞
                                😡
                                👍
                                👎