You could also do something like this:
[pascal]
TShip = record
case Boolean of
True: (x, y, bullets: Integer);
False: (arr[0..2] of Integer);
end;
[/pascal]
It's a bit more to write to each record but no typecasting hack.