I get that is your point and michaelis' too, but I am explaining that I am following what well-known examples do, and they are known to compile fine; for example I found on this particular page that I am supposed to use custom variables as inputs to vectors:
Page link for people to see for themselves:
https://castle-engine.io/custom_components#:~:text=Custom%20Components%201%201.%20Introduction%20You%20can%20enhance,custom%20components%20...%205%205.%20Publishing%20properties%20 Code snippet in particular so it's easy to see and you don't have to read the entire page:
type
TMyComponent = class(TComponent)
strict private
public
{ Note: For simplicity sake, the My4DVector and MyString are just public,
not published, in this example code. But you could make them published,
following instructions from earlier sections. }
My4DVector: TVector4;
MyString: String;
procedure CustomSerialization(const SerializationProcess: TSerializationProcess); override;
end;
procedure TMyComponent.CustomSerialization(const SerializationProcess: TSerializationProcess);
const
DefaultMyOldVector: TVector3 = (X: 0; Y: 0; Z: 0);
DefaultMyOldInteger = 123;
var
MyOldVector: TVector3;
begin
inherited;
{ For example sake, let's assume that in the past, you published
MyOldVector: TVector3 value.
But now you want to expose My4DVector: TVector4,
and when reading old designs -- convert MyOldVector -> My4DVector somehow. }
MyOldVector := DefaultMyOldVector;
SerializationProcess.ReadWriteVector('MyOldVector', MyOldVector,
DefaultMyOldVector, false);
if not TVector3.PerfectlyEquals(MyOldVector, DefaultMyOldVector) then
My4DVector := Vector4(MyOldVector, 1.0);
{ For example sake, let's assume that in the past, you published
MyOldInteger: Integer value.
But now you want to expose MyString: String
and when reading old designs -- convert MyOldInteger -> MyString somehow. }
MyOldInteger := DefaultMyOldInteger;
SerializationProcess.ReadWriteString('MyOldInteger', MyOldInteger, false);
if MyOldInteger <> DefaultMyOldInteger then
MyString := IntToStr(MyOldInteger);
end;
That I have physical proof that if you want a vector, which AvatarTransform is defined as if you read the Castle Game Engine API, as a custom input to another vector, then you should define it in the particular syntax the example states for you, in exact words.
Or here's the page for proof that you use parenthesis in Pascal to assign precedence; even if it's not from the Castle Game Engine forums it is from an official Pascal tutorial site, so I don't doubt they have the expertise down pat:
https://ctp.mkprog.com/en/pascal/parenthesis_operator/#:~:text=Pascal%20-%20Parenthesis%20operator%3A%20%28%29%20We%20can%20use,in%20other%20words%2C%20we%20can%20override%20operator%20precedence.So again, I am willing to learn because I make sure to read all the tutorials carefully for the information I need, as I always patiently point out,
But not just for you guys in particular, but for anyone, refusing to explain what I did wrong doesn't actually help me learn, because that isn't actually helping me learn - that is telling me to fend for myself entirely, point blank.
And also, telling me to do simpler projects doesn't help me make the kinds of games I want, and all I ever wanted since my very first post on the original Castle Game Engine forums was simple, direct answers to simple, direct questions, using actual game examples that are known to work, plain and simple.