Opened 7 years ago

Closed 5 years ago

#1646 closed bug (fixed (in master))

Make special art rings/amulets fixed flavors

Reported by: PowerWyrm Owned by: molybdenum
Milestone: 3.5.0 Keywords:
Cc:

Description

Most of the time, the flavor for artifact rings/amulets completely differs from the artifact description. It feels silly to have an unidentified Narya ("The Ring of Fire, made of gold and set with a ruby that glows like flame.") appear as an "emerald" or "sapphire" ring.

The best would be to define new fixed entries in flavor.txt and remap flvr-xxx.prf and graf-xxx.prf accordingly.

Change History (17)

comment:1 Changed 7 years ago by magnate

I disagree - I think not giving away information trumps this minor inconsistency. Two alternatives:

the easy one - just change the description text so that it focuses on the ring's origins or powers and is agnostic about material

the harder one - make the flavours system more sophisticated by diving flavours into categories and allow each artifact to have a random flavour from a category of appropriate flavours (e.g. gold, ruby, fiery, etc.).

comment:2 Changed 7 years ago by PowerWyrm

I think the "obvious" ones should be treated the same way as the special light sources. You have "a Phial", "a Star", "an Arkenstone". You should have "a Necklace", "a Jewel", "an Elfstone"... and probably "a Ring of Power". Maybe also change the other ones: "a Serpent Ring" (Barahir), "a Pendant" (Ingwe)...

comment:3 Changed 7 years ago by magnate

Sorry, I don't agree that any artifacts should be discernible without reaching them and picking them up. I would change phial/star/arkenstone so that they looked like generic things until you picked them up. Admittedly they don't look like lanterns, which is why it hasn't happened so far.

comment:4 Changed 6 years ago by takkaria

  • Milestone changed from Triage to 3.5.0

Assigning open bugs to 3.5 for fixing.

comment:5 Changed 6 years ago by takkaria

FWIW I agree with PowerWyrm? about this - flavour and description should line up and we should modify flavour rather than de-randomising. Randarts should have their flavours shuffled still though.

comment:6 Changed 6 years ago by molybdenum

  • Owner set to molybdenum
  • Status changed from new to assigned

comment:7 Changed 6 years ago by fizzix

  • Resolution set to fixed (in master)
  • Status changed from assigned to closed

comment:8 follow-up: Changed 6 years ago by PowerWyrm

  • Resolution fixed (in master) deleted
  • Status changed from closed to reopened

Tested with angband-v3.5-dev-574-gc07086c and it doesn't work when you lose one of the flavored artifacts and find it again later: for example, with Carlammas, you look at the artifact on the floor and it says "You see a Amulet".

Looking at the code, this happens because obj_desc_get_basename_artifact() returns "& & Amulet". In object.txt, artifact templates already include "& ", so the "format" should not include it.

For the same reason, you get "You see a Soft Leather Armour" when looking at an unidentified Hithlomir, because the base name returned is "& Soft Leather Armour". So when looking at aware (or unflavored) artifacts, simply return the o_ptr->kind->name. Otherwise, return "& # Amulet~" or "& # Ring~" (since only those can be artifacts).

Last edited 6 years ago by PowerWyrm (previous) (diff)

comment:9 Changed 6 years ago by PowerWyrm

Seems like the whole obj_desc_get_basename_artifact() and allocating/freeing string is overcomplicated, when replacing in obj_desc_get_basename() if (o_ptr->artifact && aware) by if (o_ptr->artifact && (aware || (o_ptr->ident & IDENT_NAME) || terse || !o_ptr->kind->flavor)) seems sufficient.

Last edited 6 years ago by PowerWyrm (previous) (diff)

comment:10 Changed 6 years ago by molybdenum

I think I had tried what you suggested regarding obj_desc_get_basename() and for some reason that wasn't sufficient. I'll go over this again.

comment:11 Changed 6 years ago by molybdenum

When this occurred, were you using a save that was created in a previous build?

comment:12 Changed 6 years ago by PowerWyrm

Nope, I downloaded the gc07086c and immediately started a new char.

comment:13 Changed 6 years ago by PowerWyrm

Now that some artifacts have fixed flavors, it's probably a good time to remap the tiles for these artifacts (copy the values from graf-xxx to flvr-xxx). This will prevent for example Elessar (fixed flavor is now green) from showing as a yellow amulet (old flavor was yellow).

comment:14 in reply to: ↑ 8 ; follow-up: Changed 5 years ago by PowerWyrm

Replying to PowerWyrm:

Tested with angband-v3.5-dev-574-gc07086c and it doesn't work when you lose one of the flavored artifacts and find it again later: for example, with Carlammas, you look at the artifact on the floor and it says "You see a Amulet".

Looking at the code, this happens because obj_desc_get_basename_artifact() returns "& & Amulet". In object.txt, artifact templates already include "& ", so the "format" should not include it.

For the same reason, you get "You see a Soft Leather Armour" when looking at an unidentified Hithlomir, because the base name returned is "& Soft Leather Armour". So when looking at aware (or unflavored) artifacts, simply return the o_ptr->kind->name. Otherwise, return "& # Amulet~" or "& # Ring~" (since only those can be artifacts).

Still incorrect as dev-657-ge2a740b: obj_desc_get_basename_artifact() prefixes the kind name with a useless format string, leading to the same message "You see a Soft Leather Armour" when looking at an unidentified Hithlomir; also an unidentified Necklace of the Dwarves will say "a Golden Necklace" instead of "a Golden Amulet", giving away info about the artifact.

See comment 9:

  • unflavored artifacts always use the kind name
  • flavored artifacts are only amulets and rings; they use the kind name when aware, or simply "& # Amulet~" or "& # Ring~" when unaware
  • that's why using the following code in obj_desc_get_basename() should be sufficient (and only calling obj_desc_get_basename in obj_desc_name):
if (o_ptr->artifact && (aware || (o_ptr->ident & IDENT_NAME) || terse || !o_ptr->kind->flavor))
    return o_ptr->kind->name;

/* Analyze the object */
...

comment:15 in reply to: ↑ 14 Changed 5 years ago by molybdenum

Replying to PowerWyrm:

Still incorrect as dev-657-ge2a740b: obj_desc_get_basename_artifact() prefixes the kind name with a useless format string, leading to the same message "You see a Soft Leather Armour" when looking at an unidentified Hithlomir; also an unidentified Necklace of the Dwarves will say "a Golden Necklace" instead of "a Golden Amulet", giving away info about the artifact.

Then I think I've completely misunderstood the original issue. My understanding was that it was desired to display artifacts using their kind, if available -- hence the golden necklace or green elfstone instead of golden and green amulets. Is the goal just to have fixed flavors for artifacts?

comment:16 Changed 5 years ago by PowerWyrm

I think there are two issues here. First, the format prefix is misconstructed: there should be none for unflavored artifacts (it's already included in the kind name). Then any unidentified flavored (special) artifact should either display it's "hidden" name (a Golden Amulet, a Ruby Ring...) or a "special" name like the artifact light sources (a Necklace, a Ring of Power...). Having a mix of the two (a Golden Necklace) feels wrong, since it gives away info without making the flavor useful.

That's why I was also suggesting to replace the generic special artifact kind names by something more meaningful to avoid getting "You see an Amulet" or "You see a Ring" when finding a special artifact for the second time, because if you're aware of the flavor, you should be able to differentiate each special artifact. Currently, you have two "Amulets" (Carlammas, Ingwe) and six "Rings" (Barahir, Tulkas, Narya, Nenya, Vilya, One Ring). Changing Ingwe to a "Pendant", Barahir to a "Serpent Ring" and the rings of power to a "Ring of Power" would fix this (the four RoPs? can be differentiated by their colour).

Then it would go:

  • display the flavor when unaware (a Golden Amulet): flavor + "Amulet" or "Ring"
  • display the kind name when aware (a Necklace) or known (the Necklace of the Dwarves)

comment:17 Changed 5 years ago by takkaria

  • Resolution set to fixed (in master)
  • Status changed from reopened to closed
Note: See TracTickets for help on using tickets.