Initial version
This commit is contained in:
249
js/species-data.js
Normal file
249
js/species-data.js
Normal file
@@ -0,0 +1,249 @@
|
||||
// Hierarchical species tree based on Dragon Code V2.6 specification
|
||||
const SPECIES_DATA = {
|
||||
// Dragons (D)
|
||||
D: {
|
||||
name: "Dragon",
|
||||
subtypes: {
|
||||
w: "Western Dragon",
|
||||
e: "Eastern Dragon",
|
||||
p: "Pernese Dragon",
|
||||
f: "Faerie Dragon",
|
||||
r: "Reformed Dragon",
|
||||
c: "Chromatic Dragon",
|
||||
m: "Metallic Dragon",
|
||||
g: "Gem Dragon"
|
||||
}
|
||||
},
|
||||
|
||||
// Humanoid (H)
|
||||
H: {
|
||||
name: "Human",
|
||||
subtypes: {}
|
||||
},
|
||||
|
||||
// Avian (A)
|
||||
A: {
|
||||
name: "Avian",
|
||||
subtypes: {
|
||||
c: "Cockatrice",
|
||||
g: "Griffin",
|
||||
h: "Hippogriff",
|
||||
p: "Phoenix",
|
||||
r: "Roc"
|
||||
}
|
||||
},
|
||||
|
||||
// Bovine (B)
|
||||
B: {
|
||||
name: "Bovine",
|
||||
subtypes: {
|
||||
c: "Cattle",
|
||||
m: "Minotaur"
|
||||
}
|
||||
},
|
||||
|
||||
// Canine (C)
|
||||
C: {
|
||||
name: "Canine",
|
||||
subtypes: {
|
||||
c: "Coyote",
|
||||
d: "Dog",
|
||||
f: "Fox",
|
||||
j: "Jackal",
|
||||
w: "Wolf"
|
||||
}
|
||||
},
|
||||
|
||||
// Serpent (S)
|
||||
S: {
|
||||
name: "Serpent",
|
||||
subtypes: {
|
||||
b: "Basilisk",
|
||||
h: "Hydra",
|
||||
n: "Naga",
|
||||
s: "Sea Serpent"
|
||||
}
|
||||
},
|
||||
|
||||
// Equine (E)
|
||||
E: {
|
||||
name: "Equine",
|
||||
subtypes: {
|
||||
c: "Centaur",
|
||||
h: "Horse",
|
||||
p: "Pegasus",
|
||||
u: "Unicorn",
|
||||
z: "Zebra"
|
||||
}
|
||||
},
|
||||
|
||||
// Feline (F)
|
||||
F: {
|
||||
name: "Feline",
|
||||
subtypes: {
|
||||
c: "Cat",
|
||||
h: "Cheetah",
|
||||
j: "Jaguar",
|
||||
l: "Lion",
|
||||
o: "Ocelot",
|
||||
p: "Panther",
|
||||
t: "Tiger",
|
||||
x: "Lynx"
|
||||
}
|
||||
},
|
||||
|
||||
// Insectoid (I)
|
||||
I: {
|
||||
name: "Insectoid",
|
||||
subtypes: {}
|
||||
},
|
||||
|
||||
// Leporine (L)
|
||||
L: {
|
||||
name: "Leporine",
|
||||
subtypes: {
|
||||
h: "Hare",
|
||||
r: "Rabbit"
|
||||
}
|
||||
},
|
||||
|
||||
// Mammal (M)
|
||||
M: {
|
||||
name: "Mammal",
|
||||
subtypes: {
|
||||
a: {
|
||||
name: "Aquatic",
|
||||
subtypes: {
|
||||
d: "Dolphin",
|
||||
o: "Orca",
|
||||
p: "Porpoise",
|
||||
s: "Seal",
|
||||
w: "Walrus",
|
||||
h: "Whale"
|
||||
}
|
||||
},
|
||||
b: "Badger",
|
||||
e: "Elephant",
|
||||
f: {
|
||||
name: "Feral",
|
||||
subtypes: {
|
||||
p: {
|
||||
name: "Pantherine",
|
||||
subtypes: {
|
||||
c: "Cougar",
|
||||
j: "Jaguar",
|
||||
l: "Leopard",
|
||||
n: "Panther",
|
||||
s: "Snow Leopard",
|
||||
t: "Tiger"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
k: "Skunk",
|
||||
m: "Mink",
|
||||
o: "Otter",
|
||||
r: "Rodent",
|
||||
t: "Taur",
|
||||
w: "Weasel"
|
||||
}
|
||||
},
|
||||
|
||||
// Otter (O)
|
||||
O: {
|
||||
name: "Otter",
|
||||
subtypes: {}
|
||||
},
|
||||
|
||||
// Mythological (Y)
|
||||
Y: {
|
||||
name: "Mythological",
|
||||
subtypes: {
|
||||
c: "Chimera",
|
||||
g: "Gargoyle",
|
||||
m: "Manticore",
|
||||
s: "Sphinx"
|
||||
}
|
||||
},
|
||||
|
||||
// Porcine (P)
|
||||
P: {
|
||||
name: "Porcine",
|
||||
subtypes: {
|
||||
b: "Boar",
|
||||
p: "Pig"
|
||||
}
|
||||
},
|
||||
|
||||
// Reptile (R)
|
||||
R: {
|
||||
name: "Reptile",
|
||||
subtypes: {
|
||||
a: "Alligator",
|
||||
c: "Crocodile",
|
||||
d: "Dinosaur",
|
||||
l: "Lizard",
|
||||
t: "Turtle"
|
||||
}
|
||||
},
|
||||
|
||||
// Aquatic (Q)
|
||||
Q: {
|
||||
name: "Aquatic",
|
||||
subtypes: {
|
||||
d: "Dolphin",
|
||||
f: "Fish",
|
||||
m: "Mermaid/Merman",
|
||||
o: "Orca",
|
||||
s: "Shark"
|
||||
}
|
||||
},
|
||||
|
||||
// Ursine (U)
|
||||
U: {
|
||||
name: "Ursine",
|
||||
subtypes: {
|
||||
b: "Bear",
|
||||
g: "Grizzly",
|
||||
p: "Panda",
|
||||
l: "Polar Bear"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Function to resolve a species code to its full name
|
||||
function resolveSpeciesCode(code) {
|
||||
if (!code || code.length === 0) return null;
|
||||
|
||||
const parts = code.split('');
|
||||
let current = SPECIES_DATA;
|
||||
let path = [];
|
||||
|
||||
for (let i = 0; i < parts.length; i++) {
|
||||
const char = parts[i];
|
||||
|
||||
if (!current[char]) {
|
||||
// If we can't find the next level, return what we have
|
||||
break;
|
||||
}
|
||||
|
||||
current = current[char];
|
||||
|
||||
if (typeof current === 'string') {
|
||||
// We've reached a leaf node (species name)
|
||||
return current;
|
||||
} else if (current.name) {
|
||||
// We're at a node with a name, but there might be subtypes
|
||||
path.push(current.name);
|
||||
if (current.subtypes) {
|
||||
current = current.subtypes;
|
||||
} else {
|
||||
// No more subtypes, return the name
|
||||
return current.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return the accumulated path or the name if we have it
|
||||
return path.length > 0 ? path[path.length - 1] : null;
|
||||
}
|
||||
Reference in New Issue
Block a user