![]() |
Formeln
|
Dieses Dokument beschreibt alle Formeln und Abläufe des PHost. Spieler, die nichts dem Zufall überlassen, können hier genau planen. Wenn du denkst, dass ein Aspekt des Hostlaufes dokumentiert werden sollte, schreib eine Mail an die PHost-Gruppe.
Die genaue Abfolge der Ereignisse ist auf der Seite über den Host-Ablauf dokumentiert.
Das Dokument ist nach dem Auslöser einer Aktion gruppiert. Beispielsweise ist Pillage eine Schiffsmission und wird damit im Abschnitt Schiffe dokumentiert. Kampf betrifft Schiffe und Planeten und wird separat dokumentiert.
Variablennamen (Hull_mass, Native_race, ...) sollten selbsterklärend sein. Wir benutzen die allgemeine mathematische Notation, insbesondere ist / die normale Division (gebrochene Zahlen).
Konfigurationseinträge werden direkt aufgeführt, mit Links zu ihrer Beschreibung. Eff_ConfigOption bezeichnet den Wert einer ConfigOption, mit den entsprechenden Modifikatoren EModConfigOption entsprechend der Erfahrung des Schiffes.
Intern rechnet PHost oft mit Personen-Zahlen, wie sie auch in der alten Dokumentation verwendet wurden. In diesem Dokument wurden die Zahlen in die bekannteren Clans umgewandelt. Da VGA Planets keine "halben" Clans handhaben kann, hat PHost sowieso nach jedem Schritt gerundet.
Wenn eine Folge von "wenn..."-Sätzen angegeben ist, gilt der erste, der zutrifft.
Trunc(X) | Nachkommastellen von X abschneiden |
Round(X) | X runden (auf die näheste ganze Zahl; aufrunden, wenn die Zahl genau auf .5 endet) |
ERnd(X) | X runden (auf die näheste ganze Zahl; wenn die Zahl genau auf .5 endet, wird in Richtung der nähesten ganzen Zahl gerundet) |
Ceil(X) | Nächst-größere ganze Zahl (aufrunden, wenn die Zahl Nachkommastellen hat) |
Sqrt(X) | Quadratwurzel von X |
Exp(X) | Exponentialfunktion (2.7182^X) |
Ln(X) | Natürlicher Logarithmus von X |
Random(X) | Zufallszahl zwischen 0 (inklusive) bis zu X (nicht inklusive). Beispielsweise liefert Random(3) eine der Zahlen 0, 1 oder 2. |
PI | Die Zahl PI = 3.14159265358979323846 |
Schiffe verbrauchen nach der Bewegung Treibstoff. Wenn sie nicht genug Treibstoff haben, passiert nichts Schlimmes, allerdings hat das Schiff eben nachher keinen Treibstoff mehr.
Fuel_burned_per_turn = Ceil(Ship_hull_mass * FuelUsagePerTurnFor100KT / 100)
Schiffe verbrauchen nach jedem Kampf Treibstoff. Wenn sie nicht genug Treibstoff haben, passiert nichts Schlimmes, allerdings hat das Schiff eben nachher keinen Treibstoff mehr.
Fuel_burned_per_fight = Ceil(Ship_hull_mass * FuelUsagePerFightFor100KT / 100)
Pillage-Mission der Klingonen: Schiffe mit der Pillage-Mission plündern den Planeten, um Geld und Vorräte zu erhalten. Außerdem werden Einwohner getötet, die dadurch unglücklich werden.
Supplies_made = Trunc((Colonist_clans + Native_clans) / 100) Money_made = Trunc((Colonist_clans + Native_clans) / 100) Colonist_clans_survived = Trunc(Colonist_clans * 0.8 - 20) Native_clans_survived = Trunc(Native_clans * 0.8 - 120) Colonist_happy_change = -10 Native_happy_change = -10
RGA: Schiffe mit der Rebel Ground Attack-Mission zerstören planetare Ressourcen. Sie töten Kolonisten, der Rest wird dadurch unglücklich. Die sarkastischen Ureinwohner freuen sich darüber.
Money_remaining = Trunc(Money * 0.7) Supplies_remaining = Trunc(Supplies * 0.6) Defense_remaining = Trunc(Defense_posts * 0.8) Mines_remaining = Trunc(Mines * 0.4) Factories_remaining = Trunc(Factories * 0.7) Colonist_clans_survived = Trunc(Colonist_clans * 0.8) Colonist_happy_change = -60 Native_happy_change = +40
Große Meteore töten Einwohner und machen sie unglücklich. Meteoritenhagel beeinflussen die Bevölkerung nicht.
Colonists_survived = Colonists * (Random(91)+10) / 100 Colonist_happiness_change = -(Random(31) + 50) Natives_survived = Natives * (Random(100)+1) / 100 Native_happiness_change = -(Random(31) + 50)
Einfach ausgedrückt sterben bis zu 90% der Kolonisten und bis zu 99% der Eingeborenen, sie verlieren dabei 50 bis 80 Happiness-Punkte. Die Mineralienmengen, die dem Planetenkern (nicht der Oberfläche!) hinzugefügt werden, können konfiguriert werden (LargeMeteorOreRanges, MeteorShowerOreRanges).
Maximum: Die maximale Anzahl Gebäude, die du auf einem Planeten bauen kannst, hängt von der Bevölkerung des Planeten ab.
Maximum_mines = Colonist_clans ...wenn Colonist_clans < 200 Round(200 + Sqrt(Colonist_clans - 200)) ...wenn Colonist_clans >= 200 Maximum_factories = Colonist_clans ...wenn Colonist_clans < 100 Round(100 + Sqrt(Colonist_clans - 100)) ...wenn Colonist_clans >= 100 Maximum_defense_posts = Colonist_clans ...wenn Colonist_clans < 50 Round(50 + Sqrt(Colonist_clans - 50)) ...wenn Colonist_clans >= 50
Du musst diese Bedingungen nicht ständig erfüllen. Du kannst Fabriken bauen und nachher Kolonisten auf ein Schiff laden. Die dann überschüssigen Gebäude verfallen mit der in StructureDecayPerTurn angegebenen Geschwindigkeit.
Gebäude beeinflussen die Sichtbarkeit für fremde Sensoren.
Industry_detection_chance = 0% ...wenn Mines < MinesForDetectable und Factories < FactoriesForDetectable 0% ...wenn Defense >= DefenseForUndetectable 100% - (Defense / DefenseForUndetectable * 100%) ...in allen anderen Fällen Industry_level_reported = "minimal" ...wenn (Mines + Factories) < 30 "leicht" ...wenn (Mines + Factories) < 60 "mäßig" ...wenn (Mines + Factories) < 90 "bedeutend" ...wenn (Mines + Factories) < 120 "stark" ...wenn (Mines + Factories) >= 120 Bioscan_detection_chance = 0% ...wenn Defense >= 20 0% ...wenn das Schiff keinen Bioscanner hat 100% ...wenn das Schiff den verbesserten Bioscanner hat 20% ...sonst
Vorräte (Supplies): Fabriken und bovinoide Ureinwohner produzieren Vorräte.
Supplies_made = Trunc((Factory_contribution + Bovinoid_contribution) * ProductionRate) / 100) ...mit Factory_contribution = Factories Bovinoid_contribution = Min(Trunc(Native_clans / 100), Colonist_clans) ...wenn Eingeborene Bovinoide sind 0 ...sonst
Besteuerung: Steuern von Kolonisten und Eingeborenen werden eingesammelt.
Taxes_collected = Taxes_from_colonists + Taxes_from_natives ...höchstens MaxPlanetaryIncome Taxes_from_colonists = Round(Round(Colonist_clans * Colonist_tax / 1000) * ColonistTaxRate / 100) ...wenn Colonist_happiness >= 30 0 ...wenn Colonist_happiness < 30 Taxes_from_natives = 0 ...wenn Native_happiness < 30 0 ...wenn Eingeborene Amorphe sind Round(Max(Colonist_clans, Natives_due) * IF * NativeTaxRate / 100) ...mit Natives_due = Round(Native_clans * Native_gov_number * Native_tax / 5000) ...mit IF = 2 bei insektoiden Eingeborenen, IF = 1 sonst
Die Native_gov_number (z.B. 6 für Monarchy) ist in den Regeln zu Planeten tabelliert.
Zufriedenheit (Happiness): Änderung der Zufriedenheit durch Besteuerung. Beachte, dass die Änderung vor der eigentlichen Besteuerung erfolgt. Wenn die Zufriedenheit (Happiness) vor diesem Schritt unter 30 liegt, wird der Steuersatz auf 0% gesetzt (und die neue Zufriedenheit wird mit diesem Wert berechnet).
Colonist_happiness_change = Trunc(10 - Sqrt(Colonist_clans / 10000) - Abs(Temperature - Target_temperature) / Temp_divisor - (Mines + Factories) / 300 - Colonist_tax * 0.8) ...mit Target_temperature = 100 und Temp_divisor = 66 wenn der Besitzer Crystal und CrystalsPreferDeserts aktiv ist ...mit Target_temperature = 50 and Temp_divisor = 33 sonst Native_happiness_change = Trunc(5 + Native_gov_factor / 2 - Sqrt(Native_clans / 10000) - (Mines + Factories) / 200 - Native_tax * 0.85) ...plus 10 bei Avian-Eingeborenen
Die Native_gov_numbers sind bei den Regeln zu Planeten aufgelistet (also 6 für Monarchie, so dass der erste Term dann 6/2 = 3 würde).
Die Zufriedenheit der Bevölkerung wird so zusammengefasst:
Happiness_level = "happy" ...wenn Happiness >= 90 "calm" ...wenn Happiness >= 70 "unhappy" ...wenn Happiness >= 50 "very angry" ...wenn Happiness >= 40 "rioting" ...wenn Happiness >= 20 "fighting" ...wenn Happiness < 20 Happiness_change_level = "hate you" ...wenn Happiness_change < -5 "angry about you" ...wenn Happiness_change < 0 "undecided" ...wenn Happiness_change = 0 "like your leadership" ...wenn Happiness_change <= 4 "love you" ...wenn Happiness_change >= 5
Bergbau: Die maximale Mineralienmenge, die pro Zug abgebaut werden kann, hängt von der Dichte der Mineralien ab.
Max_minerals_mined = Trunc(Mining_rate * Mine_count / 100) ...mit Mining_rate = Trunc(RaceMiningRate * Mineral_density / 100) * RF ...und RF = 2 for Reptilian natives, 1 otherwise Minerals_mined = Min(Max_minerals_mined, Minerals_in_core)
Trans-Uran-Zerfall: Neue Mineralien bilden sich im Planetenkern. Beachte, dass das nach dem Bergbau passiert, so dass du die neuen Mineralien nicht direkt nutzen kannst.
New_minerals_in_core = Trunc((TransuraniumDecayRate * Mineral_density + 50) / 100)
Cyborg-Assimilation: Cyborgs assimilieren Eingeborene und verwandeln sie in Kolonisten. Ein assimilierter Eingeborenen-Clan ergibt einen Cyborg-Kolonisten-Clan.
Native_clans_assimilated =
Trunc(Colonist_clans * BorgAssimilationRate / 100)
...maximal Native_clans
Maximale Einwohnerzahl: Die maximale Bevölkerung eines Planeten ist konstant und hängt nur vom Klima ab. Wenn ClimateLimitsPopulation aktiviert ist, können auf einem Planeten der optimalen Temperatur 100000 Clans (10 Millionen Kolonisten) leben. Wenn entsprechend konfiguriert, können Vorräte (Supplies) genutzt werden, um mehr Kolonisten zu erlauben.
Eff_max_colonist_clans = Max_colonist_clans + Supply_bonus ...wenn ClimateLimitsPopulation eingeschaltet ist 250000 ...sonst (25 Millionen Kolonisten) Max_colonist_clans = Max(Trunc(100000 * Sin(Temperature * PI / 200)), 1) ...wenn die Kolonisten Crystals sind und CrystalsPreferDeserts eingeschaltet ist und CrystalSinTempBehavior eingeschaltet ist und Temperature >= 15 3 + Trunc(MaxColTempSlope * Temperature / 100) ...wenn die Kolonisten Crystals sind und CrystalsPreferDeserts eingeschaltet ist und CrystalSinTempBehavior eingeschaltet ist und Temperature < 15 Max(1000 * Temperature, 1) ...wenn die Kolonisten Crystals sind und CrystalsPreferDeserts eingeschaltet ist und CrystalSinTempBehavior ausgeschaltet ist 90000 ...wenn die Kolonisten Rebels sind und Temperature < 20 (9 Millionen Kolonisten) 3 + Trunc(MaxColTempSlope * Temperature / 100) ...wenn Temperature < 15 1 + Trunc((100-Temperature) * MaxColTempSlope / 100) ...wenn Temperature > 84 ...mindestens 60 bei Klingonen, Robots, Rebels oder Colonies Trunc(100000 * Sin(Temperature * PI / 100)) ...in allen anderen Fällen Supply_bonus = Trunc(Supplies / 40) ...wenn AllowEatingSupplies eingeschaltet ist 0 ...sonst
Für Eingeborene gelten einfachere Formeln. Das absolute Maximum sind 15.6 Millionen Eingeborene (156000 Clans). Vorräte helfen hier nicht, um das Limit anzuheben.
Max_native_clans = 156000 ...wenn ClimateLimitsPopulation ausgeschaltet ist 100000 * Temperature ...wenn es silikonoide Eingeborene sind und CrystalsPreferDeserts eingeschaltet ist und PHost 3.3c oder neuer verwendet wird Trunc(Sin(Temperature * PI / 100) * 156000) ...in den anderen Fällen
Man könnte es als Fehler bezeichnen, dass Siliconoide bei CrystalsPreferDeserts die 15.6-Millionen-Grenze nicht erreichen. Die Formel noch einmal zu ändern würde die Sache aber nur komplizierter machen.
Wachstum: Wachstum hängt von Besteuerung und Klima ab. Die Bevölkerung wächst niemals über die Wachstumsgrenze hinaus. Die maximale Wachstumsrate pro Zug beträgt 5%.
Colonist_growth_in_clans = Trunc(Round(Colonist_growth_rate * Colonist_clans / 10000) * RaceGrowthRate / 100) ...maximal Eff_max_colonist_clans - Colonist_clans Colonist_growth_rate = 0 ...wenn Colonist_clans >= Eff_max_colonist_clans 0 ...wenn Colonist_happiness < 70 0 ...wenn die Kolonisten Crystals sind und CrystalsPreferDeserts eingeschaltet ist und CrystalSinTempBehavior eingeschaltet ist und Temperature < 15 5 * Sin(Temperature * PI / 200) / (1 + Colonist_tax / 5) ...wenn die Kolonisten Crystals sind und CrystalsPreferDeserts eingeschaltet ist und CrystalSinTempBehavior eingeschaltet ist und Temperature >= 15 5 * (Temperature / 100 ) / (1 + Colonist_tax / 5) ...wenn die Kolonisten Crystals sind und CrystalsPreferDeserts eingeschaltet ist und CrystalSinTempBehavior ausgeschaltet ist 0 ...wenn Temperature < 15 0 ...wenn Temperature > 84 5 * Sin(Temperature * PI / 100) / (1 + Colonist_tax / 5) ...in allen anderen Fällen
Eingeborene wachsen ähnlich, allerdings mit einer maximalen Geschwindigkeit von 4%. Auf unbesetzten Planeten wachsen Eingeborene nicht(!).
Native_growth_in_clans = Trunc(Round(Native_growth_rate * Native_clans) / 100) ...maximal Max_native_clans - Native_clans Native_growth_rate = 0 ...wenn Native_clans >= Max_native_clans 0 ...wenn Native_happiness < 70 4 * (Temperature / 100) / (1 + Native_tax / 5) ...wenn es silikonoide Eingeborene sind und CrystalsPreferDeserts eingeschaltet ist und PHost 3.3c oder neuer verwendet wird 4 * Sin(Temperature * PI / 100) / (1 + Native_tax / 5) ...in den anderen Fällen
Überbevölkerung verbraucht Vorräte: Überbevölkerung unter den Kolonisten verbraucht Vorräte, wenn aktiviert.
Supply_loss = 0 ...wenn AllowEatingSupplies ausgeschaltet ist 0 ...wenn ClimateLimitsPopulation ausgeschaltet ist 0 ...wenn Colonist_clans <= Max_colonist_clans Trunc((Colonist_clans - Max_colonist_clans) / 40 + 1) ...sonst
Wenn weniger Supplies verfügbar sind, werden sie alle aufgebraucht, ohne weitere negative Folgen.
Tote durch Extremklima (Climate Deaths): Überbevölkerung (Kolonisten und Eingeborene) führt zu Todesfällen.
Colonist_clans_dying = 0 ...wenn ClimateLimitsPopulation ausgeschaltet ist 0 ...wenn Colonist_clans <= Eff_max_colonist_clans Min(Trunc(Colonist_clans * ClimateDeathRate / 100), Eff_max_colonist_clans - Colonist_clans) ...sonst Native_clans_dying = 0 ...wenn ClimateLimitsPopulation ausgeschaltet ist 0 ...wenn der Planet unbewohnt ist 0 ...wenn Native_clans <= Max_native_clans Min(Trunc(Native_clans * NativeClimateDeathRate / 100), Max_native_clans - Native_clans) ...sonst
Wenn die Bevölkerung die absolute Obergrenze von 250000
Clans (25 Millionen Einwohner) überschreitet, werden die Clans, die
das Limit überschreiten, sterben und als Todesfälle durch Extremklima
(climate deaths) berichtet, auch wenn
ClimateLimitsPopulation deaktiviert ist.
Eff_max_colonist_clans wird nach dem
Verbrauchen von Vorräten berechnet, und benutzt die neue (geringere)
Menge Vorräte.
Diese Tabelle zeigt alle Aktionen, die einen Planeten betreffen. Auf der linken Seite stehen die Schritte des Hostablaufes in chronologischer Reihenfolge. Die mittlere Spalte enthält Aktionen, die die Bevölkerung und deren Zufriedenheit betreffen (wie "Besteuerung findet vor der Vermehrung statt"), die rechte Spalte enthält alle Aktionen, die die Mineralienvorräte und Gebäude betreffen (wie "Beam-Up-Multiple passiert vor lfm" (hint, hint)).
Schritt | Zufriedenheit/Bevölkerung | Mineralien/Industrie |
---|---|---|
LargeMeteors, MeteorShowers | Meteore machen unglücklich. | Meteore und Meteoritenhagel bringen Mineralien für den Planetenkern. |
CargoDump | Bodenkampf | |
Training | Schiffe verbrauchen Vorräte für das Training | |
GatherMission | Schiffe laden Mineralien auf | |
SpecialMissions_1 | Lizards hissen | |
BuildFighters, BuildTorpedoes | Schiffe laden Mineralien auf | |
ShipBuilding_1 | Durch Klonen werden Ressourcen verbraucht. | |
DumpOldBaseParts | Sternenbasen recyceln alte Raumschiffteile | |
BaseMissions_1 | Sternenbasen recyceln Raumschiffe, danach bauen sie die Verteidigung aus oder laden Torpedos auf Raumschiffe | |
FreeFighters | Sternenbasen bauen "Gratis"-Raumjäger | |
GloryDevices | Glory Devices töten Bevölkerung und amorphe Ureinwohner | Glory Devices beschädigen den Planeten |
ColonizeMission | Colonize-Schiffe bringen Kolonisten | Colonize-Schiffe bringen Mineralien |
BaseMissions_2 | Sternenbasen tanken Schiffe auf bzw. entladen sie | |
Combat | Im Kampf können Einwohner sterben. | Verteidigungsposten werden zerstört. |
TerraForming | Terraforming macht den Planeten besser bewohnbar. | |
SensorSweep | Sensor Sweep entdeckt Planeten entsprechend dem industriellen Ausbau. | |
SpecialMissions_2 | Pillage / RGA machen Einwohner unglücklich | Pillage / RGA zerstören planetare Einrichtungen, Dark Sense findet die Situation nachher |
PlanetaryProduction | Bergbau, Produktion von Vorräten, Trans-Uran-Zerfall | |
PlanetaryHappiness | Wenn die Zufriedenheit 29 oder niedriger beträgt, werden die Steuern auf 0 gesetzt. Danach wird die neue Zufriedenheit ermittelt. | |
PlanetaryTaxation | Steuern werden eingesammelt | |
PlanetaryGrowth | Wachstum | |
PlanetaryLosses | Tod durch Extremklima, danach Verluste durch Aufstände | Überbevölkerung verbraucht Vorräte, danach Strukturverfall, danach Verluste durch Aufstände, danach frühstücken die Amorphe ihre Kolonistenration |
ShipBuilding_2 | Durch Klonen werden Ressourcen verbraucht. | |
Assimilation | Cyborgs assimilieren Eingeborene |
Die Größe des Wurmloch-Endpunktes hängt von der Masse ab.
Wormhole_radius = (Wormhole_mass ^ (WrmEntryPowerX100 / 100)) / 2
Intern verwendet PHost die exakten Zahlen mit Kommastellen. In Ufos wird Trunc(Wormhole_radius) übermittelt (Versionen bis 3.3d setzen immer den Wert 5 ein).
Bewegung der Endpunkte: Wurmloch-Endpunkte bewegen sich jeden Zug. Sie bewegen sich WrmDisplacement Lichtjahre in X/Y-Richtung auf ihr Ziel zu, und zusätzlich noch einen zufälligen Wert bis zu WrmRandDisplacement.
Endpoint_displacement = Waypoint_displacement + Random_displacement ...mit Random_displacement = Random(1 + 2*WrmRandDisplacement) - WrmRandDisplacement Waypoint_displacement = Waypoint_position - Endpoint_position ...höchstens WrmDisplacement ...mindestens -WrmDisplacement
Größenänderungen: Wurmlöcher ändern Masse und Instabilität jeden Zug.
Mass_change = WrmMassAdd + Random(1 + 2*WrmRandMass) - WrmRandMass Instability_change = -WrmStabilityAddX10 / 10 + Random(1 + 2*WrmRandStability) - WrmRandStability
Die Masse ist eine ganze Zahl zwischen 1 und 32767, die Instabilität ist eine (möglicherweise gebrochene) Zahl zwischen 0 und 100. Wenn die Masse durch diesen Vorgang auf 0 fällt, ist das Wurmloch kollabiert und PHost setzt die Start- und End-Koordinaten auf (0,0).
Sei Ship_dist die Entfernung zwischen dem scannenden Schiff und dem Mittelpunkt des Wurmloch-Eingangs (die X,Y aus wormhole.txt).
Deterministischer Scan: Ein Schiff sieht alle Wurmlöcher, für die Ship_dist <= WrmScanRange gilt. Ein Schiff mit der ScansAllWormholes-Funktion sieht alle Wurmlöcher, für die Ship_dist <= 2 * WrmScanRange gilt. Diese Regeln werden nur verwendet, wenn WrmScanRange nicht 0 ist.
Probabilistischer Scan: Die Wahrscheinlichkeit, ein Wurmloch zu sehen, hängt von dessen Masse ab.
Detection_radius = 10 * Wormhole_mass ^ (1/3) Detection_chance = 100% ...wenn Ship_dist <= Detection_radius (4 - (Ship_dist/Detection_radius)^2) * 33.3% ...wenn Detection_radius < Ship_dist <= 2*Detection_radius 0% ...wenn Ship_dist > 2*Detection_radius
Für jedes Wurmloch wird gewürfelt.
Schiffe müssen innerhalb einer Entfernung von Wormhole_radius vom Zentrum des Endpunktes sein, um das Wurmloch betreten zu können.
Beim Durchqueren eines Wurmloches belastest du dieses Wurmloch. Je stärker du das Wurmloch belastest, desto höher ist die Wahrscheinlichkeit, dass die Reise fehlschlägt.
Wormhole_stress = 0 ...wenn Ship_mass < Wormhole_mass ((Ship_mass / Wormhole_mass) - 1)^2 ...sonst Travel_failure_odds = Wormhole_stress + Wormhole_instability + (Wormhole_stress*Wormhole_instability / 10) Travel_failure_figure = Random(100) Travel_fuel_usage = Fuel_usage(Equiv_distance, WrmTravelWarpSpeed) ...mit Equiv_distance = Wormhole_distance / WrmTravelDistDivisor
Mögliche Ergebnisse einer Wurmloch-Reise:
Travel_fuel_usage > Fuel Durchquerung schlägt fehl: New_ship_X = 1000 + Random(2001) New_ship_Y = 1000 + Random(2001) Damage_taken = 25 + Random(75) Travel_fuel_usage <= Fuel und Travel_failure_figure >= Travel_failure_odds Sichere Durchquerung: New_ship_X = Endpoint_X - 10 + Random(21) New_ship_Y = Endpoint_Y - 10 + Random(21) Damage_taken = 0 Travel_fuel_usage <= Fuel and Travel_failure_figure < Travel_failure_odds Erfolgreiche Durchquerung, Schaden genommen: New_ship_X = Endpoint_X - 10 + Random(21) New_ship_Y = Endpoint_Y - 10 + Random(21) Damage_taken = (Travel_failure_odds - Travel_failure_figure) ^ 2
Die Instabilität eines Wurmloches gibt eine Bewertung der Sicherheit des Wurmloches an. Ein Wurmloch wird in eine der folgenden Kategorien eingeordnet, die den Spielern mitgeteilt wird:
Wormhole_stability_rating = "very stable" ...wenn Wormhole_instability <= 5 "stable" ...wenn Wormhole_instability <= 15 "mostly stable" ...wenn Wormhole_instability <= 30 "unstable" ...wenn Wormhole_instability <= 50 "very unstable" ...wenn Wormhole_instability <= 80 "completely unstable" ...sonst
Trunc(100 - 2*Damage/3) bei Lizard-Schiffen Trunc(100 - Damage) sonst
Hull_mass + Trunc(ESB_Rate * Engine_cost / 100) ...plus 50 if ship is FedDabei ist Engine_cost der Preis eines Triebwerkes des Schiffes. ESB_Rate ist die Summe der folgenden Komponenten:
Beam_count = Ship_beams für Föderationsschiffe Min(Ship_beams, Max_beams - Trunc(Max_beams * Damage / Divisor) Tube_count = Ship_tubes für Föderationsschiffe Min(Ship_tubes, Max_tubes - Trunc(Max_tubes * Damage / Divisor) Bay_count = Ship_bays für Föderationsschiffe Max_bays - Trunc(Max_bays * Ship_damage / Divisor) Divisor = 150 für Lizardschiffe 100 sonstMax_beams, Max_tubes und Max_bays sind die Maximalwerte, die für diesen Schiffstyp möglich sind.
Die Verteidigung eines Planeten wird geschwächt, wenn der Planet beschädigt wird.
Eff_Planet_Defense = Trunc(Planet_Defense * (100 - Damage) / 100) Eff_Base_Defense = Trunc(Base_Defense * (100 - Damage) / 100) Eff_Total_Defense = Trunc((Base_Defense + Planet_Defense) * (100 - Damage) / 100)
Wenn eine Sternenbasis beschädigt wird, werden die Techlevels abgesenkt. Hier ist die Formel für die Geschütze (beam tech), die auch auf die anderen Gebiete zutrifft.
Eff_Beam_Tech = Beam_Tech ...höchstens Trunc((100 - Base_damage) / 10) ...mindestens 1
Ausrüstung eines Planeten im Kampf
Combat_mass = 100 + Eff_Planet_Defense ...plus Eff_Base_Defense wenn Basis vorhanden Beam_type = Round(Sqrt(Eff_Planet_Defense / 2)) wenn keine Basis vorhanden Max(above, Eff_Beam_Tech) wenn Basis vorhanden Beam_count = Round(Sqrt(Eff_Total_Defense / 3)) ...maximal 10 wenn AllowAlternativeCombat ausgeschaltet ist ...maximal 20 wenn AllowAlternativeCombat eingeschaltet ist Torp_type = Round(Sqrt(Eff_Planet_Defense / 2)) wenn keine Basis vorhanden Max(above, Eff_Torp_Tech) wenn Basis vorhanden Tube_count = Round(Sqrt(Eff_Total_Defense / 4)) ...maximal 20 Torp_count = Tube_count * PlanetaryTorpsPerTube ...plus Trunc(Base_torp_cost / Torp_money_cost(Torp_type)) wenn Basis vorhanden ...maximal 255 Base_torp_cost = Torp_money_cost(1) * Torps_in_storage(1) + Torp_money_cost(2) * Torps_in_storage(2) ... + Torp_money_cost(10) * Torps_in_storage(10)
Beam_hit_odds = Eff_BeamHitOdds + Trunc((Beam_Kill_Power + Beam_Expl_Power) * Eff_BeamHitBonus / 100) Beam_recharge_rate = BeamRechargeRate + Trunc((Beam_Kill_Power + Beam_Expl_Power) * Eff_BeamRechargeBonus / 100) Beam_recharge_per_tick = Random(Beam_recharge_rate) Torp_hit_odds = Eff_TorpHitOdds + Trunc((Torp_Kill_Power + Torp_Expl_Power) * Eff_TorpHitBonus / 100) Torp_recharge_rate = Eff_TubeRechargeRate + Trunc((Torp_Kill_Power + Torp_Expl_Power) * Eff_TubeRechargeBonus / 100) Torp_recharge_per_tick = Random(Torp_recharge_rate) Bay_recharge_rate = Eff_BayRechargeRate + Eff_BayRechargeBonus * Num_Bays Bay_recharge_per_tick = Random(Bay_recharge_rate)
Eff_XXX ist der effektive Wert einer Konfigurationsoption, und setzt sich aus dem eigentlichen Wert aus der Konfigurationsdatei sowie den Erfahrungs-Boni der Einheit, die die Waffe benutzt, zusammen.
Jeder Waffentreffer wird durch drei Angaben charakterisiert:
Geschütze: Expl_Power und Kill_Power werden der Definition des Waffensystemes entnommen. Ein Geschütz schießt Todesstrahlen, wenn der Expl_Power 0 ist. Wenn der Besitzer der Waffe Privateer ist, wird die Kill_Power verdreifacht. Der Ladezustand der Waffe beeinflusst die Wirkung; ein Geschütz, das bei Ladung 600 abgefeuert wird, hat nur 60% der normalen Energie.
Torpedos: Expl_Power und Kill_Power werden der Definition des Waffensystemes entnommen. Beachte, dass die Werte noch einmal verdoppelt werden, wenn AllowAlternativeCombat deaktiviert ist (einige Clients zeigen bereits die verdoppelten Werte an). Ein Torpedo mit Expl_Power = 0 strahlt Todesstrahlen ab.
Fighters (Raumjäger): Expl_Power und Kill_Power entsprechen den Parametern FighterBeamExplosive und FighterBeamKill. Jäger schießen niemals Todesstrahlen.
Shield_damage = (Expl_Power * Eff_ShieldDamageScaling + Kill_Power * Eff_ShieldKillScaling) / (Mass + 1) wenn AllowAlternativeCombat eingeschaltet ist = Trunc(obiges + 1.5) wenn AllowAlternativeCombat ausgeschaltet ist Hull_damage = (Expl_Power * Eff_HullDamageScaling) / (Mass + 1) wenn AllowAlternativeCombat eingeschaltet ist = Trunc(1.5 + (Shield_damage * Eff_HullDamageScaling / (Mass + 1)) wenn AllowAlternativeCombat ausgeschaltet ist Crew_killed = (Kill_Power * Eff_CrewKillScaling) / (Mass + 1) wenn AllowAlternativeCombat eingeschaltet ist = Trunc(obiges + 0.5) wenn AllowAlternativeCombat ausgeschaltet ist ...mindestens 1 wenn AllowAlternativeCombat ausgeschaltet ist und die Waffe Todesstrahlen schießt.
Eff_XXX ist der effektive Wert einer Konfigurationsoption, und setzt sich aus dem eigentlichen Wert aus der Konfigurationsdatei sowie den Erfahrungs-Boni der getroffenen Einheit zusammen (dies sind die Defensiv-Boni).
Ionenstürme werden in Klassen aufgeteilt, die im Regelwerk beschrieben sind.
Speed = 8 ...wenn Voltage > 250 6 ...wenn Radius > 200 2 + Random(3) ...sonst, also zufällig zwischen 2 und 4 Heading = Old_heading - 10 + Random(21) ...also Änderung um +/- 10 Grad
Voltage_change = 2 * Random(6) ...also 0 bis 10 in Schritten von Zwei Radius_change = Random(4) ...also 0 bis 3 New_voltage = Old_voltage + Voltage_change + Additional_gain New_radius = Old_radius - Radius_change ...wenn Old_radius > Radius_change 1 - (Old_radius - Radius_change) ...sonst
Der Wert Additional_gain besteht aus vier Boni, die jedem Sturm gegeben werden. Beachte, dass wachsende Stürme immer ungerade Ladung haben; wenn die Ladung um eins wächst, wandelt sich der Sturm in einen abklingenden Sturm um. Alle vier Bedingungen werden überprüft, damit kann sich der Bonus zwischen Null und Vier bewegen.
Additional_gain = +1 ...wenn die zweite Regel für New_radius benutzt wurde +1 ...mit 1% Wahrscheinlichkeit +1 ...mit 2.5% Wahrscheinlichkeit, wenn New_voltage > 320 ist +1 ...mit 10% Wahrscheinlichkeit, wenn New_voltage > 500 ist
Voltage_change = 4 + 2 * Random(6) ...also 4 bis 14 in Schritten von Zwei Radius_change = Random(11) ...also 0 bis 10 New_voltage = Old_voltage - Voltage_change ...der Sturm verschwindet, wenn das Ergebnis 0 oder weniger ist New_radius = Old_radius + Radius_change
Pfannkuchen-Effekt (Pancaking effect): Der Pfannkuchen-Effekt tritt mit einer Wahrscheinlichkeit von 1:33 nach der normalen Radius- und Ladungs-Änderung auf. Hierdurch kann der Sturm auch wieder in einen wachsenden Sturm verwandelt werden.
Voltage_after_pancaking = Round(Sqrt(New_voltage)) Radius_after_pancaking = 2 * New_radius
Stürme Id_1 und Id_2 verschmelzen, wenn sie sich teilweise überlappen: Distance_of_centers^2 <= Radius_1^2 + Radius_2^2.
New_X = Trunc((X_1 * Voltage_1 + X_2 * Voltage_2) / (Voltage_1 + Voltage_2)) New_Y = Trunc((Y_1 * Voltage_1 + Y_2 * Voltage_2) / (Voltage_1 + Voltage_2)) ...gewichteter Mittelwert; näher zum Zentrum des stärkeren Sturms New_Radius = Trunc(Sqrt(Radius_1^2 + Radius_2^2)) ...der neue Sturm ist größer als die ursprünglichen New_voltage = Trunc((Voltage_1 * Radius_1^2 + Voltage_2 * Radius_2^2) / (Radius_1^2 + Radius_2^2)) ...gewichteter Mittelwert
Die Id-Nummer des neuen Sturmes ist die Id des stärkeren Sturms; bei gleichen Stürmen die höhere von beiden. Richtung und Geschwindigkeit werden von diesem Sturm beibehalten.
Ob der Sturm wächst oder abklingt ergibt sich aus der errechneten New_voltage.
Schiffe: Alle Stürme enttarnen Schiffe, die kein verbessertes Tarngerät haben. Stürme, die stärker als 150 MeV sind, beeinflussen alle Schiffe, die nicht tarnen oder derart enttarnt wurden, und die keinen Ionenschild haben.
Ship_dragged_distance = 0.75 * Storm_warp^2 Ship_dragged_heading = Storm_heading Ship_damage_taken = (Random(200) + Storm_voltage - Ship_mass - 20 * Ship_engine) * Exp_modificator ...mit Exp_modificator = 1 ...wenn NumExperienceLevels = 0 1 - (Ship_experience_level / NumExperienceLevels) ...sonst ...plus 50 wenn das Schiff keinen Treibstoff hat ...natürlich mindestens 0 Ship_damage = Ship_damage + Ship_damage_taken Ship_crew = Trunc(Ship_crew * (100 - Ship_damage_taken) / 100) Ship_experience_gain = Trunc(EPShipIonStorm100MEV * (Storm_voltage - 100) / 100)
Letzte Aktualisierung 15 October 2005.