t2-model-skinner/scripts/buildConfig.mjs
Brian Beck 169aed6274
Bump dependencies (#11)
* Bump dependencies
2025-10-19 09:15:21 -07:00

744 lines
18 KiB
JavaScript

import fs from "node:fs";
import { globby } from "globby";
import orderBy from "lodash.orderby";
const models = [
"lmale",
"mmale",
"hmale",
"lfemale",
"mfemale",
"hfemale",
"lbioderm",
"mbioderm",
"hbioderm",
];
async function getSkinConfig() {
const defaultSkins = await Promise.all(
models.map((name) => globby(`./public/textures/*.${name}.png`))
);
return {
defaultSkins: models.reduce((skins, name, i) => {
skins[name] = orderBy(
defaultSkins[i].map((name) =>
name.replace(/(^.*\/|\.[lmh](male|female|bioderm)\.png$)/g, "")
),
[(name) => name.toLowerCase()],
["asc"]
);
return skins;
}, {}),
modelDefaults: {
// Players
lmale: "Blood Eagle",
mmale: "Blood Eagle",
hmale: "Blood Eagle",
lfemale: "Blood Eagle",
mfemale: "Blood Eagle",
hfemale: "Blood Eagle",
lbioderm: "Storm",
mbioderm: "Storm",
hbioderm: "Storm",
// Weapons
chaingun: "weapon_chaingun",
disc: "weapon_disc",
elf: "weapon_elf",
energy: "weapon_energy",
grenade_launcher: "weapon_grenade_launcher",
mine: "mine",
missile: "weapon_missile",
mortar: "weapon_mortar",
plasmathrower: "weapon_plasmathrower",
repair: "weapon_repair",
shocklance: "weapon_shocklance",
sniper: "weapon_sniper",
targeting: "weapon_targeting",
// Vehicles
vehicle_land_mpbbase: "vehicle_land_mpbbase",
vehicle_grav_scout: "vehicle_grav_scout",
vehicle_grav_tank: "vehicle_grav_tank",
turret_assaulttank_mortar: "turret_assaulttank_mortar",
vehicle_air_scout: "vehicle_air_scout",
vehicle_air_bomber: "vehicle_air_bomber",
vehicle_air_hapc: "vehicle_air_hapc",
},
animationLabels: {
Forward: "Run Forward",
Back: "Run Backward",
Back0: "Run Backward",
Root: "Idle",
Root2: "Run Backward",
Root3: "Idle",
Idlepda: "Idle (PDA)",
PDA: "Idle (PDA)",
Root1: "Idle (PDA)",
Jump: "Jump",
Jump0: "Jump (Alternate)",
Jump1: "Jump (Alternate)",
Jump2: "Jump (Alternate)",
Jump3: "Jump (Alternate)",
Jet: "Jet",
Fall: "Fall",
Land: "Land",
Land1: "Land (Alternate)",
ski: "Ski",
Side: "Strafe Left",
Celwave: "Wave",
Celbow: "Bow",
Celdisco: "Dance",
Celdance: "Dance",
Celflex: "Flex",
Celflex1: "Flex",
Celrocky: "Awesome",
Celjump: "Awesome",
Celsalute: "Salute",
celTaunt: "Too Bad",
CelebrationGora: "Wave Arms",
Celgora: "Wave Arms",
CelebrationJump: "Bull Charge",
Tauntbull: "Bull Charge",
CelebrationJump0: "Celebrate",
CelebrationJump4: "The Greatest",
CelebrationRoar: "Roar",
Celroar: "Roar",
Celraor: "Roar",
Celflex2: "Flex",
celyeah: "Yeah",
celtaunt: "Too Bad",
Tauntbutt: "Butt",
Tauntkiss: "Blow Kiss",
Tauntbest: "The Greatest",
Taunimp: "Move!",
Tauntimp: "Move!",
Sitting: "Sit",
Scoutroot: "Gravcycle",
Recoilde: "Recoil",
Light_recoil: "Recoil",
Dieforward: "Death (Fall Forward)",
DeathForward: "Death (Fall Forward)",
Dieslump: "Death (Slump)",
DeathSlump: "Death (Slump)",
Diespin: "Death (Spin)",
DeathSpin: "Death (Spin)",
diechest: "Death (Hold Chest)",
Diechest: "Death (Hold Chest)",
DeathChest: "Death (Hold Chest)",
Dieback: "Death (Hold Back)",
DeathBack: "Death (Hold Back)",
Diehead: "Death (Hold Head)",
DeathHead: "Death (Hold Head)",
Dieknees: "Death (On Knees)",
DeathKnees: "Death (On Knees)",
Dieleglf: "Death (Left Leg Injury)",
Dieleglft: "Death (Left Leg Injury)",
DeathLegLeft: "Death (Left Leg Injury)",
Dielegrt: "Death (Right Leg Injury)",
Dielegtrt: "Death (Right Leg Injury)",
DeathLegRight: "Death (Right Leg Injury)",
Dielegrt0: "Death (Right Leg Injury)",
Diesidelf: "Death (Left Side)",
DeathSideLeft: "Death (Left Side)",
Diesidert: "Death (Right Side)",
DeathSideRight: "Death (Right Side)",
Diesidert0: "Death (Right Side Alternate)",
},
cameraOverrides: {
chaingun: { target: "0m 0m 0m", fov: "12deg" },
plasmathrower: { target: "0.002m -0.001m 0m", fov: "12deg" },
energy: { fov: "31deg", orbit: "135deg 70deg 105%" },
hmale: { fov: "24deg" },
hfemale: { fov: "24deg" },
hbioderm: { fov: "24deg" },
vehicle_grav_scout: { orbit: "290deg 60deg 130%" },
vehicle_grav_tank: { orbit: "290deg 60deg 130%" },
turret_assaulttank_mortar: { orbit: "290deg 60deg 130%" },
vehicle_land_mpbbase: { orbit: "290deg 60deg 130%" },
vehicle_air_scout: { orbit: "290deg 60deg 130%" },
vehicle_air_bomber: { orbit: "290deg 60deg 130%" },
vehicle_air_hapc: { orbit: "290deg 60deg 130%" },
},
animationLabelOverrides: {
mmale: {
Back: "Strafe Left",
},
mfemale: {
Dielegrt: "Death (Slump)",
},
lbioderm: {
Root: "Gravcycle",
},
},
materials: {
lmale: [{ name: "base", label: "Warrior", fileSuffix: ".lmale" }],
mmale: [{ name: "base", label: "Warrior", fileSuffix: ".mmale" }],
hmale: [{ name: "base", label: "Warrior", fileSuffix: ".hmale" }],
lfemale: [{ name: "base", label: "Warrior", fileSuffix: ".lfemale" }],
mfemale: [{ name: "base", label: "Warrior", fileSuffix: ".mfemale" }],
lbioderm: [{ name: "base", label: "Warrior", fileSuffix: ".lbioderm" }],
mbioderm: [{ name: "base", label: "Warrior", fileSuffix: ".mbioderm" }],
hbioderm: [{ name: "base", label: "Warrior", fileSuffix: ".hbioderm" }],
disc: [
{ name: "weapon_disc", label: "Weapon" },
{
name: "dcase00",
label: "Disc Case",
size: [256, 256],
baseColorFactor: [1, 1, 1, 0.7],
emissiveFactor: [1, 1, 1],
emissiveTexture: true,
alphaMode: "BLEND",
metallicFactor: 0,
roughnessFactor: 1,
frameCount: 6,
frameTimings: [21, 1, 1, 1, 1, 1],
optional: true,
},
],
chaingun: [{ label: "Chaingun", name: "weapon_chaingun" }],
grenade_launcher: [
{ label: "Grenade Launcher", name: "weapon_grenade_launcher" },
],
sniper: [
{ label: "Weapon", name: "weapon_sniper" },
{
label: "Green Light",
name: "greenlight",
hasDefault: false,
optional: true,
},
{
label: "Red Light",
name: "lite_red",
hasDefault: false,
optional: true,
},
],
plasmathrower: [
{
label: "Rear & Barrel",
name: "weapon_plasma10",
file: "weapon_plasma1",
},
{
label: "Top & Front",
name: "weapon_plasma21",
file: "weapon_plasma2",
},
{
name: "weapon_plasma1",
file: "weapon_plasma1",
selectable: false,
},
{
name: "weapon_plasma2",
file: "weapon_plasma2",
selectable: false,
},
],
energy: [
{
label: "Weapon",
name: "blinn1",
file: "weapon_energy",
},
],
shocklance: [
{ label: "Weapon", name: "weapon_shocklance", size: [512, 256] },
{
label: "Glow",
name: "weapon_shocklance_glow_",
file: "weapon_shocklance_glow ",
emissiveFactor: [1, 1, 1],
alphaMode: "MASK",
alphaCutoff: 255,
emissiveTexture: true,
metallicFactor: 0,
roughnessFactor: 1,
size: [256, 128],
optional: true,
},
],
elf: [
{ label: "Weapon", name: "weapon_elf", file: "weapon_elf" },
{
label: "Glow",
name: "weapon_elf0",
file: "weapon_elf",
},
],
missile: [{ label: "Weapon", name: "weapon_missile" }],
mortar: [{ label: "Weapon", name: "weapon_mortar" }],
repair: [{ label: "Weapon", name: "weapon_repair" }],
targeting: [{ label: "Weapon", name: "weapon_targeting" }],
mine: [
{
label: "Weapon",
name: "mine",
size: [512, 512],
metallicFactor: 0,
roughnessFactor: 1,
},
],
// Vehicles
vehicle_air_scout: [
{
label: "Vehicle",
name: "vehicle_air_scout0",
file: "vehicle_air_scout",
},
{
name: "Unassigned",
hidden: true,
hasDefault: false,
},
{
name: "vehicle_air_scout",
hidden: true,
hasDefault: false,
},
{
label: "Flare",
name: "shrikeflare2",
emissiveFactor: [0, 0, 0],
alphaMode: "BLEND",
emissiveTexture: true,
metallicFactor: 0,
roughnessFactor: 1,
size: [256, 256],
optional: true,
},
],
vehicle_air_bomber: [
{
label: "Cockpit & Thrusters",
name: "vehicle_air_bomber10",
file: "vehicle_air_bomber1",
size: [256, 512],
},
{
name: "Unassigned",
hidden: true,
hasDefault: false,
},
{
label: "Rear",
name: "vehicle_air_bomber2",
size: [256, 512],
},
{
label: "Wings",
name: "vehicle_air_bomber31",
file: "vehicle_air_bomber3",
},
{
name: "vehicle_air_bomber1",
size: [256, 512],
selectable: false,
},
{
name: "vehicle_air_bomber3",
selectable: false,
},
],
vehicle_air_hapc: [
{
label: "Cockpit",
name: "vehicle_air_bomber1",
size: [256, 512],
},
{
name: "Unassigned",
hidden: true,
hasDefault: false,
},
{
label: "Wings",
name: "vehicle_air_hpc2",
},
{
label: "Seats",
name: "vehicle_air_hpc1",
},
{
label: "Thrusters",
name: "vehicle_air_hpc30",
file: "vehicle_air_hpc3",
},
{
name: "vehicle_air_hpc3",
selectable: false,
},
],
vehicle_grav_scout: [
{
label: "Vehicle",
name: "Vehicle_grav_scout0",
file: "Vehicle_grav_scout",
size: [512, 256],
},
{
name: "Unassigned",
hidden: true,
hasDefault: false,
},
{
label: "Pipes",
name: "Vehicle_grav_scout_pipes1",
file: "Vehicle_grav_scout_pipes",
metallicFactor: 0,
roughnessFactor: 1,
},
{
name: "Vehicle_grav_scout",
hidden: true,
hasDefault: false,
},
{
label: "Side Thrusters",
name: "Vehicle_grav_scout_pipes",
file: "Vehicle_grav_scout_pipes",
emissiveFactor: [1, 1, 1],
alphaMode: "OPAQUE",
metallicFactor: 0,
roughnessFactor: 1,
emissiveTexture: true,
selectable: false,
},
{
label: "Windshield",
name: "Vehicle_grav_scout_windshield",
file: "Vehicle_grav_scout_windshield",
selectable: false,
alphaMode: "BLEND",
baseColorFactor: [1, 1, 1, 0.5],
metallicFactor: 0,
roughnessFactor: 1,
size: [128, 128],
optional: true,
},
{
label: "Windshield Inner",
name: "Vehicle_grav_scout_windshieldInner",
file: "Vehicle_grav_scout_windshieldInner",
selectable: false,
alphaMode: "BLEND",
baseColorFactor: [1, 1, 1, 0.5],
metallicFactor: 0,
roughnessFactor: 1,
size: [128, 128],
optional: true,
},
],
vehicle_grav_tank: [
{
label: "Center",
name: "Vehicle_grav_tank_bodyMain",
size: [256, 512],
},
{
name: "Unassigned",
hidden: true,
hasDefault: false,
},
{
label: "Sides",
name: "vehicle_grav_tank_bodyside10",
file: "vehicle_grav_tank_bodyside1",
size: [256, 512],
},
{
label: "Thrusters",
name: "vehicle_grav_tank_bodyside21",
file: "vehicle_grav_tank_bodyside2",
},
{
name: "vehicle_grav_tank_bodyside2",
selectable: false,
},
{
name: "vehicle_grav_tank_bodyside1",
selectable: false,
},
],
turret_assaulttank_mortar: [
{
label: "Turret",
name: "turret_assaulttank_mortar",
file: "turret_assaultTank",
},
],
vehicle_land_mpbbase: [
{
label: "Vehicle Front",
name: "vehicle_land_mpb1",
},
{
label: "Vehicle Back",
name: "vehicle_land_mpb2",
},
{
label: "Wheels",
name: "Vehicle_Land_Assault_wheel",
file: "Vehicle_Land_Assault_Wheel",
size: [512, 256],
optional: true,
},
],
},
animations: {
global: [
"Forward",
"Back",
// "Head",
"Jump",
"Jet",
"Fall",
"Land",
"ski",
// "Lookde",
// "Looknw",
"Root",
],
lmale: [
"Idlepda",
"Side",
"Jump0",
"Land1",
"Recoilde",
"Celwave",
"Celdisco",
"Celflex",
"Celrocky",
"Celsalute",
"celTaunt",
"Taunimp",
"Tauntbest",
"Dieback",
"diechest",
"Dieforward",
"Diehead",
"Dieknees",
"Dieleglf",
"Dielegrt",
"Diesidelf",
"Diesidert",
"Dieslump",
"Diespin",
// "Headside",
// "Lookms",
// "Looksn",
"Scoutroot",
"Sitting",
],
mmale: [
"Back0",
"Jump3",
"Recoilde",
"Celwave",
"Celdance",
"Celflex",
"Celrocky",
"Celsalute",
"celtaunt",
"Tauntbest",
"Tauntimp",
"Dieback",
"Diechest",
"Dieforward",
"Diehead",
"Dieknees",
"Dieleglf",
"Dielegrt",
"Diesidelf",
"Diesidert",
"Diespin",
// "Head1",
// "Lookms",
// "Looksn",
// "Root2",
"Sitting",
],
hmale: [
"Idlepda",
"Jump1",
"Side",
"Recoilde",
"Celwave",
"Celdance",
"Celflex",
"Celjump",
"Celsalute",
"celtaunt",
"Tauntbest",
"Tauntimp",
"Dieback",
"Diechest",
"Dieforward",
"Diehead",
"Dieknees",
"Dielegrt",
"Diesidelf",
"Diesidert",
"Diesidert0",
"Dieslump",
"Diespin",
// "Headside",
// "Lookms",
],
lfemale: [
"Idlepda",
"Jump1",
"Side",
"Recoilde",
"Celwave",
"Celbow",
"Celdance",
"Celsalute",
"Tauntbest",
"Tauntbutt",
"Tauntimp",
"Tauntkiss",
"Dieback",
"Diechest",
"Dieforward",
"Diehead",
"Dieknees",
"Dieleglf",
"Dielegrt",
"Diesidelf",
"Diesidert",
"Dieslump",
"Diespin",
// "Head0",
// "Lookms",
// "Looksn",
"Scoutroot",
"Sitting",
],
mfemale: [
"Idlepda",
"Jump1",
"Side",
"Recoilde",
"Celwave",
"Celbow",
"Celdisco",
"Celsalute",
"Tauntbest",
"Tauntbutt",
"Tauntimp",
"Tauntkiss",
"Dieback",
"Diechest",
"Dieforward",
"Diehead",
"Dieknees",
"Dieleglf",
"Dielegrt",
"Dielegrt0",
"Diesidelf",
"Diesidert",
"Diespin",
// "Headside",
// "Looksn",
// "Lookth",
"Sitting",
],
lbioderm: [
"Root3",
"PDA",
"Jump2",
"Side",
"Light_recoil",
"CelebrationGora",
"CelebrationJump",
"CelebrationJump0",
"CelebrationJump4",
"CelebrationRoar",
"Salute",
"Celflex2",
"celyeah",
"DeathBack",
"DeathChest",
"DeathForward",
"DeathHead",
"DeathKnees",
"DeathLegLeft",
"DeathLegRight",
"DeathSideLeft",
"DeathSideRight",
"DeathSlump",
"DeathSpin",
// "Head1",
// "Lookms",
"Sitting",
],
mbioderm: [
"Root1",
"Jump2",
"Side",
"Recoilde",
"Salute",
"Celflex1",
"Celgora",
"Celjump",
"Celroar",
"celyeah",
"Tauntbest",
"Tauntbull",
"DeathBack",
"DeathChest",
"DeathHead",
"DeathSideLeft",
"DeathSpin",
"Dieforward",
"Dieknees",
"Dieleglft",
"Dielegtrt",
"Diesidert",
"Dieslump",
// "Head0",
// "Lookms",
"Sitting",
],
hbioderm: [
"Root1",
"Jump2",
"Side",
"Recoilde",
"Salute",
"Celflex2",
"Celgora",
"Celjump",
"Celraor",
"celyeah",
"Tauntbest",
"Tauntbull",
"DeathBack",
"DeathChest",
"DeathForward",
"DeathHead",
"DeathKnees",
"DeathLegLeft",
"DeathLegRight",
"DeathSideLeft",
"DeathSideRight",
"DeathSlump",
"DeathSpin",
// "Head0",
// "Lookms",
],
},
};
}
const config = await getSkinConfig();
fs.writeFileSync(
"./models.json",
JSON.stringify(config, null, 2) + "\n",
"utf8"
);