MUD News Stories and their Bots

The individual items of history found in http://lions.cs.ndsu.nodak.edu/~blackwood/history/history.htm are each converted to a "news story" with a specific format. They are saved in the .stories property of a "ticker" devoted to a relatively small content area, such as "Disaster stories of 1880" or more recently "Stories about Thomas Edison".

The specific format of the news stories is described in detail below. The ticker objects are stored in the Blackwood Newspaper Office, which is located adjacent to the Town Square.

Instructions for Building Content Groups

Necessary Objects: $g.gen_atmosphere_agent (#1443), $g.gen_ticker (#9018), and $g.QuizMachine (#8356)

Problem Description: to create a content oriented pair of software agents: 1. an Atmosphere Agent with a Zelecon conversation tree, for players to learn content in a subject area (Teddy Roosevelt, Railroads, etc) and 2. a Quizmachine Agent with a specialized ticker in a list in .news_source with questions about the subject area in the .stories property, taken from the conversation tree.

Method: either use historical information to create 'news stories' in a specially created ticker (see Populating the MUD with News, below) or use historical information to create conversational dialog with Zelecon, and convert that into 'news stories'.

Follow these instructions (using the Belle Starr example as a guide)

  1. create an $g.gen_atmosphere_agent #1443:
    i.e. @create #1443 named Belle Starr => #11310 (Belle Starr)
  2. give it a $g name:
    i.e $g:add_dollarg_prop("Belle_Starr", #11310) => $g.Belle_Starr with value: #11310
  3. use the Zelecon Conversation Constructor to populate the .resp_list property on the agent (see below, Steps in Using Zelecon)
  4. create a related $g.gen_ticker #9018;
    i.e. @create #9018 named ticker-belle-starr => #11324
  5. give it a $g name:
    i.e. ;$g:add_dollarg_prop("ticker_belle_starr", #11324) => $g.ticker_belle_starr with value: #11324
  6. create .stories for your ticker; .eg (at least 8 per ticker), in the following format
    {1880, 0, 0, "Belle Starr born in Missouri", "Belle Starr was born as Myra Maybelle Shirley on her father's farm near Carthage, MO on February 5, 1848", "Birth", "Other", "", "Myra Maybelle Shirley", "Carthage, MO"}}
    {1886, 12, 17, "Sam Starr killed", "In 1886 on December 17, Sam Starr was involved in a gunfight with Officer Frank West at Canadian River, OK. Both men were killed.", "Death", "Other", "", "Sam Starr", "Canadian River, OK"}}
  7. There should be short headlines in [4] and detailed stories in [5] with exact string matches in [5] that are recorded in [9] and [10]
  8. place your ticker in the Morgue, in the room #10778 (People), Railroad/Riverboat/Teamsters too
  9. create a $g.quizmachine,
    eg. @create #8356 named QUIZ_Belle_Starr => #11325 (QUIZ_Belle_Starr)
  10. describe the $g.quizmachine;
    eg. @describe #11325 as "You see a Belle Starr quizmachine"
  11. assign the .news_source property on your $g.quizmachine to a list containing your ticker; .
    eg ;#11325.news_source = {#11324}
  12. find a matching graphic for your machines, either a 180 pixel tall transparent .gif of a human, or a realistically scaled object like a locomotive or a riverboat
  13. drop your $g.quizmachine and $g.gen_atmosphere_agent on a street or in a store, together, that does not already have a quizmachine and record where in your report

Populating the MUD with News

The process is as follows:
  1. Create a new ticker to store "news stories" in the .stories property
    @create #9018 named ticker-firstname-lastname
    eg. @create #9018 named ticker-belle-starr

  2. For each news story, add a new list to the list-of-lists in the .stories property of your news object as follows:

    Each row in the .stories table of the news objects will have the following 10 fields:

    1. Year: integer (range 1880 to 1886)
    2. Month: integer (range 1 to 12, 0 if no month)
    3. Day: integer (range 1 to 31, 0 if no day)
    4. Headline: string (string, short, 3 to 7 words)
    5. Story: string (string, at least one full sentence, including one or both of the Person or Place, below
    6. Primary Key (string, from the Ontology, below)
    7. Secondary Key (string, from the Ontology, below)
    8. Tertiary Key (string, from the Ontology, below)
    9. Person (string, the name of the main person in the news story)
    10. Place (string, the name of the main location in the news story)

Which means your 'news object' will have a .stories property that looks like this:

{{year, month, day, headline, story, primary, secondary, tertiary, person, place}, {.....}, {.....}, ...}

Example:

{{1882, 4, 3, "Outlaw Jesse James killed", "Outlaw Jesse James was shot in the back and killed in St. Joseph, MO., by Robert Ford, a member of his own gang for a $5,000 reward. Jesse and Frank James, the bank robbing James brothers, were born as Woodson and Alexander.", "Law", "Crime", "Outlaw", "Jesse James", "St. Joseph, MO"}, {.....}, {.....}, ...}

Every news story must have keywords from the schema defined in
http://cs.ndsu.edu/~slator/html/blackwood/blackwood-news-ontology-1.html

Steps in Using Zelecon

  1. Session -> Connect
    type username/password
  2. Window -> Telnet
  3. Conversation -> Download
    type object number; eg. #13341
  4. Window -> Visualize
    double click a node to edit it
  5. Conversation -> Test
  6. Conversation -> Upload
    type object number

How it works

  1. Zelecon stores conversation data in a FUNCTION named SET_RESP_LIST defined on the atmosphere agent
    the FUNCTION is simply an assignment statement to a PROPERTY named RESP_LIST also defined on the atmosphere agent


modified: 2011-01-15; 23Feb14; 5Apr17; contact: slator@cs.ndsu.edu