INHERITANCE An object can inherit all variables and functions from another object. This is done with the declaration 'inherit "file";'. This must come before any local variables or functions. An example, defining a monster: inherit "obj/monster"; reset(arg) { ::reset(arg); if (arg) return; set_name("troll"); set_level(9); set_hp(100); set_wc(12); set_al(-60); set_short("a troll"); set_long("It is a nasty troll that looks very aggressive.\n"); set_aggressive(1); } Here you see something like a "family tree" of the most important inheritance in Nemesis: obj/wizard | obj/player obj/monster | | +---------+----------+ | obj/living obj/living is inherited by obj/monster and obj/player as the base of livings. The code there are the basics of "life". Monsters, based on obj/monster, need different code as players or wizards. So they have there own code: obj/monster. Players are clones of obj/players. Wizards, that are clones of obj/wizard need a bit more code than players, so obj/wizard inherits obj/player. INHERITING FROM MULTIPLE FILES Consider the following code inherit "path/to/a"; inherit "path/to/b"; func() { return ::func(); } If both inherited files define func() this ::func will call func in the first inherited file that defines the function (in this example "path/to/a"). If you want to call the function in a specific parent you can set its filename before the ::, in this example: func() { return b::func(); } WARNING: Due to restrictions of the parser this syntax does not work with filenames containing a hyphen ("-")! See also: efun/inherit_list