Hello. I'd dug some in the material code, and it is quite messy. But I'm not sure how to fix/change it.
Here is how it works. Material is used for saving throws against attacktypes (against fire, ice, ...). When NEW_MATERIAL_CODE is defined, material will also affect an item's resistances, damage, speed, wc, ac. There are 2 related fields, "material" which is a bitmask and "materialname" which is a string. lib/materials contains a list of materials, first "regular" materials (which all got neutral resistances / modifiers), then special ones (with special resistances / modifiers). Each material type (metal, dragonscale, ...) corresponds to a type, check include/material.h (M_xxx) for their values. If "materialname" is NULL, it is initialized with a material matching "material"'s bitmask. When NEW_MATERIAL_CODE is defined, this material "incarnation" is chosen randomly based on map's difficulty and item's magic (thus having a material of 2 can translate to iron, silver, gold, lead, steel, ...). When NEW_MATERIAL_CODE is not set, the first matching material is used (thus 2 will always do iron). materialname is used when doing saving throws, pointing to the material's intrinsic resistances. It is also used when describing the item - thus gold coins have a "it is made of: gold" even when its material value is 2 (iron) in the archetype. Consequently also, gold coins will use the 'gold' values for saving throws. There are some issues with the current implementation: * when NEW_MATERIAL_CODE is defined, objects have modified resistances / stats based on their material and also random materials, thus leading to massive non merging things * materialname only reflects one material - if I set "material 3" in the archetypes, it will only be "paper", not "paper and iron". This also influences the saving throw, which will only be paper, not iron. * if material name is set to a special value (paper and glass - anything not listed in lib/materials), the item is then indestructible. * material is effectively useless when materialname is set, even to an "invalid" value So the plan is obviously to fix multi material handling - and for instance use a random material for saving throws, the hit can be on a "random" part of the item. Keeping specific saving throws seems logical, since gold doesn't behave like iron for instance (but they got the same "material" value, 2). The 2 things I'm wondering whether to keep (and maybe enable?) or remove totally are: * random material choice if not set. * resistances / stats modifier Activating this could lead to more random items, and interesting combinations. Current eg resistance modifiers in the lib/material aren't that important (around -5 to 5), but could add variety to items. On the other hand, it would introduce quite many different items, non merging, things like that. If I were to decide right now (but that may change), I'd probably keep/enable modifiers and random materials. But I would link that to "loot diminution", ie reduce the junk players find. Thus less items, but more varied. I would also add materials with higher modifiers and penalties (eg: +20 fire, -20 cold - you get a bracers of that type, keep it?). And maybe even add other modifiers (reduce/increase hp regen, ...) Of course, that would mean more time required to sort/test all the junk :) Nicolas -- http://nicolas.weeger.free.fr [Petit site d'images, de textes, de code, bref de l'aléatoire !]
pgpmVSYJZ2OVJ.pgp
Description: PGP signature
_______________________________________________ crossfire mailing list crossfire@metalforge.org http://mailman.metalforge.org/mailman/listinfo/crossfire