my proposal for fixing

Index: src/droiddef.h
===================================================================
--- src/droiddef.h	(revision 10620)
+++ src/droiddef.h	(working copy)
@@ -169,7 +169,7 @@
 	UWORD           orderX2, orderY2;
 
 	BOOL            bTargetted;
-
+       /* when assign from saved objects this field is used as an ID, that is UDWORD */
 	BASE_OBJECT*    psTarget;                       ///< Order target
 	BASE_STATS*     psTarStats;                     ///< What to build etc
 #ifdef DEBUG
Index: src/game.c
===================================================================
--- src/game.c	(revision 10620)
+++ src/game.c	(working copy)
@@ -92,11 +92,13 @@
 #define SAVEKEY_ONMISSION	0x100
 
 /*!
- * FIXME
- * The code is reusing some pointers as normal integer values apparently. This
- * should be fixed!
+ * FIXME, that is hacker code, using union should be used, would make codes harder to read
+ * The code is reusing some pointers as normal UDWORD values temporaly for restoring from saved
+ * game. This should be fixed! will not
  */
 #define FIXME_CAST_ASSIGN(TYPE, lval, rval) { TYPE* __tmp = (TYPE*) &lval; *__tmp = (TYPE)rval; }
+/* 64-bit system dont like previous */
+#define FIXME_CAST_ASSIGN_ID_FROM_PTR(TYPE, lval, rval) { lval = (UDWORD)(long)rval; }
 
 /// @note This represents a size internal to savegame files, so: DO NOT CHANGE THIS
 #define MAX_GAME_STR_SIZE 20
@@ -5956,7 +5958,7 @@
 			{
 				UDWORD id;
 				//Target rebuild the object pointer from the ID
-				FIXME_CAST_ASSIGN(UDWORD, id, psDroid->psTarget);
+				FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, id, psDroid->psTarget);
 				if (id != NULL_ID)
 				{
 					setSaveDroidTarget(psDroid, getBaseObjFromId(id));
@@ -5971,7 +5973,7 @@
 					setSaveDroidTarget(psDroid, NULL);
 				}
 				//ActionTarget rebuild the object pointer from the ID
-				FIXME_CAST_ASSIGN(UDWORD, id, psDroid->psActionTarget[0]);
+				FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, id, psDroid->psActionTarget[0]);
 				if (id != NULL_ID)
 				{
 					setSaveDroidActionTarget(psDroid, getBaseObjFromId(id), 0);
@@ -5986,7 +5988,7 @@
 					setSaveDroidActionTarget(psDroid, NULL, 0);
 				}
 				//BaseStruct rebuild the object pointer from the ID
-				FIXME_CAST_ASSIGN(UDWORD, id, psDroid->psBaseStruct);
+				FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, id, psDroid->psBaseStruct);
 				if (id != NULL_ID)
 				{
 					setSaveDroidBase(psDroid, (STRUCTURE*)getBaseObjFromId(id));
@@ -6004,10 +6006,10 @@
 				{
 					UDWORD _tmpid;
 					//rebuild group for droids in command group from the commander ID
-					FIXME_CAST_ASSIGN(UDWORD, id, psDroid->psGrpNext);
+					FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, id, psDroid->psGrpNext);
 					if (id == NULL_ID)
 					{
-						FIXME_CAST_ASSIGN(UDWORD, _tmpid, psDroid->psGroup);
+						FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, _tmpid, psDroid->psGroup);
 						psDroid->psGroup = NULL;
 						psDroid->psGrpNext = NULL;
 						if (_tmpid != NULL_ID)
@@ -6606,7 +6608,7 @@
 			if ((psCurr->psBaseStruct != NULL))
 			{
 				UDWORD _tmpid;
-				FIXME_CAST_ASSIGN(UDWORD, _tmpid, psCurr->psBaseStruct);
+				FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, _tmpid, psCurr->psBaseStruct);
 				if (_tmpid != NULL_ID && psCurr->psBaseStruct->died <= 1 && checkValidId(psCurr->psBaseStruct->id))
 				{
 					psSaveDroid->baseStructID = psCurr->psBaseStruct->id;
@@ -8325,7 +8327,7 @@
 					case REF_CYBORG_FACTORY:
 					case REF_VTOL_FACTORY:
 						psFactory = ((FACTORY *)psStruct->pFunctionality);
-						FIXME_CAST_ASSIGN(UDWORD, _tmpid, psFactory->psCommander);
+						FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, _tmpid, psFactory->psCommander);
 						//there is a commander then has been temporarily removed
 						//so put it back
 						if (_tmpid != NULL_ID)
@@ -8358,7 +8360,7 @@
 						break;
 					case REF_REPAIR_FACILITY:
 						psRepair = ((REPAIR_FACILITY *)psStruct->pFunctionality);
-						FIXME_CAST_ASSIGN(UDWORD, _tmpid, psRepair->psObj);
+						FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, _tmpid, psRepair->psObj);
 						if (_tmpid == NULL_ID)
 						{
 							psRepair->psObj = NULL;
@@ -8381,7 +8383,7 @@
 						psReArmPad = ((REARM_PAD *)psStruct->pFunctionality);
 						if (saveGameVersion >= VERSION_26)//version 26
 						{
-							FIXME_CAST_ASSIGN(UDWORD, _tmpid, psReArmPad->psObj)
+							FIXME_CAST_ASSIGN_ID_FROM_PTR(UDWORD, _tmpid, psReArmPad->psObj)
 							if (_tmpid == NULL_ID)
 							{
 								psReArmPad->psObj = NULL;
@@ -10769,7 +10771,7 @@
 				{
 					if (psStruct->pStructureType->type == factoryToFind)
 					{
-						if ((UDWORD)((FACTORY *)psStruct->pFunctionality)->psAssemblyPoint == psflag->factoryInc)
+						if ((UDWORD)(long)((FACTORY *)psStruct->pFunctionality)->psAssemblyPoint == psflag->factoryInc)
 						{
 							//this is the one so set it
 							((FACTORY *)psStruct->pFunctionality)->psAssemblyPoint = psflag;
_______________________________________________
Warzone-dev mailing list
[email protected]
https://mail.gna.org/listinfo/warzone-dev

Reply via email to