From 2f59ae1b84bdb0bc13b027233d6d4ab00536b069 Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Sun, 17 Mar 2013 16:36:59 +0000 Subject: [PATCH] [Add] Energy is actively in use now. ^.^ --- TODO | 1 - dat/outfit.xml | 9 ++++++--- dat/ship.xml | 12 ++++++------ dat/start.xml | 4 ++-- src/land.c | 1 + src/outfit.c | 9 +++++++++ src/outfit.h | 13 ++++++++----- src/pilot.c | 16 ++++++++++++++-- 8 files changed, 46 insertions(+), 19 deletions(-) diff --git a/TODO b/TODO index f1bc131..db8f9b3 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ Vital: -- Missions -- Save -- Allow multiple ships in storage. - -- Make energy do something. -- Main Menu. -- Player death! -- Player faction system. diff --git a/dat/outfit.xml b/dat/outfit.xml index 76edf0d..3f6af3b 100644 --- a/dat/outfit.xml +++ b/dat/outfit.xml @@ -15,7 +15,8 @@ <delay>500</delay> <speed>550</speed> <range>300</range> - <accuracy>30</accuracy> + <accuracy>30</accuracy> + <energy>8</energy> <damage> <armour>13</armour> <shield>10</shield> @@ -37,7 +38,8 @@ <delay>300</delay> <speed>550</speed> <range>300</range> - <accuracy>30</accuracy> + <accuracy>30</accuracy> + <energy>10</energy> <damage> <armour>13</armour> <shield>10</shield> @@ -131,7 +133,8 @@ <delay>400</delay> <speed>650</speed> <range>200</range> - <accuracy>15</accuracy> + <accuracy>15</accuracy> + <energy>5</energy> <damage> <armour>7</armour> <shield>7</shield> diff --git a/dat/ship.xml b/dat/ship.xml index 23a7b16..8f684ea 100644 --- a/dat/ship.xml +++ b/dat/ship.xml @@ -20,7 +20,7 @@ <energy>240</energy> <shield_regen>80</shield_regen> <armour_regen>50</armour_regen> - <energy_regen>40</energy_regen> + <energy_regen>500</energy_regen> </health> <characteristics> <crew>2</crew> @@ -52,7 +52,7 @@ <energy>180</energy> <shield_regen>150</shield_regen> <armour_regen>60</armour_regen> - <energy_regen>40</energy_regen> + <energy_regen>500</energy_regen> </health> <characteristics> <crew>2</crew> @@ -84,7 +84,7 @@ <energy>900</energy> <shield_regen>300</shield_regen> <armour_regen>80</armour_regen> - <energy_regen>50</energy_regen> + <energy_regen>1400</energy_regen> </health> <characteristics> <crew>35</crew> @@ -118,7 +118,7 @@ <energy>360</energy> <shield_regen>180</shield_regen> <armour_regen>60</armour_regen> - <energy_regen>50</energy_regen> + <energy_regen>1080</energy_regen> </health> <characteristics> <crew>9</crew> @@ -152,7 +152,7 @@ <energy>200</energy> <shield_regen>100</shield_regen> <armour_regen>40</armour_regen> - <energy_regen>250</energy_regen> + <energy_regen>650</energy_regen> </health> <characteristics> <crew>13</crew> @@ -184,7 +184,7 @@ <energy>300</energy> <shield_regen>240</shield_regen> <armour_regen>420</armour_regen> - <energy_regen>240</energy_regen> + <energy_regen>600</energy_regen> </health> <characteristics> <crew>1</crew> diff --git a/dat/start.xml b/dat/start.xml index 526a73b..96aca8c 100644 --- a/dat/start.xml +++ b/dat/start.xml @@ -3,8 +3,8 @@ <player> <ship>Lancer</ship> <credits> - <low>5000</low> - <high>15000</high> + <low>50000</low> + <high>150000</high> </credits> <system> <name>KonoSys</name> diff --git a/src/land.c b/src/land.c index 3d3f6ee..1889b35 100644 --- a/src/land.c +++ b/src/land.c @@ -569,6 +569,7 @@ void takeoff(void) { // Heal the player. player->armour = player->armour_max; player->shield = player->shield_max; + player->energy = player->energy_max; space_init(NULL); diff --git a/src/outfit.c b/src/outfit.c index 8dd39ab..16694e6 100644 --- a/src/outfit.c +++ b/src/outfit.c @@ -126,6 +126,13 @@ int outfit_delay(const Outfit* o) { 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[] = { "NULL", "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, "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, "energy")) tmp->u.blt.energy = xml_getFloat(node); else if(xml_isNode(node, "gfx")) { snprintf(str, strlen(xml_get(node))+sizeof(OUTFIT_GFX)+4, 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); 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, "energy")) tmp->u.amm.energy = xml_getFloat(node); else if(xml_isNode(node, "duration")) tmp->u.amm.duration = (unsigned int)1000.*xml_getFloat(node); else if(xml_isNode(node, "lockon")) diff --git a/src/outfit.h b/src/outfit.h index cb56c61..00d7bd4 100644 --- a/src/outfit.h +++ b/src/outfit.h @@ -47,9 +47,10 @@ typedef struct Outfit_ { union { struct { // Bolt. 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 accuracy; // Desviation accuracy. + double accuracy; // Desviation accuracy. + double energy; // Energy usage. double damage_armour, damage_shield; // Damage. glTexture* gfx_space; @@ -68,9 +69,10 @@ typedef struct Outfit_ { } lau; struct { // Ammo. unsigned int duration; // Duration. - double speed; // Max speed. - double turn; // Turn vel. - double thrust; // Acceleration. + double speed; // Max speed. + double turn; // Turn vel. + double thrust; // Acceleration. + double energy; // Energy usage. double damage_armour, damage_shield; // Damage. glTexture* gfx_space; @@ -98,6 +100,7 @@ int outfit_spfx(const Outfit* o); double outfit_dmgShield(const Outfit* o); double outfit_dmgArmour(const Outfit* o); int outfit_delay(const Outfit* o); +double outfit_energy(const Outfit* o); // Load/free outfit stack. int outfit_load(void); diff --git a/src/pilot.c b/src/pilot.c index 4f00293..41df44e 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -171,6 +171,10 @@ static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t) { switch(w->outfit->type) { case OUTFIT_TYPE_TURRET_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, &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. else if(outfit_isLauncher(w->outfit) && (w == p->secondary) && (p->id != t)) { 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, &p->solid->vel, p->id, t); @@ -349,13 +357,17 @@ static void pilot_update(Pilot* pilot, const double dt) { return; } // 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; - else + pilot->energy += pilot->ship->energy_regen*dt; + } else { 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->shield > pilot->shield_max) pilot->shield = pilot->shield_max; + if(pilot->energy > pilot->energy_max) pilot->energy = pilot->energy_max; // Update the solid. (*pilot->solid->update)(pilot->solid, dt);