0 Woher bekomme ich Extensions? 1 Wie füge ich eine fertige Extension in mein Singles ein? 2 Welche Änderungen sind möglich? 3 Zur Benennung von Objekten 4 Wie verwende ich ein Template für eine eigene Extension? 5 Wie erstelle ich ein eigenes Outfit für die Charaktere? 6 Wie erstelle ich eine neue Haarfarbe? 7 Wie erstelle ich eine neue Hautfarbe? 8 Wie füge ich neue Augen hinzu? 9 Wie ändere ich ein Möbelstück? 10 Allgemeine Struktur einer Extension. 10.1 Extension mit einem Object. 10.2 Extension mit mehreren Objecten. 10.3 Die Charaktere --------------- 0 Woher bekomme ich Extensions? Aus dem Internet. Entweder auf der offiziellen Singles Webseite www.singles-the-game.com oder auf einer der vielen Fan-Seiten für Singles. --------------- 1 Wie füge ich eine fertige Extension in mein Singles ein? Du hast dir eine Extension für Singles aus dem Internet runtergeladen und möchtest sie nun in Singles verwenden. Singles Extensions haben die Datei-Erweiterung ".sxt". Zunächst brauchst du wenigstens die Version 1.4 von Singles. Diese bekommst du von www.singles-the-game.com/german/girls/downloads_girls.shtml Dann einfach die Extension, wie sie aus dem Internet runtergeladen wurde, in das Unterverzeichnis Extensions des Single Programverzeichnisses kopieren. (normalerweise c:\programme\singles\extensions\) Singles starten... Voilà, die Extension kann benutzt werden. --------------- 2 Welche Änderungen sind möglich? Theoretisch ist in Singles fast alles änderbar, praktisch wird es allerdings häufig an den vielen komplizierten Schritten scheitern, die zur Erstellung von 3D-Objekten und Animationen nötig sind. Wir haben ein paar Beispiel-Extensions gemacht, die dir als Startpunkt zur Erstellung eigener Erweiterungen dienen können. Die Objekte der Beispiele sind extra so texturiert, dass sie leicht in einem Graphikprogramm wie z.B. Photoshop nachbearbeitet werden können. --------------- 3 Zur Benennung von Objekten Alle Objekte eines Types, Texturen, Meshes usw. müssen eindeutige Namen haben. Das heisst es kann nur eine Textur mit dem Namen X geben. Andere Objekttypen dürfen jedoch den selben Namen tragen. Also ein Mesh dürfte ebenso wie die Textur X heissen. Gibt es mehrere Objekte vom gleichen Typ mit dem selben Namen wird das neueste von ihnen verwendet. Erlaubt sind nur Buchstaben, der Unterstrich und Zahlen, wenn sie nicht das erste Zeichen bilden. Also: Bei der Benennung von Dingen sehr kreativ sein! Eine Möglichkeit ist es immer den eigenen Namen dem Gegenstand vorran zu stellen. Oder auch den Namen der Extension. Also sowas wie "Stephan_VillaKunterbunt_BluemchenTapete1" --------------- 4 Wie verwende ich ein Template für eine eigene Extension? Suche dir ein für deine Änderung das passendes Template aus. Erstelle im Singles\Extensions Verzeichnis einen Neuen Ordner, der deine Extension enthalten soll. Entpacke die Template Datei, z.B. TemplateHaircolor.sxt in das neue Verzeichnis (umbenennen in TemplateHaircolor.zip und dann entpacken). Bis auf Texturen kannst du alle Dateien in den Templates mit einem Texteditor (z.B. notepad.exe) öffnen und bearbeiten. Die Texturen sind mit einem Graphikprogramm wie Paintshop zu öffnen. Passe die Extension entsprechend deinen Wünsche an. Singles lädt die Extensions auch wenn sie einfach in einem Verzeichnis unterhalb von Singles\Extensions liegen. Zum Experimentieren brauchst du also nicht jedesmal die Datei wieder zusammen zu packen, sondern kannst direkt Singles starten und dir deine Extension anschauen. In jeder Beispiel-Extension wirst du eine Datei info.dat finden. Hier trägst du die Namen der Gegenstände ein, wie sie im Spiel erscheinen sollen. Es gibt für jede Sprache einen eigenen Abschnitt. Wenn du deine Extension international verbreiten willst versuche die anderen Sprachen auch auszufüllen. Lösche einfach vollständig die Einträge aller Sprachen, die du nicht beherrschst. Benutzt jemand deine Extension mit der Singles Version einer Sprache, die du nicht eingegeben hast, dann bekommt er automatisch den englischen Text angezeigt. Daher solltest du immer wenigstens auch einen englischen Namen finden. Um die Extension zu verbreiten packe das Verzeichnis wieder zu einem Zip-Archiv zusammen. Benenne die Endung um in ".sxt" und ab damit ins Internet. --------------- 5 Wie erstelle ich ein eigenes Outfit für die Charaktere? Orientiere dich an TemplateOutfit.sxt Nehmen wir an du willst ein Blümchenkleid erstellen. Dein Verzeichniss könnte dann z.B. "Singles\Extensions\FlowerPowerDress" heissen. Entpacke die Template Datei in dein Verzeichnis. Im Verzeichnis Singles\Extensions\FlowerPowerDress\Sources findest du dann die Datei SummerdressTemplate.tif. Hier sind die Texturen des Beispiel Kleides abgelegt. Auf einer Bildebene findest du das Mapping der Textur. Daran siehst du ungefähr wie die Textur auf das 3D-Modell abgebildet wird. Wenn du eine hübsche Textur fertig hast exportiere sie als FlowerPowerDress.png nach Singles\Extensions\FlowerPowerDress\Texture. Verfahre entsprechend mit der Textur für die Schuhe. Des weiteren müssen die Meshes umbenannt und auf die neuen Texturen angepasst werden. Die Meshes befinden sich im Ordner Singles\Extensions\FlowerPowerDress\Character. elaineSummerdressTemplate.ams -> FlowerPowerDress.ams elaineSummerdressShoesTemplate.ams -> FlowerPowerDressShoes.ams Im Mesh-File müssen nun noch die Materialien ausgetauscht werden. Unter "material" wird in FlowerPowerDress.ams "texture = SummerDressTemplate" nach "texture = FlowerPowerDress" und in FlowerPowerDressShoes.ams "texture = SummerdressShoesTemplate" nach "texture = FlowerPowerDressShoes" umbenannt. Nun musst du noch dafür sorgen, dass das Kleid auch angezogen werden kann. Öffne dazu die Datei Singles\Extensions\FlowerPowerDress\GameObject\charDesc.acd. Suche alle Vorkommnisse von elaineSummerdress* und ändere sie in flowerPowerDress*. Alle anderen Einträge können gelöscht werden. Eine Zeile, die mit "#" anfängt ist eine Kommentarzeile. die Datei besteht also zum Schluss aus: CharacterDescription object { #welche Körperteile sollen unter den Kleidern ausgeschaltet werden switchOffMaterials { flowerPowerDress { SkinHipMat = 1 } flowerPowerDressShoes { SkinFeetMat = 0.5 } } outfitDescriptions { flowerPowerDressOutfit { #ein Flower Power Dress outfit besteht aus Kleid und Schuhen. name = flowerPowerDressOutfit meshes { 0 { 0 = flowerPowerDress #wenn zum FlowerPowerDress Barfuss gegangen werden soll #kann einfach der nächste Eintrag weggelassen werden. 1 = flowerPowerDressShoes } } #Zu jedem Outfit wird über die Variable dressCode angegeben wie #nackt sich der Charakter fühlt, wenn er es trägt. #dressCode = NAKED, UNDERWEAR, HOME, STREET #Das Kleid kann auch auf der Strasse getragen werden. dressCode = STREET } } outfits { #Es folgt die Beschreibung, bei welchem Charakter welche Outfits #in der Komode erscheinen sollen. # ELAINE 0 { # SEDUCTRESS 1 { Outfit 0 { id = TEMPLATE outfitDescriptionID = flowerPowerDressOutfit } } ... # ACTIVIST 6 { Outfit 0 { id = TEMPLATE outfitDescriptionID = flowerPowerDressOutfit } } # NURSE 7 { Outfit 0 { id = TEMPLATE outfitDescriptionID = flowerPowerDressOutfit } } } } } Pacifica kann das neue Kleid leider nicht tragen. Da sie grösser ist braucht sie andere Kleidung. Siehe PacificaSummerDressTemplate. Das Kleid erscheint bei allen Charakteren, die einen Eintrag dafür haben automatisch in der Kommode. Natürlich kannst du auch alle anderen Kleidungsstücke, die im Spiel vorkommen verändern. Dazu musst du die Texturen aus dem Ordner Singles\Textures raussuchen, die Meshes und ihre Beleuchtung (.ams und die .rdd Dateien) aus Character und Character\col und die Beschreibung des Keidungsstücks aus Singles\GameLogic\charDesc.acd. --------------- 6 Wie erstelle ich eine neue Haarfarbe? Orientiere dich an TemplateHaircolor.sxt Nehmen wir an du willst Rabenschwarze Haare für Linda erstellen. Dein Verzeichniss könnte dann z.B. "Singles\Extensions\BlackHairLinda" heissen. Entpacke TemplateHaircolor.sxt in das neue Verzeichnis Öffne die Datei Singles\Extensions\BlackHairLinda\GameLogic\charDesc.acd mit einem Texteditor (notepad.exe). Lösche alle Einträge außer dem für Linda (#FREE_SPIRIT) CharacterDescription object { hairStyles { # FREE_SPIRIT 3 { HairStyle 0 { id = name = lindaHaircolor_black meshDescriptions { hair { mesh = elaineFreeSpiritHair materialDescriptions { HairLongBlonde { texture = HairLongBlondeGrey diffuse = 0.01 0.03 0.1 specular = 0.5 0.52 0.7 } } } } } } } } Ein Haarschopf wird durch folgende Parameter bestimmt: - mesh, also die 3D-Daten der Frisur mesh = x gibt den Namen des zu verwendene Meshes an. Nicht alle Perücken passen allen Charakteren, da diese verschiedene Hinterköpfe haben. - texture, mit einer Färbung und der Feinstruktur der Haare. texture = y gibt den Namen der Textur an. Schau im Verzeichnis Singles\Extensions\BlackHairLinda\ nach. Dort findest du Texturen, die du auch verändern kannst. Für rabenschwarze Haare verwenden wir eine graue Textur, die keinen Farbton beifügt. texture = HairLongBlondeGrey - diffuse gibt die Färbung der Haare an. Die Werte sind Rot Grün Blau Alpha, wobei Alpha weg gelassen werden kann und die Werte zwischen 0 und 1 liegen sollten. Für Schwarz werden die RGB-Werte auf fast 0 gesetzt. diffuse = 0.01 0.03 0.1 - specular gibt die Farbe von Glanzlichtern an. Die Werte sind genau wie die diffuse-Werte aufgebaut. Damit das Haar rabenhaft blau schimmert wird der specular Wert auf bläulich gesetzt. specular = 0.5 0.52 0.7 Der specular Eintrag ist optional. In der Datei Singles\Extensions\BlackHairLinda\info.dat trägst du den Namen der Haarfarbe ein, wie er im Dialog im Spiel erscheinen soll. ... German { lindaHaircolor_black = Rabenschwarz } English { lindaHaircolor_black = Caracinous } ... Beim nächsten Singles Start kannst du Linda am Waschbecken ihre Haare rabenschwarz färben. Um die Extension zu verbreiten packe das Verzeichnis wieder zu einem Zip-Archiv zusammen. Benenne die Endung um in ".sxt" und fertig ist deine neue Tönung. --------------- 7 Wie erstelle ich eine neue Hautfarbe? In der Extension Skincolor.sxt findest du im Verzeichnis GameLogic die Datei charDesc.acd. Öffne sie mit einem Texteditor und füge nach dem Schema der vorhandenen Hautfarben neue hinzu. Die 3D-Daten der verschiedenen Figuren haben unterschiedliche Materialien für ihre diversen Hautpartien. Daher orientiere dich einfach an den vorhandenen Farben. Also eine neue Farbe für Natasha (SEDUCTRESS) sähe z.B. so aus: SkinColor 3 { id = name = skincolor_green materialDescriptions { body { featureFacefemme { texture = featureFacefemme diffuse = 0.4 1 0.4 1 } detailSkinFemme { texture = detailSkinFemme diffuse = 0.4 1 0.4 1 } featureBreast { texture = featureBreast diffuse = 0.4 1 0.4 1 } } eyeShadow { Eyes_Shadow { texture = Eyes_Shadow diffuse = 0.4 1 0.4 1 } } } } Die Werte vor der geschweiften Klammer (featureFacefemme) sind jeweils die Texturen, die geändert werden sollen. Der Wert nach texture gibt die neue Textur an (texture = featureFacefemme). Die Färbung in RGBA Werten, die die Textur annehmen soll, sind in den diffuse Werten angegeben (diffuse = 0.4 1 0.4 1). Die Haut-Texturen kannst du dir aus dem Verzeichniss Singles\Texture raussuchen und unter neuem Namen in das Verzeichnis der Extension kopieren. Dann muss die neue Hautfarbe noch benannt werden. In der Datei info.dat trägst du den Namen der Hautfarbe ein, wie er im Dialog im Spiel erscheinen soll. ... German { skincolor_green = Grün } English { skincolor_green = Green } ... Beim nächsten Singles Start kannst du dir die kranke grüne Haut am Waschbecken aussuchen. Um die Extension zu verbreiten packe das Verzeichnis wieder zu einem Zip-Archiv zusammen. Benenne die Endung um in ".sxt" und fertig ist deine Extension. Die anderen Hautfarben, die schon in der Extension waren kannst du wenn du möchtest noch rauslöschen. --------------- 9 Wie füge ich neue Augen hinzu? Orientiere dich an TemplateEyecolor.sxt Nehmen wir an du willst Rehaugen erstellen. Das Verzeichniss mit der Extension könnte dann z.B. "Singles\Extensions\BambyEyes" heissen. Entpacke TemplateEyecolor.sxt in das neue Verzeichnis. Im Ordner "Singles\Extensions\BambyEyes\Texture" liegen bereits eyeHeart.png und eyeReptile.png. Eine kannst du löschen und die andere in eyeBamby.png umbenennen. Mit einem Malprogramm öffnest du eyeBamby.png und veränderst sie nach Wunsch (im Ordner Singles\Texture). (schau im Ordner Singles\Texture nach Png-Files, die "Eye" im Namen enthalten um weitere Vorbilder für deine Augen zu haben) (Tip: Normalerweise sieht es nicht schön aus, wenn die Iris größer gemalt wird als in den Texturen vorgegeben) Öffne die Datei Singles\Extensions\BambyEyes\GameLogic\charDesc.acd. Für jeden Charakter, der die neuen Augen benutzen können soll, muss ein Eintrag für die neue Farbe existieren. Also z.B.: ... # SEDUCTRESS 1 { EyeColor 0 { id = bambyEyes name = eyecolor_bamby textureSwaps { eyeFemme = eyeBamby } } } ... In der Datei Singles\Extensions\BambyEyes\info.dat trägst du den Namen der Augenfarbe ein, wie er im Dialog im Spiel erscheinen soll. ... German { eyecolor_bamby = Rehaugen } English { eyecolor_bamby = Bamby Eyes } ... Beim nächsten Singles Start kannst du dir die neuen Augen am Waschbecken aussuchen. Um die Extension zu verbreiten packe das Verzeichnis wieder zu einem Zip-Archiv zusammen. Benenne die Endung um in ".sxt" und fertig ist deine erste Augenfarbenextension. --------------- 10 Wie ändere ich ein Möbelstück? Orientiere dich an TemplateSofa.sxt. Erstelle zunächst einen Ordner mit dem Namen deiner Extension im Singles/Extensions Verzeichnis. Nun müssen die Dateien, die zusammen das zu ändernde Möbel ausmachen in dieses Verzeichnis übertragen werden. Ein Gegenstand braucht immer verschiedene Dateien. In dem Ordner Singles/TextureGui kannst du dir die Icons der Gegenstände, wie sie im Baumenu auftauchen anschauen. Damit siehst du wie die Dateien zu dem Gegenstand, den du ändern willst heissen. Das ist der Name des Bildes, ohne "MenuIcon" also beim Sofa war das Bild MenuIconSofaOldSchool.png und entsprechend der Name der Resource SofaOldSchool Nun gehst du alle Singles Unterverzeichnisse durch und durchsuchst jedes Verzeichnis nach einer Datei mit dem Namen des gesuchten Gegenstandes. Also hier SofaOldSchool.* Wird eine solche Datei gefunden, so wird das entsprechende Verzeichnis im Ordner der Extension angelegt. Z.B. liegt die Datei SofaOldschool.ago im Verzeichnis Singles\GameObject. Also wird Singles\Extensions\SofaRed\GameObject angelegt. Dann muss die Datei "SofaOldschool.ago" dorthin kopiert werden. Nun wird sie umbenannt in "RedSofa.ago". Das gleiche passiert mit allen Dateien, die SofaOldSchool enthalten. Meshes können in .ams und .wms Format vorliegen. Hier sollte nur die .ams Datei kopiert werden. In der Datei "RedSofa.ago" können nun die Eigenschaften des Objekts eingestellt werden. Beim Sofa ist das neben dem Preis die Auswirkung auf die Wohnung und was Passiert wenn man auf ihm sitzt und ein Nickerchen macht. Außerdem muss hier der Eintrag für das Mesh angepasst werden. meshResourceNameArray { 0 = SofaRed } Im Mesh Ordner gibt es die Datei RedSofa.ams, öffne diese in einem Texteditor (notepad.exe) und schaue dir den Abschnitt Material an. Dort stehen unter texture die Texturen, die für das Objekt verwendet werden. Hier sind das woodDark, fabricWildFlowers und fabricCorduroy. Im Verzeichnis Singles\Texture sind woodDark.png, fabricWildFlowers.png und fabricCorduroy.png zu finden. Die Füße des Sofas sollen so bleiben wie sie sind, nur die Texturen fabricWildFlowers und fabricCorduroy werden in das Verzeichnis Singles\Extensions\SofaRed\Texture kopiert. Hier werden sie nun umbenannt, da jede Resource in Singles einen eindeutigen Namen tragen muss. Aus fabricWildFlowers.png wird fabricLeopard.png und aus fabricCorduroy.png fabricRedSofa.png. Diese beiden Texturen werden nun noch in RedSofa.ams an Stelle der alten Werte eingetragen. Mit einem Malprogramm können sie nun beliebig verändert werden. Jede Extension muss im Ordner Script die Datei init.lua enthalten. In dieser wird über den Befehl addGameObject("StandardGO", "SofaRed", BUY_LIVINGROOM); das neue Sofa im Wohnzimmer-Baumenü eingefügt. Es fehlt noch die Datei Singles\Extensions\SofaRed\info.dat. Dort trägst du den Namen des Sofas ein, wie er im Baumenu im Spiel erscheinen soll. ... German { SofaRed = Rotes Sofa } English { SofaRed = Bamby Eyes } ... Wenn du deine Extension international verbreiten willst versuche die anderen Sprachen auch auszufüllen. Lösche einfach vollständig die Einträge aller Sprachen, die du nicht beherschst. Benutzt jemand deine Extension mit der Singles Version einer Sprache, die du nicht eingegeben hast, dann bekommt er automatisch den englischen Text angezeigt. Beim nächsten Singles Start kannst du dir die neuen Möbel im Baumenü aussuchen. Um die Extension zu verbreiten packe das Verzeichnis wieder zu einem Zip-Archiv zusammen. Benenne die Endung um in ".sxt" und fertig ist deine erste Möbelextension. --------------- 11 Allgemeine Struktur einer Extension. Singles Extension Dateien sind eigendlich Zip-Files, nur mit der Endung ".sxt". Benenne die Extension nach ".zip" um. BasketFruits.sxt -> BasketFruits.zip Dann kann sie mit einem beliebigen Zip-Betrachter (z.B. www.winzip.com) geöffnet werden. Eine Extension kann entweder ein einziges Object enthalten oder aus mehreren zusammengesetzt sein 11.1 Extension mit einem Object. Die Datei besteht aus Verzeichnissen für alle Daten, die zu dem Objekt gehören: in BasketFruits.sxt wäre das: Animation/ GameLogic/ GameObject/ GuiTexture/ Mesh/ Script/ StateMachine/ Texture/ Walkability/ info.dat Grundsätzlich können alle Daten, die sich in einem der Unterordner der Singles Ordner befinden auch in einem Unterordner der Extension erscheinen. Sie sollten allerdings dann einen neuen eindeutigen Namen bekommen. In der Datei info.dat im Root-Verzeichnis der Extension stehen die verschiedenen Strings (Worte), die für den Gegenstand im Spiel gebraucht werden. Translation { English { go_BasketFruits_name = Fruit basket go_BasketFruits_desc = pm_eatFruit = Eat a fruit } German { go_BasketFruits_name = Obstkorb go_BasketFruits_desc = pm_eatFruit = Obst essen } ... } go_BasketFruits_name: Der Name, der im Baumenu angezeigt wird go_BasketFruits_desc: Die Beschreibung, die im Tooltip erscheint pm_eatFruit: Der Name einer Aktion, die mit dem Korb ausgeführt werden kann. Im Verzeichnis Script liegt die Datei init.lua, ein Lua Script (www.lua.org), das beim Einlesen der Extension ausgeführt wird und dafür sorgt, dass die Extension im Spiel erscheint. Dazu gibt es den Befehl: addGameObject(, , ) ObjectName: Typ des Objekts (StandardGO, WallGO, DoorGO, WindowGO...) ResourceName: Name der .ago-Datei im GameObject-Ordner MenuID: ID des Menus (BUY_LIVINGROOM, BUY_KITCHEN, BUY_LIGHTING, BUY_WORKROOM, BUY_SLEEPINGROOM, BUY_BATHROOM, BUY_DECORATION,BUY_BUILD, BUY_WALLPAPERS, BUY_FLOORS, BUY_GARDEN) Aber auch beliebige andere Lua-Scripte können an dieser Stelle eingefügt werden! Jede Extension kann eine Datei game.cfg im Unterverzeichnis Config enthalten. In dieser können etliche Parameter des Spiels festgelegt werden. Schaut euch dazu die Datei game.cfg im Singles\Config Ordner an. Wichtig sind hier vor allem die Einträge ExcludeFromShadow und IncludeInRadiosity. Objekte, die keinen konstanten Schatten werfen sollen, wie ihn die Möbel und Wände werfen, weil sie z.B. beweglich sind müssen in diesen Sektionen eingetragen werden. Beispiele aus der original game.cfg: ExcludeFromShadow { ... crackerBox = 1 tablet = 1 glass = 1 gift = 1 knife = 1 eggs = 1 fork = 1 ... } IncludeInRadiosity { ... crackerBox = 1 tablet = 1 glass = 1 gift = 1 knife = 1 eggs = 1 fork = 1 ... } 11.2 Extension mit mehreren Objecten. Enthält eine Extension mehrere Objekte, so steht jedes Objekt in einem eigenen Verzeichnis, das jeweils genau so aufgebaut ist wie eine Extension mit nur einem Objekt. Die Datei pack.dat enthält die informationen über die gesammte Extension. Ihre eindeutige ID und ihren Namen in verschiedenen Sprachen. Sie liegt im Hauptverzeichnis der Extension. 9.3 Die Charaktere In den Files, die in den Extensions unter GameLogic stehen sind die Charaktere nicht so benannt wie sie im Spiel heissen. Jede Spielfigur hat eine Bezeichnung, die ihrem Stereotyp entspricht. Das liegt daran, dass sie in verschiedenen Sprachen unterschiedliche Namen haben können. Einige dieser Charaktere kommen nicht im Spiel vor, bei ihnen wurde vor Release entschieden sie rauszunehmen. Hier die Zuordnungen: BOSS = Helen * SEDUCTRESS = Natasha, Paris SPUNKY_KID = Lisa, Nicci FREE_SPIRIT = Linda, Rachel INNOCENT_GIRL = Tom, James SCIENTIST = Ellen, Amanda ACTIVIST = Red, Eden, Andi NURSE = Miriam * CHIEF = Mark, Ron BAD_BOY = Bad Boy Bob, DJ Morten, J.D. BEST_FRIEND = Berny, Kyle, Alex CHARMER = Mike, Enrique LOST_SOUL = Nicolas, Eddie PROFESSOR = Deryl, Bod, Bert SWASHBUCKLER = Jack * WARRIOR = Pacifica, Lizzie, Shannon * kommt nicht im Spiel vor