You mentioned a compiler error: "Error: Illegal parameter list"
When I check for assignment using "assigned(x)" instead of if "x <> nil", the illegal parameter list error showed up.
{A test procedure}
procedure person.sayhi;
begin
writeln('Hi from person.');
if not assigned(x) then { <- Error: Illegal parameter list. I suspect It doesn't like anything but pointers. }
begin
writeln(format('I am at %d, %d',[x,y]));
end;
end;
Also it's good to know that when I declare variables in classes, they're just set to zero before I do anything with them.
Maybe I should...:
Make a special "extended" boolean...
type
person = class
private
x,y,vx,vy : integer;
extended : boolean; {Added this to tell the class if I'm using one constructor or the other}
public
constructor create; overload;
constructor create(args : array of integer); overload; {set extended to true here and check for it}
procedure sayhi;
end;
...and change it depending on which constructor I used. (Overloading FTW.)
{Constructor with data passed in.}
constructor person.create(args : array of integer);
begin
x := args[0];
y := args[1];
vx := args[2];
vy := args[3];
writeln(format('Person created with (%d,%d,%d,%d)',[args[0],args[1],args[2],args[3]]));
extended := true; {set extended here}
end;
{A test procedure}
procedure person.sayhi;
begin
writeln('Hi from person.');
if extended then {check extended here.}
begin
writeln(format('I am at %d, %d',[x,y]));
end;
end;
Sooooooo it's just me being a derp. I feel very stupid.
It kinda goes to show how helpful the freepascal/Lazarus community is. Thanks guys.

Edits: How many typing blunders and oversights do I have to make today?