diff --git a/UndertaleModLib/Models/UndertaleCode.cs b/UndertaleModLib/Models/UndertaleCode.cs
index e59600d3d..7df13fd68 100644
--- a/UndertaleModLib/Models/UndertaleCode.cs
+++ b/UndertaleModLib/Models/UndertaleCode.cs
@@ -213,23 +213,23 @@ public Reference(T target, VariableType type)
public Reference(int int32Value)
{
- NextOccurrenceOffset = (uint)int32Value & 0x00FFFFFF;
- Type = (VariableType)(int32Value >> 24);
+ NextOccurrenceOffset = (uint)int32Value & 0x07FFFFFF;
+ Type = (VariableType)((int32Value >> 24) & 0xF8);
}
///
public void Serialize(UndertaleWriter writer)
{
NextOccurrenceOffset = 0xdead;
- writer.WriteUInt24(NextOccurrenceOffset);
- writer.Write((byte)Type);
+ writer.Write((NextOccurrenceOffset & 0x07FFFFFF) | (((uint)Type & 0xF8) << 24));
}
///
public void Unserialize(UndertaleReader reader)
{
- NextOccurrenceOffset = reader.ReadUInt24();
- Type = (VariableType)reader.ReadByte();
+ int int32Value = reader.ReadInt32();
+ NextOccurrenceOffset = (uint)int32Value & 0x07FFFFFF;
+ Type = (VariableType)((int32Value >> 24) & 0xF8);
}
///
@@ -289,8 +289,9 @@ public static void SerializeReferenceChain(UndertaleWriter writer, IList());
- writer.WriteInt24(addrDiff);
+ Reference thisRef = references[var][i].GetReference();
+ writer.Position = writer.GetAddressForUndertaleObject(thisRef);
+ writer.Write((addrDiff & 0x07FFFFFF) | (((int)thisRef.Type & 0xF8) << 24));
}
}
else