Scroll of acquirement drops... a magical hard leather cap

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

    Scroll of acquirement drops... a magical hard leather cap

    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!
  • Mondkalb
    Knight
    • Apr 2007
    • 891

    #2
    That's just mean. I think it should generate at least an excellent object?
    Last edited by Mondkalb; September 24, 2014, 14:04.
    My Angband winners so far

    My FAangband efforts so far

    Comment

    • fizzix
      Prophet
      • Aug 2009
      • 2969

      #3
      Originally posted by Mondkalb
      That's just mean. I think it should generate at least a excellent object?
      I think it should also (as in, this seems buggy)

      Comment

      • kaypy
        Swordsman
        • May 2009
        • 292

        #4
        Dig dig dig

        OK, aquirement(...)
        calls make_object(level,good=TRUE,great=TRUE...)
        which calls apply_magic(level,allow_artifacts=TRUE,good=TRUE,g reat=TRUE...)
        which calls make_ego_item(level...)
        which calls ego_find_random(level...) to find the type of ego

        ego_find_random may fail, if there isn't any appropriate ego available, but that normally only applies to depths with no generatable ego. Some form of helm should be available anywhere... (or L1 to 127 at least)

        ...

        Hmm. I think not giving the Helm of Beauty an A line may be winding up with garbage allocation numbers instead of uncreatable... Nope nothing to see here move along

        ...

        I went into tweak object mode on a leather cap rerolling it at excellent, and every so often the initial loop on ego_find_random seems to skip entirely

        ...

        Ah. Occasionally the GREAT_EGO level boost in make_ego_item sets it to generate items on eg level 257 which is way out of the generation range of any of egos.

        While min depth should be checked against the boosted depth, max depth should really be vs actual depth. You would need to store the original level in make_ego_item and pass that as a new argument to ego_find_random

        Code:
        static struct ego_item *ego_find_random(object_type *o_ptr, [COLOR="Red"][B]int eff_level,[/B][/COLOR] int level)
        {
        
        ...
        
        		/* Reset any previous probability of this type being picked */
        		table[i].prob3 = 0;
        		
        		if ([COLOR="Red"][B]eff_level[/B][/COLOR] < table[i].level)
        			continue;
        
        		/* Access the ego item */
        		ego = &e_info[table[i].index];
                
        		/* enforce maximum */
        		if (level > ego->alloc_max) continue;	
        
        		/* roll for Out of Depth (ood) */
        		if ([COLOR="Red"][B]eff_level[/B][/COLOR] < ego->alloc_min){
        			ood_chance = MAX(2, (ego->alloc_min - level) / 3);
        			if (!one_in_(ood_chance)) continue;
        		}
        ...
        
        }
        
        ...
        
        static void make_ego_item(object_type *o_ptr, int level)
        {
        	[COLOR="Red"][B]int orig_level = level;[/B][/COLOR]
        
        ...
        
        	/* Try to get a legal ego type for this item */
        	o_ptr->ego = ego_find_random(o_ptr, level[COLOR="Red"], [B]orig_level[/B][/COLOR]);
        
        ...
        
        }
        Last edited by kaypy; September 24, 2014, 17:33.

        Comment

        • Nick
          Vanilla maintainer
          • Apr 2007
          • 9338

          #5
          Nice work, bug filed.
          One for the Dark Lord on his dark throne
          In the Land of Mordor where the Shadows lie.

          Comment

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