/** * MGT2 Commerce – Trade Tables * Source : Mongoose Traveller 2e, pages 235–241 (traduction française) * * Clés des codes commerciaux (abréviation standard MGT2) : * Ag Agricole As Astéroïdes Ba Stérile * De Désert Fl Océans fluides Ga Jardin * Hi Pop. élevée Ht Haute tech IC Calotte glaciaire * In Industriel Lo Pop. basse Lt Basse tech * Na Non-Agricole Ni Non-Industriel Po Pauvre * Ri Riche Wa Monde aquatique Va Vide * * Les zones sont notées : 'ZA' (Zone Ambre) et 'ZR' (Zone Rouge). */ /** Tarifs de passage et de fret, par distance en parsecs. */ export const PASSAGE_COSTS = [ { parsecs: 1, sup: 9000, inter: 6500, eco: 2000, inf: 700, freight: 1000 }, { parsecs: 2, sup: 14000, inter: 10000, eco: 3000, inf: 1300, freight: 1600 }, { parsecs: 3, sup: 21000, inter: 14000, eco: 5000, inf: 2200, freight: 2600 }, { parsecs: 4, sup: 34000, inter: 23000, eco: 8000, inf: 3900, freight: 4400 }, { parsecs: 5, sup: 60000, inter: 40000, eco: 14000, inf: 7200, freight: 8500 }, { parsecs: 6, sup: 210000, inter: 130000, eco: 55000, inf: 27000, freight: 32000 }, ]; /** * Table Trafic de passagers. * Clé = résultat 2D + modificateurs. * Valeur = formule de dés pour le nombre de passagers (string Roll-compatible). */ export const PASSENGER_TRAFFIC = { 1: '0', 2: '1d6', 3: '1d6', 4: '2d6', 5: '2d6', 6: '2d6', 7: '3d6', 8: '3d6', 9: '3d6', 10: '3d6', 11: '4d6', 12: '4d6', 13: '4d6', 14: '5d6', 15: '5d6', 16: '6d6', 17: '7d6', 18: '8d6', 19: '9d6', 20: '10d6', }; /** * Table Trafic de cargaison. * Clé = résultat 2D + modificateurs. * Valeur = formule de dés pour le nombre de lots. */ export const CARGO_TRAFFIC = { 1: '0', 2: '1d6', 3: '1d6', 4: '2d6', 5: '2d6', 6: '3d6', 7: '3d6', 8: '3d6', 9: '4d6', 10: '4d6', 11: '4d6', 12: '5d6', 13: '5d6', 14: '5d6', 15: '6d6', 16: '6d6', 17: '7d6', 18: '8d6', 19: '9d6', 20: '10d6', }; /** * Table Prix modifiés. * Clé = résultat du jet (3D + modificateurs). * Valeur = { buy: % du prix de base, sell: % du prix de base }. */ export const MODIFIED_PRICES = { '-3': { buy: 300, sell: 10 }, '-2': { buy: 250, sell: 20 }, '-1': { buy: 200, sell: 30 }, '0': { buy: 175, sell: 40 }, '1': { buy: 150, sell: 45 }, '2': { buy: 135, sell: 50 }, '3': { buy: 125, sell: 55 }, '4': { buy: 120, sell: 60 }, '5': { buy: 115, sell: 65 }, '6': { buy: 110, sell: 70 }, '7': { buy: 105, sell: 75 }, '8': { buy: 100, sell: 80 }, '9': { buy: 95, sell: 85 }, '10': { buy: 90, sell: 90 }, '11': { buy: 85, sell: 100 }, '12': { buy: 80, sell: 105 }, '13': { buy: 75, sell: 110 }, '14': { buy: 70, sell: 115 }, '15': { buy: 65, sell: 120 }, '16': { buy: 60, sell: 125 }, '17': { buy: 55, sell: 130 }, '18': { buy: 50, sell: 140 }, '19': { buy: 45, sell: 150 }, '20': { buy: 40, sell: 160 }, '21': { buy: 35, sell: 175 }, '22': { buy: 30, sell: 200 }, '23': { buy: 25, sell: 250 }, '24': { buy: 20, sell: 300 }, '25': { buy: 15, sell: 400 }, }; /** Retourne les pourcentages d'achat/vente pour un résultat de jet donné. */ export function getModifiedPrice(result) { const clamped = Math.max(-3, Math.min(25, result)); return MODIFIED_PRICES[String(clamped)]; } /** * Table des Marchandises (D66). * D66 11–36 : extraites des pages 235–241 du livre de règles. * D66 41–66 : à compléter dès réception des pages manquantes. * * Structure de chaque entrée : * d66 {number} Résultat D66 (11, 12, ..., 66) * name {string} Nom de la marchandise * availability {string[]} Codes commerciaux requis, ou ['all'] si disponible partout * tonsDice {string} Formule Roll pour les tonnes disponibles * basePrice {number} Prix de base en Crédits par tonne * illegal {boolean} Vrai si illégale universellement * buyMod {Object} Code commercial → modificateur d'achat * sellMod {Object} Code commercial → modificateur de vente */ export const GOODS_TABLE = [ // ── D66 11–16 : Marchandises communes ──────────────────────────────────────── { d66: 11, name: 'Électroniques communes', availability: ['all'], tonsDice: '2d6*10', basePrice: 20000, illegal: false, buyMod: { In: 2, Ht: 3, Ri: 1 }, sellMod: { Ni: 2, Lt: 1, Po: 1 }, examples: 'Électronique simple, y compris les ordinateurs basiques jusqu\'au NT10', }, { d66: 12, name: 'Produits industriels communs', availability: ['all'], tonsDice: '2d6*10', basePrice: 10000, illegal: false, buyMod: { Na: 2, In: 5 }, sellMod: { Ni: 3, Ag: 2 }, examples: 'Composants de machines et pièces détachées pour machines courantes', }, { d66: 13, name: 'Biens manufacturés communs', availability: ['all'], tonsDice: '2d6*10', basePrice: 20000, illegal: false, buyMod: { Na: 2, In: 5 }, sellMod: { Ni: 3, Hi: 2 }, examples: 'Appareils ménagers, vêtements, et autres produits manufacturés', }, { d66: 14, name: 'Matières premières communes', availability: ['all'], tonsDice: '2d6*20', basePrice: 5000, illegal: false, buyMod: { Ag: 3, Ga: 2 }, sellMod: { In: 2, Po: 2 }, examples: 'Métaux, plastiques, produits chimiques et autres matériaux de base', }, { d66: 15, name: 'Consommables communs', availability: ['all'], tonsDice: '2d6*20', basePrice: 500, illegal: false, buyMod: { Ag: 3, Wa: 2, Ga: 1, As: -4 }, sellMod: { As: 1, Fl: 1, IC: 1, Hi: 1 }, examples: 'Nourriture, boissons et autres produits agricoles', }, { d66: 16, name: 'Minéraux communs', availability: ['all'], tonsDice: '2d6*20', basePrice: 1000, illegal: false, buyMod: { As: 4 }, sellMod: { In: 3, Ni: 1 }, examples: 'Métaux communs porteurs de minerai', }, // ── D66 21–26 : Marchandises commerciales avancées ─────────────────────────── { d66: 21, name: 'Électronique Avancée', availability: ['In', 'Ht'], tonsDice: '1d6*5', basePrice: 100000, illegal: false, buyMod: { In: 2, Ht: 3 }, sellMod: { Ni: 1, Ri: 2, As: 3 }, examples: 'Capteurs avancés, ordinateurs et autres produits électroniques jusqu\'au NT15', }, { d66: 22, name: 'Pièces de Machines Avancées', availability: ['In', 'Ht'], tonsDice: '1d6*5', basePrice: 75000, illegal: false, buyMod: { In: 2, Ht: 1 }, sellMod: { As: 2, Ni: 1 }, examples: 'Composants de machines et pièces détachées, y compris les composants gravitiques', }, { d66: 23, name: 'Biens Manufacturés Avancés', availability: ['In', 'Ht'], tonsDice: '1d6*5', basePrice: 100000, illegal: false, buyMod: { In: 1 }, sellMod: { Hi: 1, Ri: 2 }, examples: 'Appareils et vêtements intégrant des technologies avancées', }, { d66: 24, name: 'Armes Avancées', availability: ['In', 'Ht'], tonsDice: '1d6*5', basePrice: 150000, illegal: false, buyMod: { Ht: 2 }, sellMod: { Po: 1, ZA: 2, ZR: 4 }, examples: 'Armes à feu, explosifs, munitions, artillerie et autres armements militaires de pointe', }, { d66: 25, name: 'Véhicules Avancés', availability: ['In', 'Ht'], tonsDice: '1d6*5', basePrice: 180000, illegal: false, buyMod: { Ht: 2 }, sellMod: { As: 2, Ri: 2 }, examples: 'Véhicules spatiaux, tank grav, aéro/barges et autres véhicules jusqu\'au NT15', }, { d66: 26, name: 'Biochimiques', availability: ['Ag', 'Wa'], tonsDice: '1d6*5', basePrice: 50000, illegal: false, buyMod: { Ag: 1, Wa: 2 }, sellMod: { In: 2 }, examples: 'Cultures bio-organiques, produits chimiques bio-carburants', }, // ── D66 31–36 : Marchandises spéciales ────────────────────────────────────── { d66: 31, name: 'Cristaux & Gemmes', availability: ['As', 'De', 'IC'], tonsDice: '1d6*5', basePrice: 20000, illegal: false, buyMod: { As: 2, De: 1, IC: 1 }, sellMod: { In: 3, Ri: 2 }, examples: 'Diamants, gemmes synthétiques ou naturelles', }, { d66: 32, name: 'Cybernétiques', availability: ['Ht'], tonsDice: '1d6', basePrice: 250000, illegal: false, buyMod: { Ht: 1 }, sellMod: { As: 1, IC: 1, Ri: 2 }, examples: 'Composants cybernétiques, prothèses', }, { d66: 33, name: 'Animaux Vivants', availability: ['Ag', 'Ga'], tonsDice: '1d6*10', basePrice: 10000, illegal: false, buyMod: { Ag: 2 }, sellMod: { Lo: 3 }, examples: 'Animaux de trait, de ferme, ou animaux exotiques', }, { d66: 34, name: 'Consommables de Luxe', availability: ['Ag', 'Ga', 'Wa'], tonsDice: '1d6*10', basePrice: 20000, illegal: false, buyMod: { Ag: 2, Wa: 1 }, sellMod: { Ri: 2, Hi: 2 }, examples: 'Nourriture rare, liqueurs fines', }, { d66: 35, name: 'Biens de luxes', availability: ['Hi'], tonsDice: '1d6', basePrice: 200000, illegal: false, buyMod: { Hi: 1 }, sellMod: { Ri: 4 }, examples: 'Biens manufacturés rares ou de très haute qualité', }, { d66: 36, name: 'Fournitures Médicales', availability: ['Ht', 'Hi'], tonsDice: '1d6*5', basePrice: 50000, illegal: false, buyMod: { Ht: 2 }, sellMod: { In: 2, Po: 1, Ri: 1 }, examples: 'Équipements de diagnostic, médicaments de base, technologies de clonage', }, // ── D66 41–46 : Marchandises spécialisées ──────────────────────────────────── { d66: 41, name: 'Pétrochimiques', availability: ['De', 'Fl', 'IC', 'Wa'], tonsDice: '1d6*10', basePrice: 10000, illegal: false, buyMod: { De: 2 }, sellMod: { In: 2, Ag: 1, Lt: 2 }, examples: 'Essences, carburants liquides', }, { d66: 42, name: 'Produits Pharmaceutiques', availability: ['As', 'De', 'Hi', 'Wa'], tonsDice: '1d6', basePrice: 100000, illegal: false, buyMod: { As: 2, Hi: 1 }, sellMod: { Ri: 2, Lt: 1 }, examples: 'Médicaments, fournitures médicales, anagathiques, médistases ou tachymèdes', }, { d66: 43, name: 'Polymères', availability: ['In'], tonsDice: '1d6*10', basePrice: 7000, illegal: false, buyMod: { In: 1 }, sellMod: { Ri: 2, Ni: 1 }, examples: 'Plastiques et autres matériaux synthétiques', }, { d66: 44, name: 'Métaux Précieux', availability: ['As', 'De', 'IC', 'Fl'], tonsDice: '1d6', basePrice: 50000, illegal: false, buyMod: { As: 3, De: 1, IC: 2 }, sellMod: { Ri: 3, In: 2, Ht: 1 }, examples: 'Or, argent, platine, éléments rares', }, { d66: 45, name: 'Matériaux radioactifs', availability: ['As', 'De', 'Lo'], tonsDice: '1d6', basePrice: 1000000, illegal: false, buyMod: { As: 2, Lo: 2 }, sellMod: { In: 3, Ht: 1, Ni: -2, Ag: -3 }, examples: 'Uranium, plutonium, unobtanium, éléments rares', }, { d66: 46, name: 'Robots', availability: ['In'], tonsDice: '1d6*5', basePrice: 400000, illegal: false, buyMod: { In: 1 }, sellMod: { Ag: 2, Ht: 1 }, examples: 'Robots industriels et personnels, drones', }, // ── D66 51–56 : Marchandises naturelles et véhicules ───────────────────────── { d66: 51, name: 'Épices', availability: ['Ga', 'De', 'Wa'], tonsDice: '1d6*10', basePrice: 6000, illegal: false, buyMod: { De: 2 }, sellMod: { Hi: 2, Ri: 3, Po: 3 }, examples: 'Conservateurs, additifs alimentaires de luxe, drogues naturelles', }, { d66: 52, name: 'Textiles', availability: ['Ag', 'Ni'], tonsDice: '1d6*20', basePrice: 3000, illegal: false, buyMod: { Ag: 7 }, sellMod: { Hi: 3, Na: 2 }, examples: 'Vêtements et tissus', }, { d66: 53, name: 'Minéraux Rares', availability: ['As', 'IC'], tonsDice: '1d6*20', basePrice: 5000, illegal: false, buyMod: { As: 4 }, sellMod: { In: 3, Ni: 1 }, examples: 'Minerai contenant des métaux précieux ou de valeur', }, { d66: 54, name: 'Matières Premières Rares', availability: ['Ag', 'De', 'Wa'], tonsDice: '1d6*10', basePrice: 20000, illegal: false, buyMod: { Ag: 2, Wa: 1 }, sellMod: { In: 2, Ht: 1 }, examples: 'Métaux précieux comme le titane, éléments rares', }, { d66: 55, name: 'Bois', availability: ['Ag', 'Ga'], tonsDice: '1d6*20', basePrice: 1000, illegal: false, buyMod: { Ag: 6 }, sellMod: { Ri: 2, In: 1 }, examples: 'Bois rares ou précieux et extraits végétaux', }, { d66: 56, name: 'Véhicules', availability: ['In', 'Ht'], tonsDice: '1d6*10', basePrice: 15000, illegal: false, buyMod: { In: 2, Ht: 1 }, sellMod: { Ni: 2, Hi: 1 }, examples: 'Véhicules à roues, chenilles ou gravitationnels jusqu\'au NT10', }, // ── D66 61–66 : Marchandises illégales ─────────────────────────────────────── { d66: 61, name: 'Biochimiques (Illégal)', availability: ['Ag', 'Wa'], tonsDice: '1d6*5', basePrice: 50000, illegal: true, buyMod: { Wa: 2 }, sellMod: { In: 6 }, examples: 'Produits chimiques dangereux, extraits d\'espèces menacées', }, { d66: 62, name: 'Cybernétiques (Illégal)', availability: ['Ht'], tonsDice: '1d6', basePrice: 250000, illegal: true, buyMod: { Ht: 1 }, sellMod: { As: 4, IC: 4, Ri: 8, ZA: 6, ZR: 6 }, examples: 'Cybernétique de combat, améliorations illégales', }, { d66: 63, name: 'Drogues (Illégal)', availability: ['As', 'De', 'Hi', 'Wa'], tonsDice: '1d6', basePrice: 100000, illegal: true, buyMod: { As: 1, De: 1, Ga: 1, Wa: 1 }, sellMod: { Ri: 6, Hi: 6 }, examples: 'Drogues addictives, drogues de combat', }, { d66: 64, name: 'Biens de luxe (Illégal)', availability: ['Ag', 'Ga', 'Wa'], tonsDice: '1d6', basePrice: 50000, illegal: true, buyMod: { Ag: 2, Wa: 1 }, sellMod: { Ri: 6, Hi: 4 }, examples: 'Produits de luxes décadents ou addictifs', }, { d66: 65, name: 'Armes (Illégal)', availability: ['In', 'Ht'], tonsDice: '1d6*5', basePrice: 150000, illegal: true, buyMod: { Ht: 2 }, sellMod: { Po: 6, ZA: 8, ZR: 10 }, examples: 'Armes de destruction massive, armements navals', }, { d66: 66, name: 'Exotiques', availability: ['all'], tonsDice: '1d6', basePrice: 0, // prix libre, à déterminer par l'Arbitre illegal: false, buyMod: {}, sellMod: {}, examples: 'Reliques xénos, prototypes technologiques, plantes ou animaux uniques, trésors inestimables. Prix et disponibilité à la discrétion de l\'Arbitre.', }, ]; /** Codes commerciaux reconnus par les tables de marchandises. */ export const TRADE_CODES = ['Ag','As','Ba','De','Fl','Ga','Hi','Ht','IC','In','Lo','Lt','Na','Ni','Po','Ri','Wa','Va']; /** Catégories de passage (labels français). */ export const PASSAGE_CATEGORIES = { sup: 'Supérieur', inter: 'Intermédiaire', eco: 'Éco', inf: 'Inférieur', }; /** Tailles de lots de cargaison et leurs formules. */ export const CARGO_LOT_SIZES = { major: { label: 'Lot majeur', formula: '1d6*10' }, minor: { label: 'Lot mineur', formula: '1d6*5' }, access: { label: 'Lot accessoire', formula: '1d6' }, };