[Add] Energy is actively in use now. ^.^

This commit is contained in:
Allanis 2013-03-17 16:36:59 +00:00
parent d970d85529
commit 2f59ae1b84
8 changed files with 46 additions and 19 deletions

1
TODO
View File

@ -2,7 +2,6 @@ Vital:
-- Missions -- Missions
-- Save -- Save
-- Allow multiple ships in storage. -- Allow multiple ships in storage.
-- Make energy do something.
-- Main Menu. -- Main Menu.
-- Player death! -- Player death!
-- Player faction system. -- Player faction system.

View File

@ -15,7 +15,8 @@
<delay>500</delay> <delay>500</delay>
<speed>550</speed> <speed>550</speed>
<range>300</range> <range>300</range>
<accuracy>30</accuracy> <accuracy>30</accuracy>
<energy>8</energy>
<damage> <damage>
<armour>13</armour> <armour>13</armour>
<shield>10</shield> <shield>10</shield>
@ -37,7 +38,8 @@
<delay>300</delay> <delay>300</delay>
<speed>550</speed> <speed>550</speed>
<range>300</range> <range>300</range>
<accuracy>30</accuracy> <accuracy>30</accuracy>
<energy>10</energy>
<damage> <damage>
<armour>13</armour> <armour>13</armour>
<shield>10</shield> <shield>10</shield>
@ -131,7 +133,8 @@
<delay>400</delay> <delay>400</delay>
<speed>650</speed> <speed>650</speed>
<range>200</range> <range>200</range>
<accuracy>15</accuracy> <accuracy>15</accuracy>
<energy>5</energy>
<damage> <damage>
<armour>7</armour> <armour>7</armour>
<shield>7</shield> <shield>7</shield>

View File

@ -20,7 +20,7 @@
<energy>240</energy> <energy>240</energy>
<shield_regen>80</shield_regen> <shield_regen>80</shield_regen>
<armour_regen>50</armour_regen> <armour_regen>50</armour_regen>
<energy_regen>40</energy_regen> <energy_regen>500</energy_regen>
</health> </health>
<characteristics> <characteristics>
<crew>2</crew> <crew>2</crew>
@ -52,7 +52,7 @@
<energy>180</energy> <energy>180</energy>
<shield_regen>150</shield_regen> <shield_regen>150</shield_regen>
<armour_regen>60</armour_regen> <armour_regen>60</armour_regen>
<energy_regen>40</energy_regen> <energy_regen>500</energy_regen>
</health> </health>
<characteristics> <characteristics>
<crew>2</crew> <crew>2</crew>
@ -84,7 +84,7 @@
<energy>900</energy> <energy>900</energy>
<shield_regen>300</shield_regen> <shield_regen>300</shield_regen>
<armour_regen>80</armour_regen> <armour_regen>80</armour_regen>
<energy_regen>50</energy_regen> <energy_regen>1400</energy_regen>
</health> </health>
<characteristics> <characteristics>
<crew>35</crew> <crew>35</crew>
@ -118,7 +118,7 @@
<energy>360</energy> <energy>360</energy>
<shield_regen>180</shield_regen> <shield_regen>180</shield_regen>
<armour_regen>60</armour_regen> <armour_regen>60</armour_regen>
<energy_regen>50</energy_regen> <energy_regen>1080</energy_regen>
</health> </health>
<characteristics> <characteristics>
<crew>9</crew> <crew>9</crew>
@ -152,7 +152,7 @@
<energy>200</energy> <energy>200</energy>
<shield_regen>100</shield_regen> <shield_regen>100</shield_regen>
<armour_regen>40</armour_regen> <armour_regen>40</armour_regen>
<energy_regen>250</energy_regen> <energy_regen>650</energy_regen>
</health> </health>
<characteristics> <characteristics>
<crew>13</crew> <crew>13</crew>
@ -184,7 +184,7 @@
<energy>300</energy> <energy>300</energy>
<shield_regen>240</shield_regen> <shield_regen>240</shield_regen>
<armour_regen>420</armour_regen> <armour_regen>420</armour_regen>
<energy_regen>240</energy_regen> <energy_regen>600</energy_regen>
</health> </health>
<characteristics> <characteristics>
<crew>1</crew> <crew>1</crew>

View File

@ -3,8 +3,8 @@
<player> <player>
<ship>Lancer</ship> <ship>Lancer</ship>
<credits> <credits>
<low>5000</low> <low>50000</low>
<high>15000</high> <high>150000</high>
</credits> </credits>
<system> <system>
<name>KonoSys</name> <name>KonoSys</name>

View File

@ -569,6 +569,7 @@ void takeoff(void) {
// Heal the player. // Heal the player.
player->armour = player->armour_max; player->armour = player->armour_max;
player->shield = player->shield_max; player->shield = player->shield_max;
player->energy = player->energy_max;
space_init(NULL); space_init(NULL);

View File

@ -126,6 +126,13 @@ int outfit_delay(const Outfit* o) {
return -1; return -1;
} }
double outfit_energy(const Outfit* o) {
if(outfit_isWeapon(o)) return o->u.blt.energy;
else if(outfit_isAmmo(o)) return o->u.amm.energy;
else if(outfit_isTurret(o)) return o->u.blt.energy;
return -1.;
}
const char* outfit_typename[] = { const char* outfit_typename[] = {
"NULL", "NULL",
"Bolt Cannon", "Bolt Cannon",
@ -180,6 +187,7 @@ static void outfit_parseSWeapon(Outfit* tmp, const xmlNodePtr parent) {
else if(xml_isNode(node, "delay")) tmp->u.blt.delay = xml_getInt(node); else if(xml_isNode(node, "delay")) tmp->u.blt.delay = xml_getInt(node);
else if(xml_isNode(node, "range")) tmp->u.blt.range = xml_getFloat(node); else if(xml_isNode(node, "range")) tmp->u.blt.range = xml_getFloat(node);
else if(xml_isNode(node, "accuracy")) tmp->u.blt.accuracy = xml_getFloat(node); else if(xml_isNode(node, "accuracy")) tmp->u.blt.accuracy = xml_getFloat(node);
else if(xml_isNode(node, "energy")) tmp->u.blt.energy = xml_getFloat(node);
else if(xml_isNode(node, "gfx")) { else if(xml_isNode(node, "gfx")) {
snprintf(str, strlen(xml_get(node))+sizeof(OUTFIT_GFX)+4, snprintf(str, strlen(xml_get(node))+sizeof(OUTFIT_GFX)+4,
OUTFIT_GFX"%s.png", xml_get(node)); OUTFIT_GFX"%s.png", xml_get(node));
@ -241,6 +249,7 @@ static void outfit_parseSAmmo(Outfit* tmp, const xmlNodePtr parent) {
if(xml_isNode(node, "thrust")) tmp->u.amm.thrust = xml_getFloat(node); if(xml_isNode(node, "thrust")) tmp->u.amm.thrust = xml_getFloat(node);
else if(xml_isNode(node, "turn")) tmp->u.amm.turn = xml_getFloat(node); else if(xml_isNode(node, "turn")) tmp->u.amm.turn = xml_getFloat(node);
else if(xml_isNode(node, "speed")) tmp->u.amm.speed = xml_getFloat(node); else if(xml_isNode(node, "speed")) tmp->u.amm.speed = xml_getFloat(node);
else if(xml_isNode(node, "energy")) tmp->u.amm.energy = xml_getFloat(node);
else if(xml_isNode(node, "duration")) else if(xml_isNode(node, "duration"))
tmp->u.amm.duration = (unsigned int)1000.*xml_getFloat(node); tmp->u.amm.duration = (unsigned int)1000.*xml_getFloat(node);
else if(xml_isNode(node, "lockon")) else if(xml_isNode(node, "lockon"))

View File

@ -47,9 +47,10 @@ typedef struct Outfit_ {
union { union {
struct { // Bolt. struct { // Bolt.
unsigned int delay; // Delay between shots. unsigned int delay; // Delay between shots.
double speed; // Speed of shot. (not applicable to beam. double speed; // Speed of shot. (not applicable to beam.
double range; double range;
double accuracy; // Desviation accuracy. double accuracy; // Desviation accuracy.
double energy; // Energy usage.
double damage_armour, damage_shield; // Damage. double damage_armour, damage_shield; // Damage.
glTexture* gfx_space; glTexture* gfx_space;
@ -68,9 +69,10 @@ typedef struct Outfit_ {
} lau; } lau;
struct { // Ammo. struct { // Ammo.
unsigned int duration; // Duration. unsigned int duration; // Duration.
double speed; // Max speed. double speed; // Max speed.
double turn; // Turn vel. double turn; // Turn vel.
double thrust; // Acceleration. double thrust; // Acceleration.
double energy; // Energy usage.
double damage_armour, damage_shield; // Damage. double damage_armour, damage_shield; // Damage.
glTexture* gfx_space; glTexture* gfx_space;
@ -98,6 +100,7 @@ int outfit_spfx(const Outfit* o);
double outfit_dmgShield(const Outfit* o); double outfit_dmgShield(const Outfit* o);
double outfit_dmgArmour(const Outfit* o); double outfit_dmgArmour(const Outfit* o);
int outfit_delay(const Outfit* o); int outfit_delay(const Outfit* o);
double outfit_energy(const Outfit* o);
// Load/free outfit stack. // Load/free outfit stack.
int outfit_load(void); int outfit_load(void);

View File

@ -171,6 +171,10 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) {
switch(w->outfit->type) { switch(w->outfit->type) {
case OUTFIT_TYPE_TURRET_BOLT: case OUTFIT_TYPE_TURRET_BOLT:
case OUTFIT_TYPE_BOLT: case OUTFIT_TYPE_BOLT:
// Enough energy?
if(outfit_energy(w->outfit) > p->energy) return;
p->energy -= outfit_energy(w->outfit);
weapon_add(w->outfit, p->solid->dir, &p->solid->pos, weapon_add(w->outfit, p->solid->dir, &p->solid->pos,
&p->solid->vel, p->id, t); &p->solid->vel, p->id, t);
@ -185,6 +189,10 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) {
// Must be secondary weapon, Shooter can't be the target. // Must be secondary weapon, Shooter can't be the target.
else if(outfit_isLauncher(w->outfit) && (w == p->secondary) && (p->id != t)) { else if(outfit_isLauncher(w->outfit) && (w == p->secondary) && (p->id != t)) {
if(p->ammo && (p->ammo->quantity > 0)) { if(p->ammo && (p->ammo->quantity > 0)) {
// Enough energy?
if(outfit_energy(w->outfit) > p->energy) return;
p->energy -= outfit_energy(w->outfit);
weapon_add(p->ammo->outfit, p->solid->dir, &p->solid->pos, weapon_add(p->ammo->outfit, p->solid->dir, &p->solid->pos,
&p->solid->vel, p->id, t); &p->solid->vel, p->id, t);
@ -349,13 +357,17 @@ static void pilot_update(Pilot* pilot, const double dt) {
return; return;
} }
// We are still alive. // We are still alive.
else if(pilot->armour < pilot->armour_max) else if(pilot->armour < pilot->armour_max) {
pilot->armour += pilot->ship->armour_regen*dt; pilot->armour += pilot->ship->armour_regen*dt;
else pilot->energy += pilot->ship->energy_regen*dt;
} else {
pilot->shield += pilot->ship->shield_regen*dt; pilot->shield += pilot->ship->shield_regen*dt;
pilot->energy += pilot->ship->energy_regen*dt;
}
if(pilot->armour > pilot->armour_max) pilot->armour = pilot->armour_max; if(pilot->armour > pilot->armour_max) pilot->armour = pilot->armour_max;
if(pilot->shield > pilot->shield_max) pilot->shield = pilot->shield_max; if(pilot->shield > pilot->shield_max) pilot->shield = pilot->shield_max;
if(pilot->energy > pilot->energy_max) pilot->energy = pilot->energy_max;
// Update the solid. // Update the solid.
(*pilot->solid->update)(pilot->solid, dt); (*pilot->solid->update)(pilot->solid, dt);