Files

562 lines
16 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* MGT2 Commerce Trade Tables
* Source : Mongoose Traveller 2e, pages 235241 (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 1136 : extraites des pages 235241 du livre de règles.
* D66 4166 : à 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 1116 : 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 2126 : 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 3136 : 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 4146 : 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 5156 : 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 6166 : 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' },
};