1
0
Fork 0
mirror of https://codeberg.org/noisytoot/notnotdnethack.git synced 2024-09-19 14:05:02 +01:00
notnotdnethack/include/mextra.h
chris a26a0d6f8c Monster smiths, pt 1
Smiths make items for the player if provided with raw materials. #chat with a smith to access their services. While a very early smith could possibly be used to fill out the PCs own armor or weapons, the main use-case is probably to help equip pets in a mythical beastmaster run. However, magic smiths can duplicate GoP and the like in metals other than iron, useful for iron-haters.

(Part 2 will have to wait untill after I yoink forges from EvilHack <.<)

Add an esmt struct to track the various resource types, the knowledge of the smith, and (eventually) their home forge if applicable.
-Whether or not a monster is_smith_mon is determined only by having one of these structs.
-Structs are added when monsters are created on the basis of is_smit_mtyp
-Provides fields for more material types than are currently used. For example, "gold" is provided but no smith does goldsmithing.

Generic smith monsters:
-goblin smiths
--can make goblin armor and weapons out of iron
-dwarf smiths
--can make dwarf armor and weapons out of iron
--can duplicate some magic items using silver
-treesingers
--unimplemented in this version, won't need raw materials
-mithril smiths
--can make elf mithril gear out of mithril, can duplicate some magic items
--a chunk of unrefined mithril from the moria dwarf quest can be turned in for 1000 mithril (3x the required starting amount)
--can make upgrade kits
-shadowsmiths
--can make drow armor out of mithril, can duplicate some magic items and insight weapons
--a chunk of fossil dark can be turned in for 1000 shadowsteel, 3x the required starting amount.
--can make upgrade kits
-human smiths
--can make generic (human) armor and weapons out of iron.
--1/3rd of armor and weapon shop shopkeepers will be human smiths
---The smith menu is accessable after the "services" menu
---Armor, weapons, and tools count as "known" for ID purposes
---Shop credit can be used to pay for commissions

Dracae "smiths"
-Can grow a variety of organic items for the PC
--Includes living armor
--Can duplicate cans of grease and unicorn horns.
-Only do "smith" work if tame
-Need to be fed food rather than material, it needs ~8 food rations to be ready to make the first item.
-Can grow loyal pets for the PC, there is a game limit of how many derived from Cha (tracked by u.dracae_pets).

Oona smithing services
-Will only perform smith services if tame.
-Makes a wide variety of weapons, eilistran armor, and harmonium armor
-Can duplicate a variety of magic armor
-Can make upgrade kits
-Planned to be able to create minions, but this is unimplemented.
-Items can be attuned to one of her elements. Offensive items (weapons, gloves, boots) get the offensive trait, armors get defensive axiomatic and elemental resistance.
--Plausibly quite useful for Monks, if they forgo artifacts in those slots.

Placement
-Oona is currently the only guaranteed smith monster in the game
-In games where dracae are the eladrin precursors, Oona's two dracae are also "smiths"
-Smiths are included in most throne-room prisoner and healer-quest plague lists.

Make some formerly-shopkeeper-specific functions safe to call with non-shopkeeper smiths

The smith struct will not be included if a monster is cloned, and is not included on summoned or non-intelligent (presumably zombie-templated) monsters.

Split metalic_material(mat) away from is_metallic(otmp) so that it can be used in the smith code if desired.

Increase the Grue platinum bar sizes to LARGE platinum bars (which contain enough platinum for an item from Oona).

Harmonium armor can come in various metals (ex: oona's platinum)
2023-07-18 18:30:50 -04:00

37 lines
746 B
C

/* SCCS Id: @(#)mextra.h 3.4 1992/11/14 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#ifndef MEXTRA_H
#define MEXTRA_H
#include "exstruct.h"
#define MX_EDOG 0
#define MX_EHOR 1
#define MX_EMIN 2
#define MX_ENAM 3
#define MX_EPRI 4
#define MX_ESHK 5
#define MX_ESUM 6
#define MX_EVGD 7
#define MX_ESMT 8
#define NUM_MX 9
/* container for all mextra */
union mextra {
void * eindex[NUM_MX];
struct {
struct edog * edog_p;
struct ehor * ehor_p;
struct emin * emin_p;
struct enam * enam_p;
struct epri * epri_p;
struct eshk * eshk_p;
struct esum * esum_p;
struct evgd * evgd_p;
struct esmt * esmt_p;
};
};
#endif /* MEXTRA_H */