There are really 3 ways to make monsters - this is the least efficient, and
most popular (due to ease of use) method.

inherit "obj/monster";   /* inherit the monster driver */
reset(arg) {
  if(arg) return ;       /* just like the room example */
  ::reset(arg);          /* this is new - the '::' is the scope resolution */
                         /* operator - the usage calls reset() in monster.c */
  set_name("monster");   /* what the monster is called */
  set_alias("a monster"); /* what else he can be called */
  set_short("A monster"); /* what the player sees */
  set_long("A big, fat ugly, monster. Boy is he big, fat, and ugly.\n"
          +"Notice that we can wrap his description.\n");
  /* the following tell us how strong the monster is */
  /* make sure your monsters follow the monster guidelines */
  set_level(20);
  set_hp(500);
  set_wc(30);
  set_ac(17);
  set_ep(1000000);
  set_al(-800);    /* this makes the monster bad */
  load_chat("The monster breaths.\n");   /* a message we say periodically */
  load_chat("The monster sleeps.\n");  /* another message */
  set_chat_chance(20);  /* give us 20% chance of talking */
  load_a_chat("The monster growls.\n");  /* attack chat */
  load_a_chat("The monster grumbles.\n"); /* another attack chat */
  set_a_chat_chance(20); /* 20% chance of attack chatting */
  move_object(clone_object("/players/joebob/itemthing"), this_object());
}
/* notice we don't need id(str) because set_name and set_alias handle it */
