[Add] Ships now have human readable class strings instead of numbers.

This commit is contained in:
Allanis 2013-10-08 19:34:48 +01:00
parent b748f0f18e
commit c2d4f39a72
3 changed files with 151 additions and 73 deletions

View File

@ -4,7 +4,7 @@
<GFX>llama</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>120000</price>
<fabricator>Melendez Corp.</fabricator>
<tech>2</tech>
@ -37,7 +37,7 @@
<GFX>hyena</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>180000</price>
<fabricator>Aerosys</fabricator>
<tech>2</tech>
@ -70,7 +70,7 @@
<GFX>pacifier</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>civ medium</class>
<price>1200000</price>
<fabricator>Nexus</fabricator>
<tech>8</tech>
@ -106,7 +106,7 @@
<GFX>pacifier</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>mil medium</class>
<price>12000000</price>
<fabricator>Nexus</fabricator>
<tech>9999</tech>
@ -142,7 +142,7 @@
<GFX>hawking</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>3</class>
<class>civ heavy</class>
<price>7500000</price>
<fabricator>Nexus</fabricator>
<tech>9</tech>
@ -177,7 +177,7 @@
<GFX target="hawking">hawking_empire</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>3</class>
<class>mil heavy</class>
<price>7500000</price>
<fabricator>Nexus</fabricator>
<tech>9999</tech>
@ -212,7 +212,7 @@
<GFX>lancelot</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>civ medium</class>
<price>500000</price>
<fabricator>Nexus</fabricator>
<tech>7</tech>
@ -249,7 +249,7 @@
<GFX target="lancelot">lancelot_empire</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>mil medium</class>
<price>500000</price>
<fabricator>Nexus</fabricator>
<tech>9999</tech>
@ -285,7 +285,7 @@
<GFX>mule</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>civ heavy</class>
<price>900000</price>
<fabricator>Melendez Corp</fabricator>
<tech>5</tech>
@ -318,7 +318,7 @@
<GFX>drone</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>7</class>
<class>rob light</class>
<price>300000</price>
<fabricator>Robosys</fabricator>
<tech>99</tech>
@ -351,7 +351,7 @@
<GFX>gawain</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>500000</price>
<fabricator>Nexus</fabricator>
<tech>11</tech>
@ -384,7 +384,7 @@
<GFX>goddard</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>3</class>
<class>civ heavy</class>
<price>11500000</price>
<fabricator>House Goddard</fabricator>
<tech>1001</tech>
@ -420,7 +420,7 @@
<GFX target="goddard">goddard_draktharr</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>3</class>
<class>mil heavy</class>
<price>11500000</price>
<fabricator>House Goddard</fabricator>
<tech>9999</tech>
@ -455,7 +455,7 @@
<GFX>admonisher</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>civ medium</class>
<price>900000</price>
<fabricator>Nexus</fabricator>
<tech>10</tech>
@ -491,7 +491,7 @@
<GFX target="admonisher">admonisher_pirate</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>civ medium</class>
<price>850000</price>
<fabricator>Skull and Bones</fabricator>
<tech>9009</tech>
@ -527,7 +527,7 @@
<GFX target="admonisher">admonisher_empire</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>2</class>
<class>civ medium</class>
<price>900000</price>
<fabricator>Nexus</fabricator>
<tech>9999</tech>
@ -564,7 +564,7 @@
<GFX>schroedinger</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>180000</price>
<fabricator>Sirius Systems</fabricator>
<tech>5</tech>
@ -597,7 +597,7 @@
<GFX>vendetta</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>400000</price>
<fabricator>House Draktharr</fabricator>
<tech>8</tech>
@ -630,7 +630,7 @@
<GFX target="vendetta">vendetta_draktharr</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>mil light</class>
<price>400000</price>
<fabricator>House Draktharr</fabricator>
<tech>9999</tech>
@ -665,7 +665,7 @@
<GFX target="vendetta">vendetta_pirate</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>450000</price>
<fabricator>Skull and Bones</fabricator>
<tech>9009</tech>
@ -699,7 +699,7 @@
<GFX>ancestor</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>600000</price>
<fabricator>House Draktharr</fabricator>
<tech>9</tech>
@ -734,7 +734,7 @@
<GFX target="ancestor">ancestor_draktharr</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>mil light</class>
<price>600000</price>
<fabricator>House Draktharr</fabricator>
<tech>9999</tech>
@ -769,7 +769,7 @@
<GFX target="ancestor">ancestor_pirate</GFX>
<GUI>minimal</GUI>
<sound>engine</sound>
<class>1</class>
<class>civ light</class>
<price>550000</price>
<fabricator>Skull and Bones</fabricator>
<tech>9009</tech>

View File

@ -97,17 +97,82 @@ char** ship_getTech(int* n, const int* tech, const int techmax) {
}
/* Get the ship's classname. */
static char* ship_classes[] = {
"NULL",
"Civialian Light", "Civilian Medium", "Civilian Heavy"
"Military Light", "Military Medium", "Military Heavy"
"Robotic Light", "Robotic Medium", "Robotic Heavy"
"Hybrid Light", "Hybrid Medium", "Hybrid Heavy"
};
char* ship_class(Ship* s) {
return ship_classes[s->class];
switch(s->class) {
case SHIP_CLASS_NULL:
return "NULL";
/* Civilian */
case SHIP_CLASS_CIV_LIGHT:
return "Civilian Light";
case SHIP_CLASS_CIV_MEDIUM:
return "Civilian Medium";
case SHIP_CLASS_CIV_HEAVY:
return "Civilian Heavy";
/* Military. */
case SHIP_CLASS_MIL_LIGHT:
return "Military Light";
case SHIP_CLASS_MIL_MEDIUM:
return "Military Medium";
case SHIP_CLASS_MIL_HEAVY:
return "Military Heavy";
/* Robotic. */
case SHIP_CLASS_ROB_LIGHT:
return "Robotic Light";
case SHIP_CLASS_ROB_MEDIUM:
return "Robotic Medium";
case SHIP_CLASS_ROB_HEAVY:
return "Robotic Heavy";
/* Hybrid. */
case SHIP_CLASS_HYB_LIGHT:
return "Hybrid Light";
case SHIP_CLASS_HYB_MEDIUM:
return "Hybrid Medium";
case SHIP_CLASS_HYB_HEAVY:
return "Hybrid Heavy";
default:
return "Unknown";
}
}
/**
* @fn static ShipClass ship_classFromString(char* str)
*
* @brief Get the machine ship class identifier from a human readable string.
* @param str String to extract ship class identifier from.
*/
static ShipClass ship_classFromString(char* str) {
/* Civilian. */
if(strcmp(str, "civ light")==0)
return SHIP_CLASS_CIV_LIGHT;
if(strcmp(str, "civ medium")==0)
return SHIP_CLASS_CIV_MEDIUM;
if(strcmp(str, "civ heavy")==0)
return SHIP_CLASS_CIV_HEAVY;
/* Military. */
if(strcmp(str, "mil light")==0)
return SHIP_CLASS_MIL_LIGHT;
if(strcmp(str, "mil medium")==0)
return SHIP_CLASS_MIL_MEDIUM;
if(strcmp(str, "mil heavy")==0)
return SHIP_CLASS_MIL_HEAVY;
/* Robotic. */
if(strcmp(str, "rob light")==0)
return SHIP_CLASS_ROB_LIGHT;
if(strcmp(str, "rob medium")==0)
return SHIP_CLASS_ROB_MEDIUM;
if(strcmp(str, "rob heavy")==0)
return SHIP_CLASS_ROB_HEAVY;
/* Hybrid. */
if(strcmp(str, "hyb light")==0)
return SHIP_CLASS_HYB_LIGHT;
if(strcmp(str, "hyb medium")==0)
return SHIP_CLASS_HYB_MEDIUM;
if(strcmp(str, "hyb heavy")==0)
return SHIP_CLASS_HYB_HEAVY;
/* Unknown. */
return SHIP_CLASS_NULL;
}
/**
@ -165,9 +230,13 @@ static Ship* ship_parse(xmlNodePtr parent) {
}
}
xmlr_strd(node, "GUI", tmp->gui);
if(xml_isNode(node, "sound"))
if(xml_isNode(node, "sound")) {
tmp->sound = sound_get(xml_get(node));
xmlr_int(node, "class", tmp->class);
continue;
}
if(xml_isNode(node, "class")) {
tmp->class = ship_classFromString(xml_get(node));
}
xmlr_int(node, "price", tmp->price);
xmlr_int(node, "tech", tmp->tech);
xmlr_strd(node, "fabricator", tmp->fabricator);
@ -179,8 +248,9 @@ static Ship* ship_parse(xmlNodePtr parent) {
xmlr_int(cur, "turn", tmp->turn);
xmlr_int(cur, "speed", tmp->speed);
} while(xml_nextNode(cur));
continue;
}
else if(xml_isNode(node, "health")) {
if(xml_isNode(node, "health")) {
cur = node->children;
do {
xmlr_float(cur, "armour", tmp->armour);
@ -193,8 +263,9 @@ static Ship* ship_parse(xmlNodePtr parent) {
else if(xml_isNode(cur, "energy_regen"))
tmp->energy_regen = (double)(xml_getInt(cur))/60.0;
} while(xml_nextNode(cur));
continue;
}
else if(xml_isNode(node, "characteristics")) {
if(xml_isNode(node, "characteristics")) {
cur = node->children;
do {
xmlr_int(cur, "crew", tmp->crew);
@ -203,8 +274,9 @@ static Ship* ship_parse(xmlNodePtr parent) {
xmlr_int(cur, "cap_weapon", tmp->cap_weapon);
xmlr_int(cur, "cap_cargo", tmp->cap_cargo);
} while(xml_nextNode(cur));
continue;
}
else if(xml_isNode(node, "outfits")) {
if(xml_isNode(node, "outfits")) {
cur = node->children;
do {
if(xml_isNode(cur, "outfit")) {
@ -225,6 +297,7 @@ static Ship* ship_parse(xmlNodePtr parent) {
}
}
} while(xml_nextNode(cur));
continue;
}
} while(xml_nextNode(node));
@ -234,7 +307,7 @@ static Ship* ship_parse(xmlNodePtr parent) {
MELEMENT(tmp->name == NULL, "name");
MELEMENT(tmp->gfx_space == NULL, "GFX");
MELEMENT(tmp->gui == NULL, "GUI");
MELEMENT(tmp->class==0, "class");
MELEMENT(tmp->class==SHIP_CLASS_NULL, "class");
MELEMENT(tmp->price==0, "price");
MELEMENT(tmp->tech==0, "tech");
MELEMENT(tmp->fabricator==0, "fabricator");

View File

@ -4,23 +4,28 @@
#include "sound.h"
/* Target gfx dimensions. */
#define SHIP_TARGET_W 128
#define SHIP_TARGET_H 96
#define SHIP_TARGET_W 128 /**< Ship target graphic width. */
#define SHIP_TARGET_H 96 /**< Ship target graphic height. */
/**
* @typedef ShipClass
*
* @breif Contains the different types of ships.
*/
typedef enum ShipClass_ {
SHIP_CLASS_NULL = 0,
SHIP_CLASS_CIV_LIGHT = 1,
SHIP_CLASS_CIV_MEDIUM = 2,
SHIP_CLASS_CIV_HEAVY = 3,
SHIP_CLASS_MIL_LIGHT = 4,
SHIP_CLASS_MIL_MEDIUM = 5,
SHIP_CLASS_MIL_HEAVY = 6,
SHIP_CLASS_ROB_LIGHT = 7,
SHIP_CLASS_ROB_MEDIUM = 8,
SHIP_CLASS_ROB_HEAVY = 9,
SHIP_CLASS_HYB_LIGHT = 10,
SHIP_CLASS_HYB_MEDIUM = 11,
SHIP_CLASS_HYB_HEAVY = 12
SHIP_CLASS_NULL,
SHIP_CLASS_CIV_LIGHT,
SHIP_CLASS_CIV_MEDIUM,
SHIP_CLASS_CIV_HEAVY,
SHIP_CLASS_MIL_LIGHT,
SHIP_CLASS_MIL_MEDIUM,
SHIP_CLASS_MIL_HEAVY,
SHIP_CLASS_ROB_LIGHT,
SHIP_CLASS_ROB_MEDIUM,
SHIP_CLASS_ROB_HEAVY,
SHIP_CLASS_HYB_LIGHT,
SHIP_CLASS_HYB_MEDIUM,
SHIP_CLASS_HYB_HEAVY
} ShipClass;
/* Small wrapper for the outfits. */