@Waldgeist:
Mal ne technische Info für Dich wie meine Datenstrukturen aussehen, wenn der GCA nicht wider Erwarten in ganz andere Richtungen als der GCS geht - dann müssten wir überlegen, wie man das alternativ am dümmsten überführt - wäre es ja clever wenn Du die Speicherung ähnlich realisierst... Ausser es gefällt Dir grundsätzlich nicht in dieser Form, aber Du kannst ja mal Deinen Kommentar dazu geben
Primäre und sekundäre Attribute, sowie Basic Speed/Move habe in einem assoziativen Array gespeichert, bei mir heisst das ATTRIBUTE_DATA. Das ist ganz simpel aufgebaut, so dass man die Attributskürzel (etwa ST oder DX) als Zugriffsbezeichner (Hash) im Array benutzen kann und dahinter stehen dann jeweils direkt die Charakterwerte. Die Einlesefunktionen sehen dann z.B. so aus:
ATTRIBUTE_DATA.put("ST", "" + gcsChar.getStrength());
ATTRIBUTE_DATA.put("DX", "" + gcsChar.getDexterity());
Allgemeine Infos wie Name, Aussehen, Kampagne, TL u.ä. stehen wiederum in einem assoziativen Array, diesmal namens PROFILE_DATA (die restlichen allgemeinen Sachen stehen nochmal in einem eigenen assoz. Array). Sieht jedenfalls genau so aus:
PROFILE_DATA.put("Name", gcsChar.getDescription().getName());
PROFILE_DATA.put("Eyes", gcsChar.getDescription().getEyeColor());
Was Fertigkeiten, Zaubersprüche, Advantages, Disadvantages angeht so sind das immer ganze Listen, also keine Einzelelemente - man weiss ja auch vorher bei einem unbekannten Char nicht welche Fertigkeiten er (nicht) haben wird usw.
Ich habe das in Form von durchlaufend indizierten zwei-dimensionalen Arrays, also praktisch Tabellen, umgesetzt. SKILL_DATA, SPELL_DATA, ADVANTAGE_DATA (plus wenn die 'Trennung' aktiviert ist ggf. DISADVANTAGE_DATE u. LANGUAGE_DATA), sowie EQUIPMENT_DATA wobei es dort noch zwei Extra-Arrays für die Werte von Melee u. Ranged Weapons gibt.
Bei den Listen sieht das dann so aus, dass immer der 0. Wert der 1. Spalte (0)(x) dazu verwendet wird die Metadaten zu halten, hier also quasi die Tabellenüberschriften bzw. die Variablen-Namen (Skill_Name usw.) wie unten zu sehen ist. Die Idee dabei ist, dass wir im Hauptprogramm nachher gar nichts von der Semantik wissen müssen, sondern (ähnlich wie bei XML oder so) die Beschreibung der Datenstruktur gleich mit auslesen, um so verschiedene Sachen unterstützen zu können.
Mit dem Wert (1)(0) beginnen dann immer die eigentlichen Daten, also konkrete Skills, Advantages etc., die ein Char aufweist und diese sind eben in der Form gespeichert, wie es vorher beschrieben wurde. Die Strukturen sehen dann so aus:
SKILL_DATA[0][0] = "Skill_Name";
SKILL_DATA[0][1] = "Skill_TechLevel";
SKILL_DATA[0][2] = "Skill_Specialization";
SKILL_DATA[0][3] = "Skill_Level";
SKILL_DATA[0][4] = "Skill_Attribute";
SKILL_DATA[0][5] = "Skill_RelativeLevel";
SKILL_DATA[0][6] = "Skill_Difficulty";
SKILL_DATA[0][7] = "Skill_Points";
SKILL_DATA[0][8] = "Skill_Reference";
z.B.
SKILL_DATA[1][0] = "Driving";
SKILL_DATA[1][1] = "TL8";
SKILL_DATA[1][2] = "Automobile"; ...etc.
ADVANTAGE_DATA[0][0] = "Advantage_Name";
ADVANTAGE_DATA[0][1] = "Advantage_Level";
ADVANTAGE_DATA[0][2] = "Advantage_Points";
ADVANTAGE_DATA[0][3] = "Advantage_Reference";
ADVANTAGE_DATA[0][4] = "Advantage_ModNotes";
ADVANTAGE_DATA[0][5] = "Advantage_Notes";
z.B.
ADVANTAGE_DATA[1][0] = "Charisma";
ADVANTAGE_DATA[1][1] = "1";
ADVANTAGE_DATA[1][2] = "5"; ...etc.
Soo, ich hoffe das war ein hilfreicher Überblick wie die Speicherung aufgebaut ist...