changed 16-bit level micro chunk value type from unsigned to signed
authorHolger Schemel <holger.schemel@virtion.de>
Sat, 28 Sep 2024 10:55:24 +0000 (12:55 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Sat, 28 Sep 2024 10:59:31 +0000 (12:59 +0200)
This change allows for saving and loading negative 16-bit values in
level files (like negatiove values for "gems needed", for example).

As a result, 16-bit and 32-bit micro chunk values are always signed
now, while 8-bit micro chunk values are still always unsigned bytes.

src/files.c

index 9e3c25e59282e3bc637c8b326825478e6e46ac6f..93c7303e38598e7e7a66362977544e9c23e5420e 100644 (file)
@@ -3845,9 +3845,9 @@ static int LoadLevel_MicroChunk(File *file, struct LevelFileConfigInfo *conf,
   }
   else         // constant size configuration data (1, 2 or 4 bytes)
   {
-    int value = (byte_mask == CONF_MASK_1_BYTE ? getFile8Bit   (file) :
-                byte_mask == CONF_MASK_2_BYTE ? getFile16BitBE(file) :
-                byte_mask == CONF_MASK_4_BYTE ? getFile32BitBE(file) : 0);
+    int value = (byte_mask == CONF_MASK_1_BYTE ? (byte)  getFile8Bit   (file) :
+                byte_mask == CONF_MASK_2_BYTE ? (short) getFile16BitBE(file) :
+                byte_mask == CONF_MASK_4_BYTE ? (int)   getFile32BitBE(file) : 0);
 
     for (i = 0; conf[i].data_type != -1; i++)
     {