Bin jetzt nicht durch alles durch, aber mir sind sofort zwei Dinge in GameDataUnit aufgefallen.
1) Ich war der Meinung, dass man einen Destructor "overriden" soll. hab jetzt schon die erste Stelle gefunden, wo das Schlüsselwort "override" in der Klassen-Definition fehlt
2) Du rufst FIrgendwas.Destroy auf --> Soll man nicht machen. Benutze FIrgendwas.Free
EDIT: AUTSCH!!!!
gerade gesehen in "class procedure TGameData.InitFObs();"
Code: Alles auswählen
var
aStringList: TStringList;
begin
FObs := TObsList.Create;
FObs.Add(OB_Acorn, TThing.Create('acorn', 'ordinary-looking acorn'));
FObs.Add(OB_Bed, TThing.Create('bed', 'nasty, rather damp bed', false, true));
FObs.Add(OB_Bin, TContainerThing.Create('bin', 'smelly old bin', Mass_MEDIUM, true, true, true, true));
aStringList := TStringList.Create(); aStringList.CommaText := 'smelly,old';
FObs.KeyData[OB_Bin].Adjectives := aStringList;
FObs.Add(OB_Bone, TThing.Create('bone', 'bone that looks as though it has been gnawed by a dog'));
FObs.Add(OB_BrassKey, TThing.Create('key', 'small brass key'));
aStringList := TStringList.Create(); aStringList.CommaText := 'small,brass';
FObs.KeyData[OB_BrassKey].Adjectives := aStringList;
// ......
aStringList wird created, einer Eigenschaft zugewiesen, dann NOCHMAL created (und das kommt noch mehrmals vor)?!?!?!?
Zumal die Eigenschaft "Adjectives" ja anscheinend ein TStringList/TStrings ist. Wieso nicht direkt diese Eigenschaft createn?
Desweiteren Createst du TThing innerhalb der Add-Funktion. Dir ist klar, dass du dann keinerlei Referenz mehr darauf hast???
Zumal anscheinend FObs keinen Parent bekommt.
Alles gesagt: Diesen Code würde ich nichtmal mit der Beisszange anfassen