Beiträge von Jan

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


    Zitat von Veruslux

    wenn schon die Zeit, in TF Rasend schnell vergeht, da fährt ein Zug in einer Woche grade mal aus dem Bahnhof, was so schon nix mit Simulation zu tun hat...


    Hmm, ich glaube manche haben den Maßstab nicht richtig verstanden. Die Zeit in TF ist Echtzeit. Eine Minute ist eine Minute. Der Zug braucht keine Woche, um aus dem Bahnhof zu fahren und die Fahrgäste sind nicht Monate unterwegs. Es ist alles Realtime. Einzig der Kalender läuft erheblich schneller und das muß auch so sein. Liefe der Kalender auch in Echtzeit, würdest Du bei 4x Geschwindigkeit 5 Jahre ununterbrochen spielen müssen, um vom Jahr 1850 ins Jahr 1870 zu kommen. Oder man müßte Knöpfe einbauen die die Zeit 100x beschleunigen statt 4x, aber dann würde deine CPU schmelzen, mal abgesehen davon, daß Du nichts mehr auf der Karte erkennen könntest, weil sich alles mit Lichtgeschwindigkeit bewegen würde.


    Der beschleunigte Kalender macht die Simulation überhaupt erst möglich - ohne den gäbe es keine Simulation.

    Zitat von Desertbrand

    Was würde dagegen sprechen, die Map an einer Seite zu halbieren und dann an das andere Ende anschließe so das eine Map mit der Kantenlänge 8 km x 32 km entsteht. Spinne ich mal einfach weiter, wie wäre es, wenn wir die Map an der kurzen Seite noch einmal halbieren und ans Ende anbringen, wir hätten dann eine Kantenlänge von 4 km x 64 km. High Speed Enthusiasten würden schreiend durch die Gegend laufen. ein TGV mit der Länge von 320 Meter würde die Entgeschwindigkeit erreichen...


    ...nur hätte der TGV mit Endgeschwindigkeit keine Passagiere mehr, weil die 20-min-Regel nicht mehr eingehalten würde ;-)
    Denk dran, Du bekommst nur Fahrgäste, wenn sie ihr Endziel in mindestens 20 min erreichen können.


    Eigentlich ist TF ein Nahverkehrsspiel. Der Maßstab und die 20-min-Regel verbieten im Grunde genommen Fernverkehr. Ich kenne zumindest keine Fernbahnlinie in Deutschland mit einem Takt von 4 min. Wenn ich von Berlin nach Rostock fahren will - und Rostock ist verdammt nah dran, verglichen mit Stuttgart oder München - muß ich 3 Stunden Fahrzeit einplanen. Und als Berliner brauch ich jeden Morgen eine gute Stunde, um von meiner Wohnung ins Büro zu kommen und verlasse dabei nichtmal die Stadt. Nach der 20-min-Regel müßte ich mir einen neuen Job suchen, der nicht weiter als einen Stadtbezirk von meiner Wohnung entfernt ist - oder ich würde mein Auto zur Arbeit benutzen. Aber das ist nicht wirklich realistisch.


    Bei meiner TF-Spielweise hab ich mich auf Nahverkehr eingestellt. Ich betreibe eigentlich nur S-Bahnen und Regionalzüge. Natürlich hab ich auch immer ein bis zwei Fernverkehrslinien, aber eigentlich nur deshalb, um etwas Abwechslung zu kriegen. Sachlich betrachtet sind meine Fernbahnlinien auch nur S-Bahn-Linien, die ich mit schnellen Loks und langen Reisezugwagen betreibe statt mit S-Bahnen.

    Du hast es falsch erlesen - eigentlich hast Du das ganze Thema nicht verstanden.
    Zum einen ist das ein Konfigurationswert, den Du als User angibst. Die Idee war, daß Du dort jeden beliebigen Wert angeben kannst den Du möchtest und die Textur dann in der Größe ausgegeben wird. Aber da steht auch eindeutig "Dieses Feature ist im Augenblick deaktiviert" und ich erkläre sogar ausführlich warum:

    Zitat von Jan

    Je nach Größe der Matrix kann das resultierende File extrem groß werden! Für meine Triebwagenhalle hab ich eine Textur erzeugt, die über 20.000 Pixel breit war (360x170 Ziegelsteine). Ich hab erst versucht, das File direkt im Programm runterzuskalieren (daher der Config-Value 'TextureWidth'), aber es gab haufenweise OutOfMemoryExceptions, dahr ist der Code auskommentiert. Ich hab dann die generierte 20.000-Pixel-Datei mit Irfanview runteskaliert auf meine 2048 und das ging auch.


    Und drittens, wir generieren hier keine fertigen Texturen, sondern Muster für Deine Texturen. Wenn Du Dir ein Backsteinmuster aus dem Netz runterlädtst, mußt Du es ja auch noch anpassen, oder? Mit diesem Tool ist es nichts anderes.

    Hmm... Naja wir können eine Preview natürlich machen, das ist kein Thema und wenn Du das möchtest, bekommst Du es von mir. Aber mal ganz sachlich betrachtet ergibt es keinen Sinn. Um das Preview zu erzeugen müssen wir es trotzdem speichern - dann halt im Temp-Folder. Und wenn Du dann "save" klickst, generieren wir die ganze Textur nochmal von vorne (also doppelt), diesmal in den eigentlichen Output-Folder. Mir erschließt sich der Sinn nicht so ganz. Dann kann ich es auch gleich in den Outputfolder rendern und bin verschwende weniger Zeit. Und je nach Größe der Matrix und Kacheln kann es durchaus ne Weile dauern, bis die Textur gerendert ist, vielleicht bis zu ca. 30 Sekunden oder so. Und: die Textur kann mitunter gigantisch groß werden und ich spreche hier von mehreren hundert MB (20.000 Pixel breit - ja zwanzigtausend!) =O Ich kann ja mal ein paar Benchmarks machen...

    Zitat von RobbiZ


    Vielleicht mache ich was falsch, aber ich habe massenhaft Einsatzgebiete für kleine, billige Züge. Einige Linien ließen sich anders nicht wirtschaftlich betreiben.


    Echt jetzt? Ich finde auch keinen Sinn bei billigen Zügen mit geringer Kapazität. Eine kleine Linie bedeutet für mich kurze Züge, langer Takt. Aber dann fährt keiner und die Linie ist im Minus. Also erhöhe ich den Takt und schwupps stapeln sich die Leute auf den Bahnhöfen und ich muß große Züge einsetzen und scheffle Millionen. Nebenbahnen gibts bei mir nie. Naja am Anfang vielleicht. Wenn ich etablierte Linien habe mit langen Zügen und ich eröffne eine neue Strecke, dann ist das zunächst eine Nebenstrecke, aber die wird blitzschnell zu einer Goldmine und bekommt dann auch große Züge. Es sind immer alle Linien überfüllt bei mir.


    Zitat von Mereel

    Mehr Waldgebiet wär aber mal was feines.


    Ja absolut! Die Karte ist zu leer. Und gerade bei Holzbetrieben sieht es sehr schräg aus, wenn dort massenhaft Holz für meine Industrien produziert wird, aber kein Baum weit und breit =O

    Geil! Sehr geil! Preview und Save brauchen wir aber nicht zu trennen. Wenn Du die Methode processor.Tile(); aufrufst, wird direkt in die Output-Location geschrieben. Der Previewbereich ist also entweder nutzlos - oder er zeigt eben nur an, was gerade gesaved wurde, was ich natürlich cool fände. Falls Dir das nicht gefällt, könnte man im Preview vielleicht die einzelnen Tile-Images anzeigen, die im Inputfolder liegen, aber das ist zusätzliche Arbeit, die vielleicht nicht nötig ist.


    Wenn Du irgendwas von mir brauchst oder Änderungswünsche für die API hast, nur her damit. Ich kann alles ändern wie Du es gern möchtest.

    GOTTVERDAMMTE Brückenpfeilerkollision! Ich hab gerade eine Stunde lang versucht eine eingleisige Ausfädelung zweigleisig zu machen. Ich hatte eine zweigleisige Strecke mit zweigleisigem Bahnhof. Dort teilen sich zwei Linien, indem das eine Gleis ausgefädelt und über die beiden Geradeausgleise geführt wird, damit die Linie abbiegen kann. Auf der anderen Seite reicht ja eine Weiche. Nun hab ich einen viergleisigen Bahnhof gebaut damit die Linien etwas mehr Luft haben und will nun von vier Gleisen zwei ausfädeln. Aber ich krieg keine zweigleisige Überführungsbrücke über die beiden Geradeausgleise. Am Ende hab ich alles abgerissen und es von vorn versucht, aber selbst dann krieg ich es nicht hin, eine zweite Brücke neben die erste zu setzen, weil ich immer nur Brückenpfeilerkollisionen kriege. Dabei sieht alles gut aus!? Die Pfeiler stehen schön verteilt neben den Schienen und alles sollte gehen, aber er läßt mich nicht die zweite Brücke dranbeppen. Das kann doch nicht so schwer sein? Für mich ist dieses Thema das wichtigste. Die sollen einfach diese Kollisionen in den Griff kriegen, alles andere ist Nebensache - für mich.

    Es gibt ein neues Update: BR 270 / BR 485 (Berliner S-Bahn)


    Ich hab zwei weitere Generationen dem Spiel hinzugefügt:
    - Von 2002 bis 2003 gibt es jetzt Versuchszug mit einteiliger Frontscheibe, der zur Wiedereröffnung der Ringbahn umgebaut und in Traditionsfarben lackiert wurde.
    - Ab 2011 gibt es noch eine weiterentwickelte Variante der Traditionslackierung, die keine Stange mehr vor der Frontscheibe hat, VBB-Aufkleber, Dienstabteilschild und zusätzliches Fahrradlogo auf der Seitenscheibe des Fahrradabteils.


    Ich hab auch die Farben der Traditionslackierung angepaßt. Leider sieht es auf jedem Monitor anders aus, da ja kaum einer einen farbgeeichten Monitor besitzt. Bei mir im Spiel find ich es okay, hier auf dem Notebook sehen die Screenshots schon etwas schräg aus. Ich finde es jetzt besser, als in der Vorgängerversion. Die Farben von @Revyn112s 480 hab ich auch ausprobiert - die haben leider nicht funktioniert. Sagt mir doch, was Ihr davon haltet - ich probiere auch gern andere RGB-Werte aus, wenn Ihr Vorschläge habt.


    Außerdem ist der Musterzug jetzt Teil dieses Mods. Dies verbessert die Performance, wenn beide Züge gleichzeitig eingesetzt werden.


    Ihr solltet unbedingt die beiden alten Mods deinstallieren, bevor Ihr diesen hier drauftut. Eure Savegames müßten weiterhin funktionieren.

    Hmm ja, also ich hab oft so Millimeter-Lücken, nicht nur an Bahnhöfen. Vermutlich weil ich immer 1850 starte und dann ein sehr organisch entwickeltes Netz habe. Durch Umbauten, Abzweigungen und dergleichen bekomme ich sehr sehr oft diese winzigen Gleisfragmente.


    Was wirklich nervt beim Elektrifizieren: wenn ich in einem Bahnhof Oberleitungen oder Betonschwellen installiere, vernichte ich alle wartenden Passagiere.


    Kreuzungsweichen wären schon ein Segen, aber für Ausfädelungen baue ich meistens Brücken, damit kreuzende Züge den Verkehr nicht behindern. Durch Überführungen kann man gut steuern, welche Linien Vorrang haben und man hält den Verkehr im Fluß. Selbstverständlich funktioniert das nicht innerhalb von Städten und schon gar nicht vor Bahnhöfen, da man aufgrund der ständigen Kollisionsfehler bei Brücken und Dämmen viel Platz braucht.

    Ja die kurzen Seiten meinte ich doch :-D Die sind halt um 90 Grad gedreht, von oben gesehen senkrecht.


    Ja also ich stelle gerne den Quellcode zur Verfügung, kein Problem. Ist aber echt keine Raketenwissenschaft. Nur ein paar Schleifen und die Draw-Library von Microsoft. Richtige Muster mit verschiedenen Steinen zu generieren ist definitiv echter Aufwand. Der Rest ist Pipikram dagegen ;-)


    Du kannst Dir aber theoretisch auch einfach drei Texturen generieren: eine mit 5 Reihen normale Steine, eine Reihe "senkrechte" und drei Reihen normal. Die drei Texturen fügst Du dann einfach zusammen. Mir ging es ja vordergründig um das Erzeugen von zufälligen Texturen und das Vermeiden von Mustern. Und das kannst Du ja tun.

    Achso, also ja ich kenne mich da nicht so aus. Ich meinte mit Halbstein die senkrecht verbauten Ziegel, die da in den drei Reihen der ausgangskachel zu sehen sind.


    Wenn ich Dich richtig verstehe, möchtest Du unterschiedlich große Steine verbauen? Also der Algorithmus skaliert alle Steine auf eine einheitliche Größe. Es können Kacheln jeder Form und Größe verwendet werden, aber am Ende sind alle gleich groß. Ein spezielles Muster wäre sehr aufwendig. Ich möchte eigentlich nicht mehr weiter dran arbeiten - ich wollte meine fertige Arbeit nur allen verfügbar machen, daher suche ich eine GUI.

    Ja sehr cool! Wir haben keinen Zeitdruck, also nur nicht hetzen lassen. Ich hab mal die DLL angehängt. Einfach referenzieren.


    Das ist mein Code in der Console-Application:



    Die Config benötigt folgende Werte:


    Property
    Description
    Note
    TilesLocationOrdner in dem all die Ziegelsteine liegen
    OutputFilenameOrdner und Dateiname für die zu generierende Texturimmer PNG
    TileMatrixSizeAnzahl der Ziegelsteine in x- und y-Richtung"width" sind die Spalten, "height" sind die Zeilen
    TileSizeEinheitliche Größe jeder Ziegelstein-Grafik; alle Ziegelsteine werden auf diese Einheitsgröße skaliert width/height in Pixel
    GapSizeDicke der Fugenin Pixel
    BackgroundColorFarbe der FugenSystem.Drawing.Color
    StaggeredRatioVersatz der Zeilen in Prozent0.5 (=50%) entspricht einem Versatz von einer halben Ziegelsteinlänge
    TextureWidth
    Breite auf welche die zu generierende Textur skaliert wird
    Dieses Feature ist im Augenblick deaktiviert


    ITileFactory


    Die 'RandomTileFactory' implementiert IFileFactory und macht nichts weiter als zufällig einen Ziegelstein aus dem Ordner (in 'TilesLocation') zu fischen und auf die Einheitsgröße zu skalieren.


    ILogger


    Den ILogger müßtest Du selbst implementieren.


    Code
    namespace ImageTiler.Domain
    {
     public interface ILogger
     {
     void Log(string message);
     }
    }


    Ich hab auf die Console ausgegeben und mir daher einen ConsoleLogger geschrieben. Das geht ja bei Dir nicht. Also entweder Du implementierst einen eigenen ILogger oder zu verzichtest auf Logging und instanziierst einfach den 'DefaultLogger'.


    EDIT: Du kannst eigentlich komplett auf den Logger verzichten. Ich hab ihn nur geschrieben, um die Zeilennummern auszugeben, damit ich auf der Konsole den Fortschritt sehen kann. Sonst logge ich nichts - ergibt also keinen Sinn, das in ein Logfile zu schreiben.


    TilingProcessor


    Der TilingProcessor macht die eigentliche Arbeit. Er benötigt die Config, die TileFactory und den Logger.


    GUI


    Es sollte nicht viel Arbeit sein. Die denkbar einfachste GUI wäre einfach ein simples Form, in dem man alle Config-Werte eingibt, einen Knopf drückt und die Textur wird dann erzeugt. Das wars.


    Wenn man es etwas luxuriöser haben will, könnte ich mir folgende Features vorstellen:
    - Locations könnte man per FileOpen-Dialog (Browse) einstellen, statt nur ein Textfeld.
    - Man könnte erlauben, die Werte zu speichern/laden, damit man nicht jedesmal alles neu eingeben muß.
    - Man könnte die generierte Textur direkt anzeigen.


    Aber Du bist der UI-Mensch, Du solltest freie hand/Entscheidungsfreiheit haben, wie Du es gern umsetzen möchtest.


    Probleme


    Je nach Größe der Matrix kann das resultierende File extrem groß werden! Für meine Triebwagenhalle hab ich eine Textur erzeugt, die über 20.000 Pixel breit war (360x170 Ziegelsteine). Ich hab erst versucht, das File direkt im Programm runterzuskalieren (daher der Config-Value 'TextureWidth'), aber es gab haufenweise OutOfMemoryExceptions, dahr ist der Code auskommentiert. Ich hab dann die generierte 20.000-Pixel-Datei mit Irfanview runteskaliert auf meine 2048 und das ging auch.


    Wenn Du Fragen hast, jederzeit. :-)