Hello Styganthropus Ioanni,
Welcome to the forum.
After some tests, I believe that issue was a bug when using Write with certain characters. Non-ASCII, unicode or multi-byte, I am not sure that is not my expertise.
My solution is, use only WriteLn.
program columns;
uses Crt;
var
SkillName: array[0..29] of string = (
'Botanik', 'Desarmera och Gillra fällor', 'Dyrka upp lås',
'Finna dolda ting', 'Främmande kulturer', 'Första hjälpen',
'Geografi', 'Gömma sig', 'Heraldik/genealogi', 'Historia', 'Hoppa',
'Klättra', 'Köpslå', 'Lyssna', 'Navigera', 'Rida', 'Schack och brädspel',
'Simma', 'Sjunga och spela', 'Spåra', 'Stjäla föremål', 'Upptäcka fara',
'Värdesätta', 'Zoologi', 'Övertala', 'Slagsmål', 'Lönnmord', 'Närstrid',
'Skjuta', 'Sjökunnighet'
);
i: Integer;
begin
for i := 0 to Length(SkillName)-1 do
case Odd(i) of
False:
begin
GotoXY(1, WhereY);
WriteLn(SkillName[i],': ');
end;
True:
begin
GotoXY(30, WhereY-1);
WriteLn(SkillName[i],': ');
end;
end;
end.
Some suggestions for improving the code quality:
Line #6, most Pascal programmers prefer to start an array from 0.
Line #15, programmers usually name the variable i for looping.
Line #15, use integer for looping because many processors are optimized to use integer.
Line #19, I prefer using Odd instead of mod 2.
Line #19, I use select-case statement instead of if-then-else to improve the readability.