export const NPC_RELATIONS = {
  ally: {
    label: 'Allié',
    summary: 'Prêt à prendre des risques pour aider les Voyageurs.',
  },
  contact: {
    label: 'Contact',
    summary: 'Aide limitée, souvent utile pour des informations ou des introductions.',
  },
  rival: {
    label: 'Rival',
    summary: 'Adversaire récurrent, préfère gêner ou humilier les Voyageurs.',
  },
  enemy: {
    label: 'Ennemi',
    summary: 'Opposant durable prêt à aller plus loin que le Rival.',
  },
};

export const EXPERIENCE_PROFILES = [
  {
    key: 'noncombatant-blue',
    category: 'Non-combattant',
    tier: 'Bleu',
    label: 'Non-combattant bleu',
    skillLevel: 0,
    characteristicBonuses: [],
    skills: ['pilot'],
  },
  {
    key: 'combatant-blue',
    category: 'Combattant',
    tier: 'Bleu',
    label: 'Combattant bleu',
    skillLevel: 0,
    characteristicBonuses: [],
    skills: ['pilot', 'guncombat', 'melee'],
  },
  {
    key: 'noncombatant-average',
    category: 'Non-combattant',
    tier: 'Moyen',
    label: 'Non-combattant moyen',
    skillLevel: 1,
    characteristicBonuses: ['+1'],
    skills: ['pilot', 'profession'],
  },
  {
    key: 'combatant-average',
    category: 'Combattant',
    tier: 'Moyen',
    label: 'Combattant moyen',
    skillLevel: 1,
    characteristicBonuses: ['+1'],
    skills: ['pilot', 'guncombat', 'melee', 'recon'],
  },
  {
    key: 'noncombatant-experienced',
    category: 'Non-combattant',
    tier: 'Expérimenté',
    label: 'Non-combattant expérimenté',
    skillLevel: 2,
    characteristicBonuses: ['+1', '+2'],
    skills: ['admin', 'pilot', 'profession'],
  },
  {
    key: 'combatant-experienced',
    category: 'Combattant',
    tier: 'Expérimenté',
    label: 'Combattant expérimenté',
    skillLevel: 2,
    characteristicBonuses: ['+1', '+2'],
    skills: ['pilot', 'guncombat', 'heavyweapons', 'melee', 'recon'],
  },
  {
    key: 'noncombatant-elite',
    category: 'Non-combattant',
    tier: 'Élite',
    label: 'Non-combattant élite',
    skillLevel: 3,
    characteristicBonuses: ['+1', '+2', '+3'],
    skills: ['admin', 'pilot', 'investigate', 'profession'],
  },
  {
    key: 'combatant-elite',
    category: 'Combattant',
    tier: 'Élite',
    label: 'Combattant élite',
    skillLevel: 3,
    characteristicBonuses: ['+1', '+2', '+3'],
    skills: ['pilot', 'guncombat', 'heavyweapons', 'melee', 'recon', 'tactics'],
  },
];

export const ALLIES_ENEMIES_TABLE = [
  { d66: 11, text: 'Officier de marine' },
  { d66: 12, text: 'Diplomate impérial' },
  { d66: 13, text: 'Marchand véreux' },
  { d66: 14, text: 'Médecin' },
  { d66: 15, text: 'Scientifique excentrique' },
  { d66: 16, text: 'Mercenaire' },
  { d66: 21, text: 'Interprète célèbre' },
  { d66: 22, text: 'Xéno' },
  { d66: 23, text: 'Franc-Marchand' },
  { d66: 24, text: 'Explorateur' },
  { d66: 25, text: 'Capitaine de vaisseau' },
  { d66: 26, text: 'Cadre de corpo' },
  { d66: 31, text: 'Chercheur' },
  { d66: 32, text: 'Attaché culturel' },
  { d66: 33, text: 'Chef religieux' },
  { d66: 34, text: 'Conspirateur' },
  { d66: 35, text: 'Noble riche' },
  { d66: 36, text: 'Intelligence artificielle' },
  { d66: 41, text: 'Noble oisif' },
  { d66: 42, text: 'Gouverneur planétaire' },
  { d66: 43, text: 'Joueur invétéré' },
  { d66: 44, text: 'Journaliste en croisade' },
  { d66: 45, text: "Cultiste de l'apocalypse" },
  { d66: 46, text: 'Agent corpo' },
  { d66: 51, text: 'Criminel mafieux' },
  { d66: 52, text: 'Gouverneur militaire' },
  { d66: 53, text: "Quartier-maître de l'armée" },
  { d66: 54, text: 'Enquêteur privé' },
  { d66: 55, text: 'Amiral à la retraite' },
  { d66: 56, text: 'Ambassadeur xéno' },
  { d66: 61, text: 'Contrebandier' },
  { d66: 62, text: "Administrateur de l'astroport" },
  { d66: 63, text: "Inspecteur d'armement" },
  { d66: 64, text: "Homme d'État âgé" },
  { d66: 65, text: 'Seigneur de guerre planétaire' },
  { d66: 66, text: 'Agent impérial' },
];

export const CHARACTER_QUIRKS_TABLE = [
  { d66: 11, text: 'Loyal' },
  { d66: 12, text: 'Distrait par des soucis' },
  { d66: 13, text: 'Dettes envers des criminels' },
  { d66: 14, text: 'Fait de très mauvaises blagues' },
  { d66: 15, text: 'Trahira les personnages' },
  { d66: 16, text: 'Agressif' },
  { d66: 21, text: 'A des alliés secrets' },
  { d66: 22, text: "Utilisateur secret d'anagathiques" },
  { d66: 23, text: 'À la recherche de quelque chose' },
  { d66: 24, text: 'Serviable' },
  { d66: 25, text: 'Subit des pertes de mémoire' },
  { d66: 26, text: 'Veut engager les Voyageurs' },
  { d66: 31, text: 'A des contacts utiles' },
  { d66: 32, text: 'Artistique' },
  { d66: 33, text: 'Facile à tromper' },
  { d66: 34, text: 'Possède une laideur inhabituelle' },
  { d66: 35, text: 'Inquiet de la situation présente' },
  { d66: 36, text: 'Montre des images de ses enfants' },
  { d66: 41, text: 'Répand des rumeurs' },
  { d66: 42, text: 'Très provincial' },
  { d66: 43, text: 'Ivrogne ou toxicomane' },
  { d66: 44, text: 'Informateur du gouvernement' },
  { d66: 45, text: 'Prend un Voyageur pour un autre' },
  { d66: 46, text: 'Possède une technologie exceptionnellement avancée' },
  { d66: 51, text: 'Possède une beauté exceptionnelle' },
  { d66: 52, text: 'Espionne les Voyageurs' },
  { d66: 53, text: 'Membre de la SAV' },
  { d66: 54, text: 'Secrètement hostile aux Voyageurs' },
  { d66: 55, text: "Veut emprunter de l'argent" },
  { d66: 56, text: 'Est convaincu que les Voyageurs sont dangereux' },
  { d66: 61, text: 'Impliqué dans des intrigues politiques' },
  { d66: 62, text: 'A un dangereux secret' },
  { d66: 63, text: 'Veut quitter la planète dans les meilleurs délais' },
  { d66: 64, text: 'Attiré par un des Voyageurs' },
  { d66: 65, text: "Hors-monde (originaire d'un autre monde)" },
  { d66: 66, text: 'Doué de télépathie ou autre particularité exceptionnelle' },
];

export const RANDOM_CLIENT_TABLE = [
  { d66: 11, text: 'Assassin' },
  { d66: 12, text: 'Contrebandier' },
  { d66: 13, text: 'Terroriste' },
  { d66: 14, text: 'Escroc' },
  { d66: 15, text: 'Voleur' },
  { d66: 16, text: 'Révolutionnaire' },
  { d66: 21, text: 'Notaire' },
  { d66: 22, text: 'Administrateur' },
  { d66: 23, text: 'Maire' },
  { d66: 24, text: 'Noble mineur' },
  { d66: 25, text: 'Médecin' },
  { d66: 26, text: 'Chef de tribu' },
  { d66: 31, text: 'Diplomate' },
  { d66: 32, text: 'Courrier' },
  { d66: 33, text: 'Espion' },
  { d66: 34, text: 'Ambassadeur' },
  { d66: 35, text: 'Noble' },
  { d66: 36, text: 'Officier de police' },
  { d66: 41, text: 'Marchand' },
  { d66: 42, text: 'Franc-Marchand' },
  { d66: 43, text: 'Courtier' },
  { d66: 44, text: 'Cadre de corpo' },
  { d66: 45, text: 'Agent de corpo' },
  { d66: 46, text: 'Financier' },
  { d66: 51, text: 'Ceinturien' },
  { d66: 52, text: 'Chercheur' },
  { d66: 53, text: 'Officier de Marine' },
  { d66: 54, text: 'Pilote' },
  { d66: 55, text: "Administrateur d'astroport" },
  { d66: 56, text: 'Éclaireur' },
  { d66: 61, text: 'Xéno' },
  { d66: 62, text: 'Playboy' },
  { d66: 63, text: 'Passager clandestin' },
  { d66: 64, text: 'Membre de la famille' },
  { d66: 65, text: "Agent d'une puissance étrangère" },
  { d66: 66, text: 'Agent impérial' },
];

export const RANDOM_MISSION_TABLE = [
  { d66: 11, text: 'Assassiner une cible' },
  { d66: 12, text: 'Piéger une cible' },
  { d66: 13, text: 'Détruire une cible' },
  { d66: 14, text: 'Voler une cible' },
  { d66: 15, text: 'Aide pour un cambriolage' },
  { d66: 16, text: 'Arrêter un cambriolage' },
  { d66: 21, text: 'Récupérer des données ou un objet dans un lieu sécurisé' },
  { d66: 22, text: 'Discréditer une cible' },
  { d66: 23, text: 'Retrouver une cargaison disparue' },
  { d66: 24, text: 'Retrouver une personne perdue' },
  { d66: 25, text: 'Tromper une cible' },
  { d66: 26, text: 'Saboter une cible' },
  { d66: 31, text: 'Convoyer des marchandises' },
  { d66: 32, text: 'Convoyer une personne' },
  { d66: 33, text: 'Convoyer des données' },
  { d66: 34, text: 'Transporter secrètement des marchandises' },
  { d66: 35, text: 'Transporter rapidement des marchandises' },
  { d66: 36, text: 'Transporter des marchandises dangereuses' },
  { d66: 41, text: 'Enquêter sur un délit' },
  { d66: 42, text: 'Enquêter sur un vol' },
  { d66: 43, text: 'Enquêter sur un meurtre' },
  { d66: 44, text: 'Enquêter sur un mystère' },
  { d66: 45, text: 'Enquêter sur une cible' },
  { d66: 46, text: 'Enquêter sur un événement' },
  { d66: 51, text: 'Participer à une expédition' },
  { d66: 52, text: 'Enquête sur une planète' },
  { d66: 53, text: 'Explorer un nouveau système' },
  { d66: 54, text: 'Explorer une ruine' },
  { d66: 55, text: 'Récupérer un vaisseau' },
  { d66: 56, text: 'Capturer une créature' },
  { d66: 61, text: 'Détourner un vaisseau' },
  { d66: 62, text: 'Divertir un noble' },
  { d66: 63, text: 'Protéger une cible' },
  { d66: 64, text: 'Sauver une cible' },
  { d66: 65, text: 'Aider une cible' },
  { d66: 66, text: "Il s'agit d'un piège – le Client a l'intention de trahir le Voyageur" },
];

export const RANDOM_TARGET_TABLE = [
  { d66: 11, text: 'Marchandises communes' },
  { d66: 12, text: 'Marchandises communes' },
  { d66: 13, text: 'Marchandises (table page 240)', special: 'trade-goods' },
  { d66: 14, text: 'Marchandises (table page 240)', special: 'trade-goods' },
  { d66: 15, text: 'Marchandises illicites', special: 'illegal-goods' },
  { d66: 16, text: 'Marchandises illicites', special: 'illegal-goods' },
  { d66: 21, text: 'Données informatiques' },
  { d66: 22, text: 'Artefact xéno' },
  { d66: 23, text: 'Effets personnels' },
  { d66: 24, text: "Œuvre d'art" },
  { d66: 25, text: 'Artefact historique' },
  { d66: 26, text: 'Arme' },
  { d66: 31, text: 'Astroport' },
  { d66: 32, text: 'Base astéroïde' },
  { d66: 33, text: 'Ville' },
  { d66: 34, text: 'Station de recherche' },
  { d66: 35, text: 'Bar ou boîte de nuit' },
  { d66: 36, text: 'Installation médicale' },
  { d66: 41, text: 'Client aléatoire', special: 'client' },
  { d66: 42, text: 'Client aléatoire', special: 'client' },
  { d66: 43, text: 'Client aléatoire', special: 'client' },
  { d66: 44, text: 'Allié ou ennemi', special: 'ally-enemy' },
  { d66: 45, text: 'Allié ou ennemi', special: 'ally-enemy' },
  { d66: 46, text: 'Allié ou ennemi', special: 'ally-enemy' },
  { d66: 51, text: 'Gouvernement local' },
  { d66: 52, text: 'Gouvernement planétaire' },
  { d66: 53, text: 'Corpo' },
  { d66: 54, text: 'Service de renseignement impérial' },
  { d66: 55, text: 'Criminel mafieux' },
  { d66: 56, text: 'Gang criminel' },
  { d66: 61, text: 'Franc-Marchand' },
  { d66: 62, text: 'Yacht' },
  { d66: 63, text: 'Transporteur de cargaison' },
  { d66: 64, text: 'Cotre de police' },
  { d66: 65, text: 'Station spatiale' },
  { d66: 66, text: 'Vaisseau de guerre' },
];

export const RANDOM_OPPOSITION_TABLE = [
  { d66: 11, text: 'Animaux' },
  { d66: 12, text: 'Gros animaux' },
  { d66: 13, text: 'Bandits et voleurs' },
  { d66: 14, text: 'Paysans craintifs' },
  { d66: 15, text: 'Autorités locales' },
  { d66: 16, text: 'Seigneur local' },
  { d66: 21, text: 'Criminels – voyous ou corsaires' },
  { d66: 22, text: 'Criminels – voleurs ou saboteurs' },
  { d66: 23, text: 'Police – forces de sécurité ordinaires' },
  { d66: 24, text: 'Police – inspecteurs et détectives' },
  { d66: 25, text: 'Corpo – agents' },
  { d66: 26, text: 'Corpo – juridique' },
  { d66: 31, text: "Sécurité de l'astroport" },
  { d66: 32, text: 'Marines impériaux' },
  { d66: 33, text: 'Corpo interstellaire' },
  { d66: 34, text: 'Xéno – citoyen privé ou corpo' },
  { d66: 35, text: 'Xéno – gouvernement' },
  { d66: 36, text: 'Voyageurs spatiaux ou vaisseau rival' },
  { d66: 41, text: "La cible est dans l'espace profond" },
  { d66: 42, text: 'La cible est en orbite' },
  { d66: 43, text: 'Conditions météorologiques défavorables' },
  { d66: 44, text: 'Organismes dangereux ou radiations' },
  { d66: 45, text: 'La cible se trouve dans une région dangereuse' },
  { d66: 46, text: 'La cible se trouve dans une zone restreinte' },
  { d66: 51, text: 'La cible est sous observation électronique' },
  { d66: 52, text: 'Robots ou navires de garde hostiles' },
  { d66: 53, text: 'Identification biométrique requise' },
  { d66: 54, text: 'Défaillance mécanique ou piratage informatique' },
  { d66: 55, text: 'Les Voyageurs sont sous surveillance' },
  { d66: 56, text: 'Manque de carburant ou de munitions' },
  { d66: 61, text: 'Enquête de police' },
  { d66: 62, text: 'Obstacles juridiques' },
  { d66: 63, text: 'Noblesse' },
  { d66: 64, text: 'Fonctionnaires du gouvernement' },
  { d66: 65, text: 'La cible est protégée par un tiers' },
  { d66: 66, text: 'Otages' },
];

export const STARPORT_ENCOUNTERS_TABLE = [
  { d66: 11, text: "Robot d'entretien au travail" },
  { d66: 12, text: "Arrivée ou départ d'un vaisseau marchand" },
  { d66: 13, text: "Le capitaine s'insurge contre les prix du carburant" },
  { d66: 14, text: "Une nouvelle sur l'activité de pirates s’affiche sur un écran de l’astroport et attire la foule" },
  { d66: 15, text: "Un employé qui s'ennuie rend la vie difficile aux Voyageurs" },
  { d66: 16, text: 'Un marchand local avec une cargaison à transporter cherche un vaisseau' },
  { d66: 21, text: "Un dissident tente de demander l'asile aux autorités planétaires" },
  { d66: 22, text: 'Des marchands Hors-monde discutent avec des négociants locaux' },
  { d66: 23, text: "Un technicien réparant le système informatique d'astroport" },
  { d66: 24, text: 'Un journaliste demande des nouvelles du Hors-monde' },
  { d66: 25, text: 'Spectacle culturel insolite' },
  { d66: 26, text: 'Un Client se dispute avec un autre groupe de Voyageurs' },
  { d66: 31, text: "Arrivée ou départ d'un vaisseau militaire" },
  { d66: 32, text: "Manifestation à l'extérieur de l'astroport" },
  { d66: 33, text: 'Des prisonniers évadés implorent un passage vers le Hors-monde' },
  { d66: 34, text: "Bazar improvisé d'objets bizarres" },
  { d66: 35, text: 'Patrouille de sécurité' },
  { d66: 36, text: 'Xéno inhabituel' },
  { d66: 41, text: 'Des marchands proposent des pièces détachées et des fournitures à prix réduits.' },
  { d66: 42, text: 'Un chantier de réparation prend feu' },
  { d66: 43, text: "Arrivée ou départ d'un vaisseau spatial de type paquebot" },
  { d66: 44, text: "Un robot serviteur propose de guider les Voyageurs dans l'astroport." },
  { d66: 45, text: "Des marchands d'un système lointain vendant d'étranges curiosités" },
  { d66: 46, text: "Un vieux Ceinturien infirme fait la manche en se plaignant que des drones ont pris son travail." },
  { d66: 51, text: 'Le Client offre un emploi aux Voyageurs', followUp: 'client-mission' },
  { d66: 52, text: "Passager à la recherche d'un vaisseau" },
  { d66: 53, text: 'Des pèlerins religieux tentent de convertir les Voyageurs' },
  { d66: 54, text: "Arrivée ou départ d'un transporteur de marchandises" },
  { d66: 55, text: "Arrivée ou départ d’un vaisseau Éclaireur" },
  { d66: 56, text: 'Des marchandises illégales ou dangereuses sont saisies' },
  { d66: 61, text: 'Un pickpocket tente de voler les Voyageurs' },
  { d66: 62, text: "Une bande d'ivrognes cherche la bagarre" },
  { d66: 63, text: 'Des fonctionnaires enquêtent sur les Voyageurs' },
  { d66: 64, text: 'Inspection de sécurité aléatoire des Voyageurs et de leurs bagages' },
  { d66: 65, text: "L'astroport est temporairement fermé pour des raisons de sécurité" },
  { d66: 66, text: "Accostage d'urgence d'un vaisseau endommagé" },
];

export const RURAL_ENCOUNTERS_TABLE = [
  { d66: 11, text: 'Animal sauvage' },
  { d66: 12, text: 'Robots agricoles' },
  { d66: 13, text: 'Un drone pulvérisateur survole la région' },
  { d66: 14, text: "Réparation d'un robot agricole endommagé" },
  { d66: 15, text: 'Petite communauté isolée' },
  { d66: 16, text: 'Groupe de chasseurs nobles' },
  { d66: 21, text: 'Animal sauvage' },
  { d66: 22, text: "Terrain d'atterrissage local" },
  { d66: 23, text: 'Enfant perdu' },
  { d66: 24, text: 'Caravane marchande itinérante' },
  { d66: 25, text: 'Convoi de marchandises' },
  { d66: 26, text: 'Poursuite policière' },
  { d66: 31, text: 'Animal sauvage' },
  { d66: 32, text: 'Zone blanche de télécommunications' },
  { d66: 33, text: 'Patrouille de sécurité' },
  { d66: 34, text: 'Installation militaire' },
  { d66: 35, text: 'Bar ou relais' },
  { d66: 36, text: 'Vaisseau spatial échoué' },
  { d66: 41, text: 'Animal sauvage' },
  { d66: 42, text: 'Petite communauté – lieu de vie tranquille' },
  { d66: 43, text: 'Petite communauté – sur une route commerciale' },
  { d66: 44, text: 'Petite communauté – festival en cours' },
  { d66: 45, text: 'Petite communauté en danger' },
  { d66: 46, text: "Une petite communauté qui n'est pas ce qu'elle semble être" },
  { d66: 51, text: 'Animal sauvage' },
  { d66: 52, text: 'Conditions météorologiques inhabituelles' },
  { d66: 53, text: 'Terrain difficile' },
  { d66: 54, text: 'Créature inhabituelle' },
  { d66: 55, text: 'Ferme isolée – accueillante' },
  { d66: 56, text: 'Ferme isolée – hostile' },
  { d66: 61, text: 'Animal sauvage' },
  { d66: 62, text: 'Villa privée' },
  { d66: 63, text: 'Monastère ou refuge' },
  { d66: 64, text: 'Ferme expérimentale' },
  { d66: 65, text: 'Structure en ruine' },
  { d66: 66, text: 'Centre de recherche' },
];

export const URBAN_ENCOUNTERS_TABLE = [
  { d66: 11, text: 'Émeute de rue en cours' },
  { d66: 12, text: 'Les Voyageurs passent devant un charmant restaurant' },
  { d66: 13, text: 'Marchand de produits illégaux' },
  { d66: 14, text: 'Dispute en public' },
  { d66: 15, text: 'Changement soudain de temps' },
  { d66: 16, text: "L’aide des Voyageurs est sollicitée" },
  { d66: 21, text: 'Les Voyageurs passent devant un bar ou un pub' },
  { d66: 22, text: 'Les Voyageurs passent devant un théâtre ou un autre lieu de divertissement' },
  { d66: 23, text: 'Boutique de curiosités' },
  { d66: 24, text: 'Un marchand sur un étal de marché en plein air tente de vendre quelque chose aux Voyageurs' },
  { d66: 25, text: "Incendie, rupture de dôme ou autre situation d'urgence en cours" },
  { d66: 26, text: 'Tentative de vol sur les Voyageurs' },
  { d66: 31, text: 'Accident de véhicule impliquant les Voyageurs' },
  { d66: 32, text: 'Un vaisseau spatial survole les Voyageurs à basse altitude' },
  { d66: 33, text: 'Xéno-espèce ou autre Hors-monde' },
  { d66: 34, text: 'Un personnage aléatoire bouscule un Voyageur', followUp: 'npc-contact' },
  { d66: 35, text: 'Pickpocket' },
  { d66: 36, text: 'Équipe média ou journaliste' },
  { d66: 41, text: 'Patrouille de sécurité' },
  { d66: 42, text: 'Bâtiment ancien ou archives' },
  { d66: 43, text: 'Festival' },
  { d66: 44, text: "Quelqu'un suit les personnages" },
  { d66: 45, text: 'Groupe ou événement culturel inhabituel' },
  { d66: 46, text: 'Fonctionnaire planétaire' },
  { d66: 51, text: "Les Voyageurs repèrent quelqu'un qu'ils reconnaissent" },
  { d66: 52, text: 'Manifestation publique' },
  { d66: 53, text: 'Les Voyageurs croisent un robot ou autre serviteur' },
  { d66: 54, text: 'Client potentiel', followUp: 'client-mission' },
  { d66: 55, text: "Crime tel qu'un vol ou une attaque en cours" },
  { d66: 56, text: "Un prêcheur de rue s'en prend aux Voyageurs" },
  { d66: 61, text: "Diffusion d'informations sur les écrans publics" },
  { d66: 62, text: 'Couvre-feu soudain ou autre restriction de mouvement' },
  { d66: 63, text: 'Rue inhabituellement vide ou calme' },
  { d66: 64, text: 'Annonce publique' },
  { d66: 65, text: 'Événement sportif' },
  { d66: 66, text: 'Dignitaire impérial' },
];

export const ENCOUNTER_CONTEXTS = {
  starport: {
    label: 'Astroport',
    tableKey: 'starport-encounters',
    entries: STARPORT_ENCOUNTERS_TABLE,
  },
  rural: {
    label: 'Rural',
    tableKey: 'rural-encounters',
    entries: RURAL_ENCOUNTERS_TABLE,
  },
  urban: {
    label: 'Urbain',
    tableKey: 'urban-encounters',
    entries: URBAN_ENCOUNTERS_TABLE,
  },
};

export const NPC_ROLLTABLE_DEFINITIONS = [
  { key: 'allies-enemies', name: 'PNJ — Alliés et ennemis', formula: '1d36', entries: ALLIES_ENEMIES_TABLE },
  { key: 'character-quirks', name: 'PNJ — Particularités', formula: '1d36', entries: CHARACTER_QUIRKS_TABLE },
  { key: 'experience-profiles', name: 'PNJ — Expérience', formula: '1d8', entries: EXPERIENCE_PROFILES.map((entry, index) => ({ roll: index + 1, text: entry.label })) },
  { key: 'random-clients', name: 'PNJ — Clients aléatoires', formula: '1d36', entries: RANDOM_CLIENT_TABLE },
  { key: 'random-missions', name: 'PNJ — Missions aléatoires', formula: '1d36', entries: RANDOM_MISSION_TABLE },
  { key: 'random-targets', name: 'PNJ — Cibles aléatoires', formula: '1d36', entries: RANDOM_TARGET_TABLE },
  { key: 'random-opposition', name: 'PNJ — Oppositions aléatoires', formula: '1d36', entries: RANDOM_OPPOSITION_TABLE },
  { key: 'starport-encounters', name: 'PNJ — Rencontres astroport', formula: '1d36', entries: STARPORT_ENCOUNTERS_TABLE },
  { key: 'rural-encounters', name: 'PNJ — Rencontres rurales', formula: '1d36', entries: RURAL_ENCOUNTERS_TABLE },
  { key: 'urban-encounters', name: 'PNJ — Rencontres urbaines', formula: '1d36', entries: URBAN_ENCOUNTERS_TABLE },
];
