Skip to content

Commit

Permalink
Armor weight changes
Browse files Browse the repository at this point in the history
* Wearing armor now weights half as much
* Armor weight was increased in general
* The net effect is generally that armor weights slightly less if worn
* Dragon armor now weight 300 instead of 40 (150 if worn)
  - For comparision, mithril coats weight 200 (100 if worn)
* Cloak of magic resistance is now MC2. Cloak of displacement is MC3
  - Magic resistance is generally more useful, CoD was hardly ever used
  • Loading branch information
FredrIQ committed May 7, 2017
1 parent ce09d93 commit 274ae50
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 54 deletions.
2 changes: 2 additions & 0 deletions libnethack/src/do_wear.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ setequip(enum objslot slot, struct obj *otmp, enum equipmsg msgtype)
/* Change the item in the slot. */
if (equipping) {
setworn(o, W_MASK(slot));
o->owt = weight(o);
/* There is a redundant update_property when taken off.
The reason this is performed at this point is to give
the identified description if update_property identifies
Expand All @@ -221,6 +222,7 @@ setequip(enum objslot slot, struct obj *otmp, enum equipmsg msgtype)
}
} else {
setworn(NULL, W_MASK(slot));
o->owt = weight(o);
/* It's not obvious whether we should uninvoke or not here. We need to
uninvoke if the item is being destroyed or dropped, but not
otherwise. However, of the items with togglable invokes, the Sceptre
Expand Down
2 changes: 2 additions & 0 deletions libnethack/src/mkobj.c
Original file line number Diff line number Diff line change
Expand Up @@ -1101,6 +1101,8 @@ weight(struct obj *obj)
return (int)(obj->owt); /* kludge for "very" heavy iron ball */
else if (obj->otyp == CANDELABRUM_OF_INVOCATION)
return (wt + obj->spe * objects[TALLOW_CANDLE].oc_weight);
else if (obj->oclass == ARMOR_CLASS && (obj->owornmask & W_WORN))
return (wt + 1) / 2;
return wt ? wt * (int)obj->quan : ((int)obj->quan + 1) >> 1;
}

Expand Down
108 changes: 54 additions & 54 deletions libnethack/src/objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,29 +304,29 @@ const struct objclass const_objects[] = {

/* helmets */
HELM("elven leather helm", "leather hat",
0, 0, 0, 6, 1, 3, 8, 9, 0, LEATHER, HI_LEATHER),
0, 0, 0, 6, 1, 6, 8, 9, 0, LEATHER, HI_LEATHER),
HELM("orcish helm", "iron skull cap",
0, 0, 0, 6, 1, 30, 10, 9, 0, IRON, CLR_BLACK),
0, 0, 0, 6, 1, 50, 10, 9, 0, IRON, CLR_BLACK),
HELM("dwarvish iron helm", "hard hat",
0, 0, 0, 6, 1, 40, 20, 8, 0, IRON, HI_METAL),
0, 0, 0, 6, 1, 70, 20, 8, 0, IRON, HI_METAL),
HELM("fedora", NULL,
1, 0, 0, 0, 0, 3, 1, 10, 0, CLOTH, CLR_BROWN),
1, 0, 0, 0, 0, 10, 1, 10, 0, CLOTH, CLR_BROWN),
HELM("cornuthaum", "conical hat",
0, 1, CLAIRVOYANT,
3, 1, 4, 80, 10, 2, CLOTH, CLR_BLUE),
3, 1, 10, 80, 10, 2, CLOTH, CLR_BLUE),
HELM("dunce cap", "conical hat",
0, 1, 0, 3, 1, 4, 1, 10, 0, CLOTH, CLR_BLUE),
0, 1, 0, 3, 1, 10, 1, 10, 0, CLOTH, CLR_BLUE),
HELM("dented pot", NULL,
1, 0, 0, 2, 0, 10, 8, 9, 0, IRON, CLR_BLACK),
1, 0, 0, 2, 0, 20, 8, 9, 0, IRON, CLR_BLACK),
/* With shuffled appearances... */
HELM("helmet", "plumed helmet",
0, 0, 0, 10, 1, 30, 10, 9, 0, IRON, HI_METAL),
0, 0, 0, 10, 1, 60, 10, 9, 0, IRON, HI_METAL),
HELM("helm of brilliance", "etched helmet",
0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, CLR_GREEN),
0, 1, 0, 6, 1, 90, 50, 9, 0, IRON, CLR_GREEN),
HELM("helm of opposite alignment", "crested helmet",
0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, HI_METAL),
0, 1, 0, 6, 1, 90, 50, 9, 0, IRON, HI_METAL),
HELM("helm of telepathy", "visored helmet",
0, 1, TELEPAT, 2, 1, 50, 50, 9, 0, IRON, HI_METAL),
0, 1, TELEPAT, 2, 1, 90, 50, 9, 0, IRON, HI_METAL),

/* suits of armor */
/*
Expand All @@ -338,7 +338,7 @@ const struct objclass const_objects[] = {
* the same defined in monst.c.
*/
#define DRGN_ARMR(name,mgc,power,cost,ac,color) \
ARMOR(name,NULL,1,mgc,1,power,0,5,40,cost,ac,0,ARM_SUIT,DRAGON_HIDE, \
ARMOR(name,NULL,1,mgc,1,power,0,5,300,cost,ac,0,ARM_SUIT,DRAGON_HIDE, \
color)
/* 3.4.1: dragon scale mail reclassified as "magic" since magic is
needed to create them */
Expand Down Expand Up @@ -370,35 +370,35 @@ const struct objclass const_objects[] = {
#undef DRGN_ARMR

ARMOR("plate mail", NULL,
1, 0, 1, 0, 44, 5, 450, 600, 3, 2, ARM_SUIT, IRON, HI_METAL),
1, 0, 1, 0, 44, 5, 350, 600, 3, 2, ARM_SUIT, IRON, HI_METAL),
ARMOR("crystal plate mail", NULL,
1, 0, 1, 0, 10, 5, 450, 820, 3, 2, ARM_SUIT, GLASS, CLR_WHITE),
1, 0, 1, 0, 10, 5, 500, 820, 0, 2, ARM_SUIT, GLASS, CLR_WHITE),
ARMOR("bronze plate mail", NULL,
1, 0, 1, 0, 25, 5, 450, 400, 4, 0, ARM_SUIT, COPPER, HI_COPPER),
1, 0, 1, 0, 25, 5, 350, 400, 4, 0, ARM_SUIT, COPPER, HI_COPPER),
ARMOR("splint mail", NULL,
1, 0, 1, 0, 62, 5, 400, 80, 4, 1, ARM_SUIT, IRON, HI_METAL),
1, 0, 1, 0, 62, 5, 300, 80, 4, 1, ARM_SUIT, IRON, HI_METAL),
ARMOR("banded mail", NULL,
1, 0, 1, 0, 72, 5, 350, 90, 4, 0, ARM_SUIT, IRON, HI_METAL),
1, 0, 1, 0, 72, 5, 250, 90, 4, 0, ARM_SUIT, IRON, HI_METAL),
ARMOR("dwarvish mithril-coat", NULL,
1, 0, 0, 0, 10, 1, 150, 240, 4, 3, ARM_SUIT, MITHRIL, HI_METAL),
1, 0, 0, 0, 10, 1, 200, 240, 4, 3, ARM_SUIT, MITHRIL, HI_METAL),
ARMOR("elven mithril-coat", NULL,
1, 0, 0, 0, 15, 1, 150, 240, 5, 3, ARM_SUIT, MITHRIL, HI_METAL),
1, 0, 0, 0, 15, 1, 200, 240, 5, 3, ARM_SUIT, MITHRIL, HI_METAL),
ARMOR("chain mail", NULL,
1, 0, 0, 0, 72, 5, 300, 75, 5, 1, ARM_SUIT, IRON, HI_METAL),
ARMOR("orcish chain mail", "crude chain mail",
0, 0, 0, 0, 20, 5, 300, 75, 6, 1, ARM_SUIT, IRON, CLR_BLACK),
ARMOR("scale mail", NULL,
1, 0, 0, 0, 72, 5, 250, 45, 6, 0, ARM_SUIT, IRON, HI_METAL),
ARMOR("studded leather armor", NULL,
1, 0, 0, 0, 72, 3, 200, 15, 7, 1, ARM_SUIT, LEATHER, HI_LEATHER),
1, 0, 0, 0, 72, 3, 250, 15, 7, 1, ARM_SUIT, LEATHER, HI_LEATHER),
ARMOR("ring mail", NULL,
1, 0, 0, 0, 72, 5, 250, 100, 7, 0, ARM_SUIT, IRON, HI_METAL),
ARMOR("orcish ring mail", "crude ring mail",
0, 0, 0, 0, 20, 5, 250, 80, 8, 1, ARM_SUIT, IRON, CLR_BLACK),
ARMOR("leather armor", NULL,
1, 0, 0, 0, 82, 3, 150, 5, 8, 0, ARM_SUIT, LEATHER, HI_LEATHER),
1, 0, 0, 0, 82, 3, 200, 5, 8, 0, ARM_SUIT, LEATHER, HI_LEATHER),
ARMOR("leather jacket", NULL,
1, 0, 0, 0, 12, 0, 30, 10, 9, 0, ARM_SUIT, LEATHER, CLR_BLACK),
1, 0, 0, 0, 12, 0, 60, 10, 9, 0, ARM_SUIT, LEATHER, CLR_BLACK),

/* shirts */
ARMOR("Hawaiian shirt", NULL,
Expand All @@ -409,82 +409,82 @@ const struct objclass const_objects[] = {
/* cloaks */
/* 'cope' is not a spelling mistake... leave it be */
CLOAK("mummy wrapping", NULL,
1, 0, 0, 0, 0, 3, 2, 10, 1, CLOTH, CLR_GRAY),
1, 0, 0, 0, 0, 10, 2, 10, 1, CLOTH, CLR_GRAY),
CLOAK("elven cloak", "faded pall",
0, 1, STEALTH, 8, 0, 10, 60, 9, 3, CLOTH, CLR_BLACK),
0, 1, STEALTH, 15, 0, 10, 60, 9, 3, CLOTH, CLR_BLACK),
CLOAK("orcish cloak", "coarse mantelet",
0, 0, 0, 8, 0, 10, 40, 10, 2, CLOTH, CLR_BLACK),
0, 0, 0, 8, 0, 15, 40, 10, 2, CLOTH, CLR_BLACK),
CLOAK("dwarvish cloak", "hooded cloak",
0, 0, 0, 8, 0, 10, 50, 10, 2, CLOTH, HI_CLOTH),
0, 0, 0, 8, 0, 15, 50, 10, 2, CLOTH, HI_CLOTH),
CLOAK("oilskin cloak", "slippery cloak",
0, 0, 0, 8, 0, 10, 50, 9, 3, CLOTH, HI_CLOTH),
0, 0, 0, 8, 0, 15, 50, 9, 3, CLOTH, HI_CLOTH),
CLOAK("robe", NULL,
1, 1, 0, 3, 0, 15, 50, 8, 3, CLOTH, CLR_RED),
CLOAK("alchemy smock", "apron",
0, 1, POISON_RES, 9, 0, 10, 50, 9, 1, CLOTH, CLR_WHITE),
0, 1, POISON_RES, 9, 0, 15, 50, 9, 1, CLOTH, CLR_WHITE),
CLOAK("leather cloak", NULL,
1, 0, 0, 8, 0, 15, 40, 9, 1, LEATHER, CLR_BROWN),
1, 0, 0, 8, 0, 25, 40, 9, 1, LEATHER, CLR_BROWN),
/* With shuffled appearances... */
CLOAK("cloak of protection", "tattered cape",
0, 1, PROTECTION, 9, 0, 10, 50, 7, 3, CLOTH, HI_CLOTH),
0, 1, PROTECTION, 9, 0, 15, 50, 7, 3, CLOTH, HI_CLOTH),
CLOAK("cloak of invisibility", "opera cloak",
0, 1, INVIS, 10, 0, 10, 60, 9, 2, CLOTH, CLR_BRIGHT_MAGENTA),
0, 1, INVIS, 10, 0, 15, 60, 9, 2, CLOTH, CLR_BRIGHT_MAGENTA),
CLOAK("cloak of magic resistance", "ornamental cope",
0, 1, ANTIMAGIC, 2, 0, 10, 60, 9, 3, CLOTH, CLR_WHITE),
0, 1, ANTIMAGIC, 2, 0, 15, 60, 9, 2, CLOTH, CLR_WHITE),
CLOAK("cloak of displacement", "piece of cloth",
0, 1, DISPLACED, 10, 0, 10, 50, 9, 2, CLOTH, HI_CLOTH),
0, 1, DISPLACED, 10, 0, 15, 50, 9, 3, CLOTH, HI_CLOTH),

/* shields */
SHIELD("small shield", NULL,
1, 0, 0, 0, 6, 0, 30, 3, 9, 0, WOOD, HI_WOOD),
1, 0, 0, 0, 6, 0, 50, 3, 9, 0, WOOD, HI_WOOD),
SHIELD("elven shield", "blue and green shield",
0, 0, 0, 0, 2, 0, 40, 7, 8, 0, WOOD, CLR_GREEN),
0, 0, 0, 0, 2, 0, 70, 7, 8, 0, WOOD, CLR_GREEN),
SHIELD("Uruk-hai shield", "white-handed shield",
0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, HI_METAL),
0, 0, 0, 0, 2, 0, 90, 7, 9, 0, IRON, HI_METAL),
SHIELD("orcish shield", "red-eyed shield",
0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, CLR_RED),
0, 0, 0, 0, 2, 0, 90, 7, 9, 0, IRON, CLR_RED),
SHIELD("large shield", NULL,
1, 0, 1, 0, 7, 0, 100, 10, 8, 0, IRON, HI_METAL),
1, 0, 1, 0, 7, 0, 180, 10, 8, 0, IRON, HI_METAL),
SHIELD("dwarvish roundshield", "large round shield",
0, 0, 0, 0, 4, 0, 100, 10, 8, 0, IRON, HI_METAL),
0, 0, 0, 0, 4, 0, 180, 10, 7, 0, IRON, HI_METAL),
SHIELD("shield of reflection", "polished silver shield",
0, 1, 0, REFLECTING, 3, 0, 50, 50, 8, 0, SILVER, HI_SILVER),
0, 1, 0, REFLECTING, 3, 0, 200, 50, 8, 0, SILVER, HI_SILVER),

/* gloves */
/* these have their color but not material shuffled, so the IRON must stay
* CLR_BROWN (== HI_LEATHER)
*/
GLOVES("leather gloves", "old gloves",
0, 0, 0, 16, 1, 10, 8, 9, 0, LEATHER, HI_LEATHER),
0, 0, 0, 16, 1, 15, 8, 9, 0, LEATHER, HI_LEATHER),
GLOVES("gauntlets of fumbling", "padded gloves",
0, 1, FUMBLING, 8, 1, 10, 50, 9, 0, LEATHER, HI_LEATHER),
0, 1, FUMBLING, 8, 1, 15, 50, 9, 0, LEATHER, HI_LEATHER),
GLOVES("gauntlets of power", "riding gloves",
0, 1, 0, 8, 1, 10, 50, 9, 0, IRON, CLR_BROWN),
0, 1, 0, 8, 1, 15, 50, 9, 0, IRON, CLR_BROWN),
GLOVES("gauntlets of dexterity", "fencing gloves",
0, 1, 0, 8, 1, 10, 50, 9, 0, LEATHER, HI_LEATHER),
0, 1, 0, 8, 1, 15, 50, 9, 0, LEATHER, HI_LEATHER),

/* boots */
BOOTS("low boots", "walking shoes",
0, 0, 0, 25, 2, 10, 8, 9, 0, LEATHER, HI_LEATHER),
0, 0, 0, 25, 2, 15, 8, 9, 0, LEATHER, HI_LEATHER),
BOOTS("iron shoes", "hard shoes",
0, 0, 0, 7, 2, 50, 16, 8, 0, IRON, HI_METAL),
0, 0, 0, 7, 2, 80, 16, 8, 0, IRON, HI_METAL),
BOOTS("high boots", "jackboots",
0, 0, 0, 15, 2, 20, 12, 8, 0, LEATHER, HI_LEATHER),
0, 0, 0, 15, 2, 30, 12, 8, 0, LEATHER, HI_LEATHER),
/* With shuffled appearances... */
BOOTS("speed boots", "combat boots",
0, 1, FAST, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER),
0, 1, FAST, 12, 2, 40, 50, 9, 0, LEATHER, HI_LEATHER),
BOOTS("water walking boots", "jungle boots",
0, 1, WWALKING, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER),
0, 1, WWALKING, 12, 2, 40, 50, 9, 0, LEATHER, HI_LEATHER),
BOOTS("jumping boots", "hiking boots",
0, 1, JUMPING, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER),
0, 1, JUMPING, 12, 2, 40, 50, 9, 0, LEATHER, HI_LEATHER),
BOOTS("elven boots", "mud boots",
0, 1, STEALTH, 12, 2, 15, 8, 9, 0, LEATHER, HI_LEATHER),
0, 1, STEALTH, 12, 2, 30, 8, 9, 0, LEATHER, HI_LEATHER),
BOOTS("kicking boots", "buckled boots",
0, 1, 0, 12, 2, 15, 8, 9, 0, IRON, CLR_BROWN),
0, 1, 0, 12, 2, 30, 8, 9, 0, IRON, CLR_BROWN),
BOOTS("fumble boots", "riding boots",
0, 1, FUMBLING, 12, 2, 20, 30, 9, 0, LEATHER, HI_LEATHER),
0, 1, FUMBLING, 12, 2, 40, 30, 9, 0, LEATHER, HI_LEATHER),
BOOTS("levitation boots", "snow boots",
0, 1, LEVITATION, 12, 2, 15, 30, 9, 0, LEATHER, HI_LEATHER),
0, 1, LEVITATION, 12, 2, 30, 30, 9, 0, LEATHER, HI_LEATHER),
#undef HELM
#undef CLOAK
#undef SHIELD
Expand Down
5 changes: 5 additions & 0 deletions libnethack/src/worn.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ setnotworn(struct obj *obj)
uninvoke_artifact(obj);
obj->owornmask = 0L;

obj->owt = weight(obj);
turnstate.vision_full_recalc = TRUE;
see_monsters(FALSE);
update_inventory();
Expand Down Expand Up @@ -397,12 +398,14 @@ m_dowear_type(struct monst *mon, enum objslot slot, boolean creation,
best->mbknown = 1;

if (old) {
old->owt = weight(old);
if (update_property(mon, objects[old->otyp].oc_oprop, slot))
makeknown(old->otyp);
update_property_for_oprops(mon, old, slot);
}
mon->misc_worn_check |= W_MASK(slot);
best->owornmask |= W_MASK(slot);
best->owt = weight(best);
if (update_property(mon, objects[best->otyp].oc_oprop, slot))
makeknown(best->otyp);
update_property_for_oprops(mon, best, slot);
Expand Down Expand Up @@ -502,6 +505,7 @@ do_equip(struct monst *mon, struct obj *obj,
mon->misc_worn_check |= obj->owornmask;
}

obj->owt = weight(obj);
if (!redundant) {
if (update_property(mon, prop, slot))
makeknown(obj->otyp);
Expand Down Expand Up @@ -573,6 +577,7 @@ m_lose_armor(struct monst *mon, struct obj *obj)
update_property_for_oprops(mon, obj, which_slot(obj));
}
obj->owornmask = 0L;
obj->owt = weight(obj);

obj_extract_self(obj);
place_object(obj, lev, mon->mx, mon->my);
Expand Down

0 comments on commit 274ae50

Please sign in to comment.