Make all artifacts "special" artifacts

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Derakon
    Prophet
    • Dec 2009
    • 9022

    Make all artifacts "special" artifacts

    There's a number of places in the code that complain about how "special" artifacts (light sources and jewelry, basically) are a big hack and how their generation process should be unified with the normal artifact generation process. I think this is a good idea, though not in the way the comments presumably intended. I say all artifacts should use the special artifact generation process.

    To clarify: currently, normal equipment artifacts are generated if the game makes an equipment item, it passes (in order) the good, great, and artifact checks, there is an artifact still to be generated of the appropriate item type, and it passes an appropriate rarity check for the artifact chosen. More or less, anyway; I'm working from memory here.

    Conversely, for special artifacts the game just decides to try making a special artifact, then runs the appropriate rarity tests for each one, and if one passes, then bam, special artifact generated.

    There's a few warts with artifact generation that the "special" generator obviates. The most obvious is that artifact rarity is tied to base item rarity, so every time the base item rarity gets changed, artifact rarities have to be adjusted to suit. It's also basically impossible to make, say, an artifact Scythe of Slicing native to dlvl 10, whose only special properties are that it aggravates and slays orcs. And it's a bit weird that the level on which a random item lying on the floor is most likely to be Ringil is 20, since that's the native depth of the longsword.

    Someone suggested this offhandedly in a recent thread, I forget who, and IMO it's an excellent idea. Looking at make_artifact_special (the function called to make a special artifact, natch), as far as I can tell the only thing that'd need to be changed is that instead of trying each artifact in order, it should try to make a single random artifact.

    Thoughts?
  • Magnate
    Angband Devteam member
    • May 2007
    • 5110

    #2
    Originally posted by Derakon
    Someone suggested this offhandedly in a recent thread, I forget who, and IMO it's an excellent idea. Looking at make_artifact_special (the function called to make a special artifact, natch), as far as I can tell the only thing that'd need to be changed is that instead of trying each artifact in order, it should try to make a single random artifact.
    Just to be clear, you mean to create a single artifact at random.

    I agree completely that artifacts should have only one generation process rather than two - but I had assumed that the opposite approach would be better: make jewelry and lights use the "standard" artifact process (ticket #1014).

    Having read your post, I am inclined to think that this suggestion may be both simpler and better. I'll be interested to hear what others think.
    "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

    Comment

    • camlost
      Sangband 1.x Maintainer
      • Apr 2007
      • 523

      #3
      I've mentioned it in a few different threads, for more or less the same reasons as you state. I see no compelling need for artifacts to be stapled onto a base object, with all its rarity, depth, etc. issues.

      Thanks for putting together a thread and a few additional words to this. (I mentioned it most recently in the thread that was complaining about too many shoes).

      Also thanks for looking through the make_artifact_special code. I haven't checked to see if is as easy as I think it should be.
      a chunk of Bronze {These look tastier than they are. !E}
      3 blank Parchments (Vellum) {No french novels please.}

      Comment

      • Timo Pietilä
        Prophet
        • Apr 2007
        • 4096

        #4
        Originally posted by camlost
        I've mentioned it in a few different threads, for more or less the same reasons as you state. I see no compelling need for artifacts to be stapled onto a base object, with all its rarity, depth, etc. issues.

        Thanks for putting together a thread and a few additional words to this. (I mentioned it most recently in the thread that was complaining about too many shoes).

        Also thanks for looking through the make_artifact_special code. I haven't checked to see if is as easy as I think it should be.
        I see this (from purely non-coder perspective with 10seconds of thought) as:

        roll for item
        Roll "is it good"
        Roll "is it excellent"
        Roll "could it be artifact"

        Based on results above

        For artifact: roll which one.

        Else

        roll for base item.

        Combine rarities to see if item was created.

        Obviously the actual code will be quite a bit more complex, but to me that looks like something that isn't very hard to make.

        Comment

        • Antoine
          Ironband/Quickband Maintainer
          • Nov 2007
          • 1010

          #5
          Originally posted by camlost
          I've mentioned it in a few different threads, for more or less the same reasons as you state. I see no compelling need for artifacts to be stapled onto a base object, with all its rarity, depth, etc. issues.
          I think each art should still be associated with a base object - that is the object which the art looks like until it's identified, and it is the object which sets the art's weight, appearance, base damage dice etc.

          But yes, fine to detach the art's depth and rarity from the base object's depth and rarity...

          A.
          Ironband - http://angband.oook.cz/ironband/

          Comment

          • buzzkill
            Prophet
            • May 2008
            • 2939

            #6
            Originally posted by Antoine
            I think each art should still be associated with a base object - that is the object which the art looks like until it's identified, and it is the object which sets the art's weight, appearance, base damage dice etc.
            Yes, but this base object doesn't need to be created randomly. The base object can be specified as a trait of the artifact. So, when it is 'decided' that an artifact is 'created' I suppose that a base object 'placeholder' will also be created... or did I misunderstand you?

            The biggest problem I can see is having to re-adjust the rarities (maybe), since base object creation will no longer figure into it. Aside from that, generating artifacts as "special" seems much cleaner, at least to me.

            An unrelated question about rabdarts... Are a randarts weapon/armour powers locked to a particular item type? What I mean is, can randart Ringil be generated as a war hammer or a great axe or a shovel?
            www.mediafire.com/buzzkill - Get your 32x32 tiles here. UT32 now compatible Ironband and Quickband 9/6/2012.
            My banding life on Buzzkill's ladder.

            Comment

            • Timo Pietilä
              Prophet
              • Apr 2007
              • 4096

              #7
              Originally posted by buzzkill
              An unrelated question about rabdarts... Are a randarts weapon/armour powers locked to a particular item type? What I mean is, can randart Ringil be generated as a war hammer or a great axe or a shovel?
              I think current code could create Artifact bowl of petunias based on Ringil if we had flowerpots as base item.

              Comment

              • Derakon
                Prophet
                • Dec 2009
                • 9022

                #8
                Timo's right. You can generally recognize a randart based on Bladeturner, Ringil, etc. because they'll be much more powerful than most. Randart rarity does take the base item rarity into account, though, so the converted Ringil should be just as rare as the real Ringil is in normal games.

                And yeah, rarities would need to be rebalanced. But that needs to happen anyway, since currently many powerful artifacts are far too common (c.f. Feanor).

                Comment

                • Magnate
                  Angband Devteam member
                  • May 2007
                  • 5110

                  #9
                  Originally posted by Derakon
                  Timo's right. You can generally recognize a randart based on Bladeturner, Ringil, etc. because they'll be much more powerful than most. Randart rarity does take the base item rarity into account, though, so the converted Ringil should be just as rare as the real Ringil is in normal games.

                  And yeah, rarities would need to be rebalanced. But that needs to happen anyway, since currently many powerful artifacts are far too common (c.f. Feanor).
                  Careful - we're conflating two different issues here.

                  Anecdotal evidence from dumps shows that Feanor and The One are noticeably more common since 3.1.x, but IMO this is not relative to other artifacts - I think the attack on TMJ launched in 3.1.0 had a side effect of making artifacts more common per se (along with, even more noticeably, ego items).

                  Separately, there have been a series of changes to both base item rarities and artifact rarities. There was the change to alloc_prob (a percentage instead of a "one in X" chance), there were some changes to individual standart rarities, and some new/changed base items. The old mechanism of calculating randart rarity by (old art rarity * old base item rarity / new base item rarity) *hasn't* changed, but obviously the other changes have affected randart generation.

                  @buzzkill: ironically the full answer to your question is that any standart can choose any base item for a randart *except* lights and jewelry. Lights, rings and amulets can only have their properties randomised, not their base items. Adopting the suggestion in this thread would unlock this.
                  "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                  Comment

                  • Antoine
                    Ironband/Quickband Maintainer
                    • Nov 2007
                    • 1010

                    #10
                    Originally posted by Magnate
                    @buzzkill: ironically the full answer to your question is that any standart can choose any base item for a randart *except* lights and jewelry. Lights, rings and amulets can only have their properties randomised, not their base items. Adopting the suggestion in this thread would unlock this.
                    So would this mean assigning base items to the existing jewelery? Would Narya, for instance, become an art based on a Ring of Flames?

                    A.
                    Ironband - http://angband.oook.cz/ironband/

                    Comment

                    • Magnate
                      Angband Devteam member
                      • May 2007
                      • 5110

                      #11
                      Originally posted by Antoine
                      So would this mean assigning base items to the existing jewelery? Would Narya, for instance, become an art based on a Ring of Flames?
                      No - base items aren't chosen for "special" artifacts. It currently goes like this:

                      1. Check for "special" artifact.

                      2. Choose base item.

                      3. Check for (a) good (b) great (c) non-special artifact.

                      All we'd do is fold 3(c) into 1. So for randarts, any base item would be possible for any standart. Ringil could become a ring of flames, and Narya could become a cloak.
                      "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                      Comment

                      • Derakon
                        Prophet
                        • Dec 2009
                        • 9022

                        #12
                        Antoine: No, current "special" artifacts would continue to be generated without base types beyond "ring", "amulet", etc. The same would apply to "ordinary" artifacts too, though.

                        Basically, instead of generating an item type and then deciding that the quality level of the item should be artifact, we generate an artifact and use its declared base type to describe it.

                        Regarding Magnate's comments on randarts: currently, randart jewelry/lightsources are always based on standart jewelry/lightsources. That's why there's always 1 randart phial, which is very similar to the standart phial. If we break the special/ordinary artifact delineation, then all artifacts are just artifacts, and they could "cross-pollinate", so to speak -- standarts that are equipment can become jewelry/lightsource randarts, and vice versa. I don't think it'd be valid to say that the randart version of Ringil could be based on a Ring of Flames (since no artifact is based on a specific subtype of jewelry, just on the ring/amulet/lightsource categories), but it would be to say that the randart version of Ringil could be a ring.

                        Comment

                        • Magnate
                          Angband Devteam member
                          • May 2007
                          • 5110

                          #13
                          Originally posted by Derakon
                          Antoine: No, current "special" artifacts would continue to be generated without base types beyond "ring", "amulet", etc. The same would apply to "ordinary" artifacts too, though.

                          Basically, instead of generating an item type and then deciding that the quality level of the item should be artifact, we generate an artifact and use its declared base type to describe it.

                          Regarding Magnate's comments on randarts: currently, randart jewelry/lightsources are always based on standart jewelry/lightsources. That's why there's always 1 randart phial, which is very similar to the standart phial. If we break the special/ordinary artifact delineation, then all artifacts are just artifacts, and they could "cross-pollinate", so to speak -- standarts that are equipment can become jewelry/lightsource randarts, and vice versa. I don't think it'd be valid to say that the randart version of Ringil could be based on a Ring of Flames (since no artifact is based on a specific subtype of jewelry, just on the ring/amulet/lightsource categories), but it would be to say that the randart version of Ringil could be a ring.
                          Well that depends. The randart generator currently looks through object.txt for a base item, so an immediate implementation would indeed allow specific jewelry items to be chosen as base items. But since it was written, we have now introduced object_base.txt, which is almost certainly a better starting point for a randart generator. When I get to the rewrite, I'll switch to that, which means that the base item chosen would be "ring" rather than "ring of something".
                          "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                          Comment

                          • Derakon
                            Prophet
                            • Dec 2009
                            • 9022

                            #14
                            Ah, my mistake. Thanks for the correction.

                            I had noticed object_base before but hadn't really investigated it. It looks like a set of templates for different base object types. Very nice for avoiding duplication (e.g. by having to specify that every single bladed weapon can be melted), but how would you propose using it for randarts?

                            Random thought: if artifacts work as one-off templates applied to base items, then themed artifacts could work by layering templates. Choose a base item. Make a randart template. Apply the template to the item. Now use the resulting output as input (i.e. a new template) to the generator a a few more times. That could give you results like the *thancs (all 2d4 (+4,+6) daggers) or Amrod and Amras (both shortbows with three elemental resistances).

                            This has more to do with the mechanics of deciding what artifacts look like than it does with deciding when to make them, though.

                            Comment

                            • Magnate
                              Angband Devteam member
                              • May 2007
                              • 5110

                              #15
                              Originally posted by Derakon
                              I had noticed object_base before but hadn't really investigated it. It looks like a set of templates for different base object types. Very nice for avoiding duplication (e.g. by having to specify that every single bladed weapon can be melted), but how would you propose using it for randarts?
                              Well, it can't quite be used as-is, but my vague thought is that the less specified about the beginning of a randart, the better. object_base defines tvals but not svals, opening up the possibility of creating artifacts that are not based on any existing svals and have nothing predefined except the flags common to all items of that tval.

                              It's not immediately clear that that's better than using object.txt though, so it needs some more thought.
                              Random thought: if artifacts work as one-off templates applied to base items, then themed artifacts could work by layering templates. Choose a base item. Make a randart template. Apply the template to the item. Now use the resulting output as input (i.e. a new template) to the generator a a few more times. That could give you results like the *thancs (all 2d4 (+4,+6) daggers) or Amrod and Amras (both shortbows with three elemental resistances).

                              This has more to do with the mechanics of deciding what artifacts look like than it does with deciding when to make them, though.
                              Indeed. My ideas for themed randarts are quite similar, involving one or more templates applied to an empty item. One day the templates will be in an edit file ...
                              "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                              Comment

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