Allgemeines
Im Folgenden handelt es sich um Informationen zum Mega Lo Mania Server in der Version v0.1. Hierbei handelt es sich um den aktuellen Stand der Serverimplementierung. Im Laufe des Semesters kann es zu (kleineren) Änderungen im Server kommen. Insbesondere das Game Balancing könnte hiervon betroffen sein.
Generell verhält sich die Spielsimulation ähnlich der bereits in der Vorlesung gezeigten Version von Mega Lo Mania.
Simulation
Die Simulation macht alle 1000ms einen Step. Ein Step beinhaltet nacheinander die folgenden Schritte:
- Bevölkerungswachstum
- Resourcen sammeln
- Inventions erforschen
- Tower bauen
- Kampf
Zu jedem dieser Schritte folgt die Erläuterung des genauen Ablaufs und etwaiger Berechnungsgrundlagen.
1. Bevölkerungswachstum
Generell:
- Bevölkerungswachstum erst ab 2 Menschen
Die maximale Bevölkerungsanzahl pro Tower beträgt 500 Seit Server Version 1.0.5 wurde diese Beschränkung aufgehoben!
- Je mehr Menschen sich Tower befinden, desto schneller vermehrt sich die Bevölkerung 😉
Befinden sich 2 Menschen im Tower, werden 30 Sekunden benötigt um einen weiteren Menschen zu zeugen. Bei 4 Menschen werden entsprechend 15 Sekunden benötigt.
2. Resourcen sammeln
Generell:
- Es gibt Resourcen, die automatisch aufgesammelt werden und Resourcen für die eine Mine/Tagebau benötigt wird. Die Geschwindigkeit in der Resourcen abgebaut werden, unterscheidet sich zwischen diesen beiden Typen
- Automatisch aufgesammelte Resourcen: Anzahl der Menschen im Tower.
- Resourcen die eine Mine/Tagebau erfordern: Anzahl der Menschen in der Mine/Tagebau.
Die folgende Tabelle gibt Informationen darüber, welche Resourcen automatisch aufgesammelt werden und für welche eine Mine/Tagebau benötigt wird. Zudem wird die Anzahl der gesammelten Resourcen pro Step (1000ms) angegeben:
Resource |
Automatischer Abbau |
Berechnung |
Wood |
Ja |
Anzahl Menschen im Tower / 1000ms |
Rock |
Ja |
Anzahl Menschen im Tower / 1000ms |
Bone |
Ja |
Anzahl Menschen im Tower / 1000ms |
Slate |
Ja |
Anzahl Menschen im Tower / 1000ms |
Moonlite |
Nein (Tagebau) |
Anzahl Menschen im Tagebau / 1000ms |
Planetarium |
Nein (Tagebau) |
Anzahl Menschen im Tagebau / 1000ms |
Bethlium |
Nein (Tagebau) |
Anzahl Menschen im Tagebau / 1000ms |
Solarium |
Nein (Tagebau) |
Anzahl Menschen im Tagebau / 1000ms |
Aruldite |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Herbirite |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Yeridium |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Valium |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Parasite |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Aquarium |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Paladium |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Onion |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Tedium |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Moron |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Maamite |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
Alien |
Nein (Mine) |
Anzahl Menschen i.d. Mine / 1000ms |
3. Inventions erforschen
Generell:
- Es kann immer nur an einer Invention gleichzeitig geforscht werden. Soll an einer neuen Invention geforscht werden während bereits eine andere läuft, so wird die erste Forschung abgebrochen
- Welches Design für eine Invention verwendet wird, entscheidet der Server (siehe Erklärung “Bestes Design”)
- Die zum erforschen einer Invention benötigte Zeit hängt von folgenden Faktoren ab:
- Der momentanen Epoche des Sectors sowie der Epoche der Invention. Je größer die Differenz zwischen diesen beiden Epochen, desto mehr Zeit wird benötigt
- Ist das für die Invention gewählte Design “ergonomicallyTerrific”, halbiert sich der in Schritt 1 errechnete Faktor.
Bestes Design
Das beste Design wird wie folgt ermittelt:
- Aus allen für eine Invention möglichen Design die entfernen, für die gerade zu wenig Resourcen im Tower verfügbar sind
- Die übrigen Designs nach der Anzahl der benötigten Resourcen sortieren. Hierbei wird KEINE Rücksicht auf die Art der Resource genommen sondern nur die Menge berücksichtigt.
- Das erste Design in der sortierten Liste ist das beste Design.
Berechnung einer Invention
- Initialisierung:
- Berechnung der Epochen Differenz: Diff = EpochOfSector – EpochOfInvention
- Berechnung des Invention Faktors:
Diff |
Faktor |
3 |
40 |
2 |
60 |
1 |
80 |
0 |
100 |
-1 |
120 |
-2 |
140 |
-3 |
160 |
Falls das Diff mehr als 3 Epochen beträgt, wird der Faktor auf 30 (>3) bzw. 170 (<-3) begrenzt.
- Das beste Design ermitteln
- Falls das Design “ergonomicallyTerrific” ist, wird der in Schritt 2 berechnete Faktor halbiert.
- Bei jedem Step:
- Workprogress berechnen: workProgress = AnzahlInventors / factor
- Progress der Invention um berechneten Progress erhöhen
- Falls der Progress =1 ist die Erforschung abgeschlossen
4. Tower bauen
Generell:
- Befindet sich eine Army auf auf einem leeren Sector, fängt diese automatisch an einen Tower zu bauen
- Je mehr Menschen sich auf einem Sector befinden, desto schneller wird der Tower gebaut
- Ist der Bau fertiggestellt, werden alle Armeen in den Tower verschoben und die Waffen im Waffenlager (Storage) deponiert
- Der Fertigstellungsgrad ist ein Wert 0 <= x <= 1
Berechnung: buildProgress = workpower / 1000
5. Kampf
Generell:
- Ein Kampf findet immer dann statt, wenn
- Sich (mindestens) zwei Armeen auf einem Sector befinden, deren Teams verschieden sind
- Sich (mindestens) eine Armee auf einem Sector befindet, der bereits mit Gebäuden eines anderen Teams bebaut ist
- Folgende Waffen gibt es grundsätzlich:
Waffe |
Typ |
Epoche |
Schaden |
Anzahl nötiger Soldaten |
Luftwaffe |
Rock |
Weapon |
9500 BC |
1 |
1 |
nein |
Stick |
Defense |
9500 BC |
3 |
1 |
nein |
Shield |
Shield |
9500 BC |
– |
– |
– |
Catapult |
Weapon |
3000 BC |
2 |
1 |
nein |
Spear |
Defense |
3000 BC |
6 |
1 |
nein |
Shield |
Shield |
3000 BC |
– |
– |
– |
Pike |
Weapon |
100 AD |
4 |
1 |
nein |
Bow and Arrow |
Defense |
100 AD |
12 |
1 |
nein |
Shield |
Shield |
100 AD |
– |
– |
– |
Longbow |
Weapon |
900 AD |
8 |
1 |
nein |
Cauldron |
Defense |
900 AD |
24 |
1 |
nein |
Shield |
Shield |
900 AD |
– |
– |
– |
Giant Catapult |
Weapon |
1400 AD |
16 |
2 |
nein |
Crossbow |
Defense |
1400 AD |
48 |
2 |
nein |
Shield |
Shield |
1400 AD |
– |
– |
– |
Cannon |
Weapon |
1850 AD |
32 |
3 |
nein |
Musket |
Defense |
1850 AD |
96 |
3 |
nein |
Shield |
Shield |
1850 AD |
– |
– |
– |
Biplane |
Weapon |
1915 AD |
64 |
2 |
ja |
Machine Gun |
Defense |
1915 AD |
192 |
2 |
nein |
Shield |
Shield |
1915 AD |
– |
– |
– |
Jet Fighter |
Weapon |
1945 AD |
128 |
3 |
ja |
Bazooka |
Defense |
1945 AD |
384 |
2 |
nein |
Shield |
Shield |
1945 AD |
– |
– |
– |
Nuke |
Weapon |
1980 AD |
– |
– |
nein |
Nuclear deterrent |
Defense |
1980 AD |
– |
– |
nein |
Shield |
Shield |
1980 AD |
– |
– |
– |
Flying Saucer |
Weapon |
2001 AD |
512 |
10 |
ja |
SDI Laser |
Defense |
2001 AD |
1536 |
10 |
nein |
Shield |
Shield |
2001 AD |
– |
– |
– |
Die Berechnung der Kämpfe läuft wie folgt ab:
- Für alle Armeen eines Teams die Kampfstärke berechnen. Die stärke einer (oder mehrerer) Armeen hängt von der benutzten Waffe ab.
- singleArmyStrength = waffenSchaden * (anzahlSoldaten / nötigeAnzahlSoldatenFürWaffe)
- totalArmyStrength = SummeDerEinzelnenArmeenStärke
- Zunächst Kampf der Armeen untereinander berechnen:
- Sterberate einer Armee berechnen. Sei at1 eine Armee von Team 1, at2 eine Armee von Team 2, at1_deathrate die Sterberate von at1 und at2_deathrate die Sterberate von at2.at1_deathrate = at2_totalArmyStrength / at1_totalArmyStrength
- Anzahl der kills bei jeder Armee berechnen.
- Falls eine Armee keine Einheiten verlieren würde (deathrate zu gering), Zufall entscheiden lassen, ob doch 1 Einheit stirbt.
- Andernfalls entspricht die deathrate der Anzahl der kills. Falls mehrere Armeen eines Teams anwesend sind, werden die kills gleichmäßig über die Armeen verteilt.
- Gebäudeschaden berechnen
- Kampfstärke von Verteidigern auf Gebäuden berechnen (siehe hierzu Schritt 1).
- damageToBuilding = enemy_totalArmyStrenght – defender_totalArmyStrength
- Betragen die hitPoints eines Gebäudes 0, so wird dieses Gebäude zerstört