Anmelden

Vollständige Version anzeigen : Läufer


tobing
19.02.2008, 08:16
Jetzt brauche ich mal eure werte Meinung. Bin gestern auf ein schwieriges Problem gestossen, und muss mich jetzt entscheiden, in welcher Richtung ich das weiter mache. Worum gehts?

Was ich gerne möchte ist, dass das Spiel im schnellen Lauf sich genauso verhält wie langsamer. Dass also die internen Abläufe unabhöngig von der eingestellten Spielgeschwindigkeit sind. Was ich nun feststelle ist, dass dies zusammen mit glatt bewegten Läufern nicht richtig funktioniert. So, was heisst das nun genau? Es bedeutet, dass sich die Läufer bei schnellem Spiel ein bisschen anders verhalten als bei langsamem Spiel. Also vielleicht früher oder auch später an einem bestimmten Zielpunkt ankommen. Die hat natürlich Folgen, weil dann ja auch Waren und Dienste früher oder auch später ankommen und abgeholt werden, und diese zunächst einmal kleinen Abweichungen schaukeln sich dann auf.

Bekannt ist dieses Phänomen aus jeder Art von Diskretisierung von kontinuierlichen Berechnungen, und vermeiden lässt es sich nicht wirklich. Also wenn, dann nur mit ziemlich hohem Berechnungsaufwand, was sich deutlich auf die maximal mögliche Anzahl von Läufern und dann auch Gebäuden auswirken würde. Finde ich ziemlich unangenehm, weil ich doch gerade da dahin will, dass man Karten mit sehr vielen Gebäuden vollbauen können soll, also mindestens einige tausend und entsprechend viele Läufer.

In den meisten aktuellen Spielen, die ja alle sehr kontinuierlich laufen, kann man die Spielgeschwindigkeit nur in einem kleinen Bereich verstellen. Ausserdem glaube ich sicher, dass dieses Problem meistens überhaupt nicht in Betrag gezogen wird, das Spiel also unterschiedlich läuft, je nach Spielgeschwindigkeit. Gutes Beispiel hier ist der 'Firebug' von Caesar IV, auch wenn das letztlich eine etwas andere Ursache hat als die hier beschriebene.

Das ist natürlich eine Möglichkeit, die Sache in den Griff zu bekommen, nämlich die maximal mögliche Geschwindigkeit soweit herunter zu setzen, dass jede langsamere Spielgeschwindigkeit genauso läuft. Der Nachteil ist, dass man selbst in dem Fall die internen Berechnungen so genau machen muss, dass es richtig funktioniert, und das drückt wieder auf die Limits.

Die andere Lösung könnte sein, von der kontinuierlichen Bewegung abzurücken. Das bedeutet, dass Läufer wie bei einem Brettspiel von Kachelmitte zu Kachelmitte 'springen', und zwar immer dann, wenn der richtige Zeitpunkt da ist. Der Vorteil ist klar: Zum einem passt dieses Konzept prima zu den Updates der Gebäude und der Attraktivität, so wie ich das bereits ausprogrammiert habe, die Sache ist sdamit komplett unabhängig von der Spielgeschwindigkeit. Zum anderen skaliert das sehr viel besser, was bedeutet, dass die Grenzen für die maximale Anzahl von Gebäuden und Läufern viel höher liegt, was ja unter anderem eines meiner wichtigen Ziele ist.

Um es gleich zu sagen: Ich tendiere im Moment zu letztgenannten Lösung, aus zwei Gründen: Es ist einfacher zu implementieren, und man braucht weniger Grafiken. Das ist insbesondere deswegen wichtig, weil es zur Zeit eher so aussieht, als wären die Grafiken auch mein Job. Wäre mir also recht, wenn ich von einem Läufer jeweils nicht so viele animierte Bilder machen müsste, sondern mit einer Art Standmodell 4 Richtungen rendere und fertig.

So, und nun würde ich gern mal eure Meinung dazu hören.

Kleinmanny
20.02.2008, 09:36
Moin,

ich wäre auch für die 2 Möglichkeit. Alternativ könnte ich mir auch nur eine Geschwindigkeit vorstellen.

Realo
20.02.2008, 11:09
Was ist eigentlich die Funktion eines Läufers? Kann es sein, daß er wie ein Briefträger funktioniert, der eine begrenzte Menge Waren mit sich schleppt und diese zu einem festem Preis in die Häuser einwirft? Damit wird die Verteilungsdichte zum entscheidenden Faktor.
Normalerweise müßte sich aber die Entkopplung der Läufer vom Rest der Wirtschaft vermeiden lassen, wenn man die Tageslänge so festsetzt, daß ein Läufer innerhalb eines virtuellen Tages sein Gebiet versorgen kann und alle anderen wirtschaftlichen Vorgänge wie z.B. Produktion ebenfalls auf eine Tageslänge abgestimmt werden.

tobing
20.02.2008, 11:34
Es gibt bisher zwei Sorten von Läufern, solche die Dienste verteilen und solche, die Waren verteilen. Der Unterschied ist, dass der Dienstverteiler nicht weniger zu verteilen hat, während der Warenverteiler die Waren, die er wo abgegeben hat, auch nicht anderweitig verteilen kann. Damit läuft der Dienstverteiler immer solange, wie er eben maximal läuft, der Warenverteiler kehrt aber vorzeitig zurück, wenn er nichts mehr zu verteilen hat.

Tagesbasiert zu verrechnen wird nicht funktionieren, ich brauche eine deutlich feinere Granularität der Berechnung, und eben auch der Visualisierung. Realo, kennst du unsere alten Spiele eigentlich? Also Caesar III, Pharao und Konsorten? Ich stelle mir meine Villages und Cities so ähnlich vor, was so das Aussehen und das Spielgefühl angeht.

Ich denke, ich habe inzwischen eine Lösung erdacht, die im Wesentlichen meinen zweiten Vorschlag umsetzt, für die Anzeige der Läufer aber eine kontinuierliche Bewegung 'simulieren' kann. Muss ich aber noch genau durchdenken, ob das wirklich so funktioniert.

Die Grundidee ist dabei, im Kern der Simulation die Läufer genauso zu behandeln wie die Gebäude, und den nächsten Updatezeitpunkt immer so zu setzen, dass der Läufer genau eine Kachel weiter gegangen ist. Damit erfolgt die Verrechnung der Verteilung von Waren und Diensten immer richtig, weil genau im zeitlichen Kontext der Gebäude (Veränderungen der Ausbaustufe, Attraktivität oder Arbeitskräftesituation). Wenn man nun beim Läufer immer speichert, wann er auf der alten Kachel war und wann er auf der neuen Kachel sein wird, kann man für Anzeigezwecke per Dreisatz die Position berechnen, die er zu einem dazwischen liegenden Zeitpunkt hat...

Realo
20.02.2008, 11:58
Realo, kennst du unsere alten Spiele eigentlich? Also Caesar III, Pharao und Konsorten? Ich stelle mir meine Villages und Cities so ähnlich vor, was so das Aussehen und das Spielgefühl angeht.

Ich habe vor längerer Zeit nur der erste Kaiser intensiver gespielt, das Spiel ist grafisch, atmosphärisch und auch vom Gameplay her nach meinem Eindruck am weitesten fortgeschritten, danach habe ich noch kurz den älteren Titel Caesar III und die Pharao-Demo angespielt, war dann aber nicht mehr interessant genug.

tobing
20.02.2008, 12:10
Kaiser ist doch gut. Nach meinem Geschmack ist Pharao ein bisschen besser, oder sagen wir, genauso gut.

Also, so wie die Läufer beim Kaiser rumwuseln, so soll das sein. Aber ohne Sperren... und dafür mit intelligenteren Läufern. Naja, wenn ich die nicht intelligent genug hinkriege, dann gibt es später vielleicht doch ncoh sowas wie Sperren, aber ich will es erstmal ohne versuchen. Finde ich interessanter...

Kleinmanny
20.02.2008, 12:14
Also, so wie die Läufer beim Kaiser rumwuseln, so soll das sein. Aber ohne Sperren... und dafür mit intelligenteren Läufern. Naja, wenn ich die nicht intelligent genug hinkriege, dann gibt es später vielleicht doch ncoh sowas wie Sperren, aber ich will es erstmal ohne versuchen. Finde ich interessanter...

Also dann eher so wie bei CIV :gruebel: Weil es gibt ja das Tor beim Kaiser und ist ja im Grunde genommen nur eine etwas erweiterte Sperre.

Realo
20.02.2008, 12:18
Ich kann mich jetzt nicht mehr genau erinnern, wie das bei der erste Kaiser funktioniert hat.
Aber von der Logik her muß der Läufer eigentlich im gleichen Maße schneller laufen wie die Zeit beschleunigt wird, was natürlich irgendwann nicht mehr so toll aussieht bzw. das menschliche Auge des Spielers überfordert. ;.)

tobing
20.02.2008, 12:19
Ja klar, so ein Tor mache ich nicht, ebenso wie die Wohngebietsmauern. Später wird es aber sehr wohl Mauern mit Toren geben, denn was ist eine mittelalterliche Stadt ohne Stadtmauern? Nichts... durch die Tore gehen dann aber alle Läufer (oder nicht, wenn das Tor nämlich mal zu ist...).

Klar läuft der Läufer schneller, wenn man am Knöpfchen dreht. Die Bewegung wird dann natürlich weniger kontinuierlich, was aber schlimmer ist (im Sinne der Simulation): Die zeitlichen Abstände zwischen den einzelnen Berechnungsschritten werden grösser. Und genau da liegt der Hase im Pfeffer! Aber mit der Grundidee, die ich für die Gebäude und Arbeitskräfte und so weiter schon implementiert habe, bin ich davon unabhängig und kann so schnell fortschreiten, wie der Rechner mithalten kann.

Realo
20.02.2008, 18:53
Ich kann dazu nur sagen, daß Transportsimulation dieses Problem ja auch lösen müssen. Vielleicht hilft es ja, sich mal so einen Thread anzugucken.
http://www.tt-forums.net/viewtopic.php?f=33&t=31657&st=0&sk=t&sd=a

tobing
21.02.2008, 07:39
Bei TT scheint es so zu sein, dass die produzierten Mengen, die ein Betrieb herstellt, einmal pro Tag verrechnet werden. Also an den angeschlossenen Terminals zum Abtransport bereitgestellt. Aber: Trifft ein Zug am Terminal ein, dann werden die Waren verladen, wenn der Zug da steht, das ist also untertägig und daher genauer.

So ähnlich ist das mit den Läufern: sie verteilen die Waren, die sie zu verteilen haben, immer genau dann, wenn sie auf eine Kachel kommen, an der ein Gebäude steht, das diese Ware haben will. In Villages and Cities ist die kleinste Zeiteinheit 6 Minuten, und zwar völlig unabhängig von der Spielgeschwindigkeit und der Framerate.

Mit dem Modell, die Läufer ebenso wie die Gebäude zusammen in meiner schicken Updatequeue zu verarbeiten, bin ich dann mit allen Updates nur noch an der durch die Updatequeue definierten 'virtuellen' Zeitlinie orientiert und damit ebenfalls unabhängig von Spielgeschwindigkeit und Framerate, und genauso soll es ja auch sein.

Ich denke, so werde ich das zunächst einmal machen, und dabei gleich die kontinuierliche Darstellung denken und das entsprechend vorbereiten.

JuliaSet
23.02.2008, 19:10
Hello,

Sorry for posting in English, but I have joined the team and will follow the conversation using babel fish. Unfortunately I have no German language skills.

Thank you for your invitation, tobing.

JuliaSet

tobing
23.02.2008, 19:14
Welcome on board... if you have specific questions, please ask! I'll try to explain as good as I can.

JuliaSet
25.02.2008, 20:28
I still see the interface in German. The UK language pack does not work. :p We will find the right one.

koppi
25.02.2008, 23:45
Hi Gloria
it´s nice to see you here.

tobing
26.02.2008, 07:00
I still see the interface in German. The UK language pack does not work. :p We will find the right one.
Right, for the most parts. There are some texts however that are properly translated... Well, I think I have to ask BJ for the original installation files, he should have them kept somewhere on the server...

Edit: BJ will not be able to look into this for this week, so I just sat down an did the most important translations myself. Not too difficult actually, since vbulletin uses english names for all tokens... Just tell me if something important is missing!

JuliaSet
26.02.2008, 19:48
Thanks! There is enough here to sort out what needs doing. I hope you find the install pack with the full translation.

Now that your project is getting busier, there will be more people wanting to play with your toy.

Hello Koppi! Are you planning something special for your birthday next week?

Gloria/JuliaSet