/** Creates the specific fields for this kind of entity. */
  protected void createSpecificFields() {

    // has a sprite?
    withSpriteField = new JCheckBox("Display a sprite");
    addField("Visibility", withSpriteField);

    // sprite name
    spriteField = new ResourceChooser(ResourceType.SPRITE, true);
    addField("Sprite name", spriteField);

    // behavior
    behaviorField = new RadioField("Show a message", "Call the map script", "Call an item script");
    addField("Action", behaviorField);

    // message
    messageField = new JTextField(15);
    addField("Message to show", messageField);

    // item
    itemField = new ItemChooser(false, false);
    addField("Item script to call", itemField);

    // listeners
    withSpriteField.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent ev) {
            spriteField.setEnabled(withSpriteField.isSelected());
          }
        });

    behaviorField.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent ev) {
            messageField.setEnabled(behaviorField.getSelectedIndex() == 0);
            itemField.setEnabled(behaviorField.getSelectedIndex() == 2);
          }
        });

    subtypeField.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent ev) {

            Subtype subtype = (Subtype) subtypeField.getValue();
            withSpriteField.setEnabled(subtype != Subtype.NON_PLAYING_CHARACTER);
          }
        });
  }