Hoi,
Update:
Eine weiterentwickelte Version der gs_tool von eis_os findet sich hier: http://www.bytetransfer.de/projects/cim/tools/
bin jetzt soweit dass ich das datei format von CiM so halbwegs verstehe* und neue Objekte erstellen kann. Ist alles noch sehr work-in-progress, relativ umständlich und fehleranfällig.
aber da ich in den nächsten Wochen vorraussichtlich nicht dazu kommen werde daran weiter zu basteln, schmeiss ich das einfach so halbfertig schon unters Volk
*) es fehlen allerdings noch so einige Sachen - wer also spass daran hat im hexeditor rumzustöbern ist herzlich eingeladen
ich hab versucht meine bisherigen erkenntnisse in src\gs.h zu dokumentieren
mutige können auch versuchen dem restlichen Quellcode zu folgen, der ist allerdings ... uh ... nicht ganz so hübsch :p
Kurze anleitung:
Anmerkungen:
- als übergangsdateiformat hab ich Wavefronts OBJ Format benutzt. Getestet ausschließlich mit Blender.
- ggw nur eine Texture pro Objekt unterstützt(und auch nur die Textur - sonstige Material eigenschaften werden ignoriert)
- als Textureformat scheint nur DDS zu funktionieren
- etwas mehr Zeit und die Bereitschaft etwas rumprobieren zu müssen mitbringen
1) gs_tools.zip runterladen(siehe Anhang) und entpacken
2) Modell von Blender nach OBJ exportieren( Optionen siehe Bild)
man erhält dann eine .obj und eine .mtl Datei
ShadowRock_20120909_0010.jpg
3) mittels gsobj_import.exe ins CiM Format konvertieren.
man erhält dann zwei dateien: output.object und output.material
ShadowRock_20120909_0006.jpg
4) im addon ordner einen neuen Ordner erstellen(als bsp hier 'tvtower') und darin zwei unterordner anlegen: 'scripts' und 'objects'
output.object nach addons\tvtower\objects kopieren (in einen sinnvollen Namen umbenennen: hier tvtower.object)
5) output.material nach addons\tvtower\objects kopieren und umbenennen:
! Der Name der material datei muss dem Name entsprechen den Blender beim exportieren dem Material gegeben hat
- Um den herauszufinden die bei Schritt 2 erstellte mtl datei in einem texteditor öffnen - die Zeile 'newmtl xxxxxx' gibt den Namen des Materials an(Dateiname also: xxxxx.material)
(wer mag kann diesen auch vor schritt 3) ändern, muss dann allerdings die 'usemtl' Anweisungen in der obj Datei entsprechend anpassen)
nicht vergessen die textur ebenfalls nach addons\tvtower\objects kopieren
6) in addons\tvtower\objects eine .script datei anlegen mit dem gleichen Namen wie die .object Datei (hier also tvtower.script)
in diese kommt dann
this.width = 5;
this.height = 45;
this.length = 5;
this.flags = GRID_ITEM_COVER | GRID_ITEM_LOCK_GROUND | GRID_ITEM_ENABLE_BASE;
this.diagonals = 0x0000;
this.type = GRID_ITEM_BUILDING;
this.displayName = "TVTower";
$price = 1234500;
Alles anzeigen
$displayName und $price können beliebig angepasst werden
Größenangaben(width, height, length) errechnen scheint mit folgender Faustformel zu klappen:
man suche sich die Dimensionsangaben des Modells in Blender und dividiere durch 3 (aufrunden)
ShadowRock_20120909_0007.jpg
( in dieser script datei können auch noch diverse andere Sachen angepasst werden. Für inspiration einfach bei den mitgelieferten Objekten stöbern )
7) in addons\tvtower\scripts eine datei 'environment.script' anlegen
// get addon path
$BasePath = extractFilePath(extractFileDir(this.scriptFilename));
$ObjectPath = $BasePath + "objects/";
function loadBuilding($category, $name, $model)
{
MAIN.$grid.loadGridObject($name, $model+".object");
if (defined MAIN.$level.$buildings[$category]) {
MAIN.$level.$buildings[$category][] = $name;
} else {
MAIN.$level.$buildings[$category] = [$name];
}
}
loadBuilding("landmarks", "tvtower", $ObjectPath+"tvtower"); // lädt objects/tvtower.object
Alles anzeigen
8.) spiel sparten und hoffen das alles klappt
ShadowRock_20120909_0009.jpg
wenn es nicht funktioniert:
- erster anlaufspunkt ist log_metro.txt
- .mtl/.obj dateien überprüfen ob alle namen/Dateinamen stimmen
- mit gs_dump.exe die erstellten .object/.material dateien inspizierenn ob alle Namen/Dateinamen korrekt sind
auf ein fröhlichen basteln
Erfahrungsberichte sind ausdrücklich erwünscht.