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