From 123ddb3d46435caa8b233ee2107b7853f613d758 Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Sun, 2 Jun 2013 16:43:16 +0100
Subject: [PATCH] [Add] Cargo affects weight. Also fixed bug when changing
 ships.

---
 src/land.c  |  5 ++++-
 src/pilot.c | 11 +++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/land.c b/src/land.c
index 0f6f53d..f97ad81 100644
--- a/src/land.c
+++ b/src/land.c
@@ -771,13 +771,16 @@ static void shipyard_yoursTransport(char* str) {
 static int shipyard_yoursTransportPrice(char* shipname) {
   char* loc;
   Pilot* ship;
+  int price;
 
   ship = player_getShip(shipname);
   loc = player_getLoc(shipname);
   if(strcmp(loc, land_planet->name)==0) // Already here.
     return 0;
 
-  return (int)ship->solid->mass*500;
+  price = (int)ship->solid->mass*500;
+
+  return price;
 }
 
 // Spaceport bar.
diff --git a/src/pilot.c b/src/pilot.c
index 7ab76ab..e1d8759 100644
--- a/src/pilot.c
+++ b/src/pilot.c
@@ -672,6 +672,7 @@ int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity) {
         q = pilot->cargo_free;
       pilot->commodities[i].quantity += q;
       pilot->cargo_free -= q;
+      pilot->solid->mass += q;
       return q;
     }
 
@@ -690,11 +691,14 @@ int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity) {
 }
 
 static void pilot_calcCargo(Pilot* pilot) {
-  int i;
+  int i, q;
 
   pilot->cargo_free = pilot->ship->cap_cargo;
   for(i = 0; i < pilot->ncommodities; i++)
-    pilot->cargo_free -= pilot->commodities[i].quantity;
+    q += pilot->commodities[i].quantity;
+
+  pilot->cargo_free -= q;                       // Reduce space left.
+  pilot->solid->mass = pilot->ship->mass + q;   // Cargo affects weight.
 }
 
 unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity) {
@@ -709,6 +713,7 @@ unsigned int pilot_addMissionCargo(Pilot* pilot, Commodity* cargo, int quantity)
   pilot->commodities[pilot->ncommodities].id = ++mission_cargo_id;
   pilot->commodities[pilot->ncommodities].quantity = q;
   pilot->cargo_free -= q;
+  pilot->solid->mass += q;
   pilot->ncommodities++;
 
   return pilot->commodities[pilot->ncommodities-1].id;
@@ -726,6 +731,7 @@ int pilot_rmMissionCargo(Pilot* pilot, unsigned int cargo_id) {
 
   // Remove cargo.
   pilot->cargo_free += pilot->commodities[i].quantity;
+  pilot->solid->mass -= pilot->commodities[i].quantity;
   memmove(pilot->commodities+i, pilot->commodities+i+1,
       sizeof(PilotCommodity) * (pilot->ncommodities-i-1));
 
@@ -757,6 +763,7 @@ int pilot_rmCargo(Pilot* pilot, Commodity* cargo, int quantity) {
         pilot->commodities[i].quantity -= q;
 
       pilot->cargo_free += q;
+      pilot->solid->mass -= q;
       return q;
     }