Die Q Werte werden berechnet, indem die Hüllenmasse aller eigenen Schiffe mit der Anzahl der eigenen Planeten verrechnet wird. Für jede Hülle wird eine Mindestmasse sowie die Masse der Hülle selber gezählt.
Planeten zählen mit ,min(Colos, 100) / 100', i. e. ein Planet mit 100 Colos zählt 1, einer mit 50 Colos zählt 0.5, einer mit 1 Colo zählt 0.01.
Zudem gibt's einen rassenspezifischen Faktor zur Anpassung. Der steht derzeit bei allen Rassen auf 1.
Als Formel sieht das dann so aus:
void
calc_theq(QINF *q, FACT *fact)
{
q->mforce = fact->mavg;
q->theq = (q->hmass + q->nofsh * q->mforce) /
(q->nofpl + 10) / q->fact;
// hmass: Gesamtmasse aller
eigenen Schiffshüllen
// nofsh: Zahl der eigenen Schiffe
//
mforce: Durchschnittsmasse der vorhandenen Hüllen
// nofpl:
Anzahl der eigenen Planeten
// fact: rassenspezifischer Faktor
}
Mit Hilfe der Q Werte wird bestimmt, welche Rasse wieviele Schiffsslots im Spiel zur Verfügung hat. Geregelt wird das über den Schiffsbau und das Ein- und Ausswappen von Schiffen.
Schiffe dürfen gebaut oder eingeswappt werden, solange der Q Wert unter dem Durchschitt der Q Werte liegt. Einswappen geht vor Neubauen.
Schiffe werden ggf. ausgeswappt, wenn nicht genügend Schiffsslots für die Neubauten oder das Einswappen zur Verfügung stehen. Ausgeswappt werden Schiffe solange, wie der Q Wert ihrer Eigentümer nicht unter den Durchschnitt der Q Werte sinkt.
Das Neubauen/Einswappen beginnt bei der Rasse mit dem niedrigsten Q Wert; danach ist die Rasse mit dem nächsthöheren Q Wert dran, etc..
Das Ausswappen beginnt bei der Rasse mit dem höchsten Q Wert; danach ist die Rasse mit dem nächstniedrigeren Q Wert dran, etc..
Die Schiffe werden nach Hüllenmasse und Cargomasse in eine Liste eingeordnet. Schiffe mit schwereren Hüllen und/oder mehr Cargo werden weiter hinten eingeordnet als Schiffe mit leichteren Hüllen und/oder weniger Cargo. Die vorne eingeordneten Schiffe werden eher ausgeswappt als die hinten eingeordneten Schiffe.
Die Spieler können die Ausswapreihenfolge kontrollieren, indem sie Swapprioritäten für die Schiffe angeben. Dazu bekommen sie eine Liste ihrer Schiffe mit den Swapprioritäten (swppri??.lst), z. B.:
-01
s 465 SMALL TRANSPORT Venezuala 111
-01 s 132 SMALL DEEP SPACE
FREIGHTER Luxembourg 125
-01 s 52 DIAMOND FLAME CLASS BATTLESHIP
Indiana 834
------------------------------------------------------------------------------
PRI UAP ID Type Name vMass
Der erste Wert (PRI: priority) gibt die Swappriorität eines Schiffes an. Er muß zwischen 1 und 500 liegen, sofern er vom Default (-1) abweichen soll. Man kann beliebig viele Schiffe auf den selben Wert setzen. Schiffe mit höherer Priorität werden eher ausgeswappt als Schiffe mit geringerer Priorität. (Default: -1)
Die zweite Angabe (UAP: user action preference) bestimmt, was mit dem Schiff geschehen soll, falls es ausgeswappt wird. ,s' steht für Ausswappen, ,r' steht für Disassemblieren (oder recyclen). (Default: ,s')
Der dritte Wert ist die ID des Schiffes.
Die folgenden Werte werden nicht ausgewertet, und man kann sie weglassen. Sie dienen nur der Information.
Die Informationen über die Swapprioritäten werden im unteren Teil der Liste nochmal im CSV Format ausgegeben, sodaß man sie z. B. in eine Tabellenkalkulation importieren kann. Ansonsten braucht man sie nicht zu beachten.
Auszuswappende Schiffe werden in virtuellen Schiffsslots (VSlots) gelagert. Dort bleiben sie, bis sie wieder eingeswappt werden.
Wird ein Schiff wieder eingeswappt, so wird es sich an der Position befinden, an der es ausgeswappt wurde.
Ein auszuswappendes Schiff, das disassembliert werden soll, wird nicht ausgeswappt, sondern in seine Bestandteile (Mineralien, Geld, Cargo) zerlegt. Die Bestandteile werden auf der nächstgelegenen Starbase des Schiffseigentümers deponiert. Falls keine Starbase vorhanden ist, werden die Bestandteile auf dem nächstgelegenen Planeten des Schiffseigentümers deponiert. Ist kein Planet vorhanden, kann das Schiff nicht disassembliert werden.
Die Swapprioritäten werden in der Datei ,plypri??.lst' vom Spieler bestimmt. Diese Datei verschickt er zusammen mit seinem Zug. Man kann diese Datei leicht aus der plypri??.lst erzeugen /:)
plyinfo??.txt: Ein Text mit Infos für den Spieler --- bitte
unbedingt
angucken.
vsshps??.lst: Eine Liste der Schiffe, die sich in den VSlots befinden.
Auseinanderbauen eines Schiffes
Das Schiff muß sich über einer eigenen Starbase befinden. Alle Bestandteile des Schiffes werden auf der Starbase deponiert.
Minen abreißen
Minengebäude auf Planeten werden abgerissen. Ihre Bestandteile werden auf dem Planeten deponiert. Das Schiff muß bewaffnet sein, um diese Mission ausführen zu können.
MinesLeft gibt an, wieviele Gebäude übrigbleiben sollen.
Fabriken abreißen
Fabrikgebäude werden abgerissen. Ihre Bestandteile werden auf dem Planeten deponiert. Das Schiff muß bewaffnet sein, um diese Mission ausführen zu können.
FactoriesLeft gibt an, wieviele Gebäude übrigbleiben sollen.
Dafenses abreißen
Verteidigungsgebäude werden abgerissen. Ihre Bestandteile werden auf dem Planeten deponiert. Das Schiff muß bewaffnet sein, um diese Mission ausführen zu können.
DefensesLeft gibt an, wieviele Gebäude übrigbleiben sollen.
Raumfalte erzeugen
Eine Raumfalte wird zwischen dem Schiff mit dieser Mission (A) und einem anderen Schiff (B) erzeugt. Alle Schiffe X, die an der selben Position wie A sind, fliegen nach B; alle Schiffe Y, die an der Selben Position wie B sind, fliegen nach A.
Ausnahmen: Alle X und alle Y, die die Missionen 678 oder 679 ausführen können, fliegen nicht nach B bzw. A.
siehe config.h, Defaults in ()
A und B müssen den selben Hüllentyp haben, der vom Typ XMfoldHULL sein muß (105)
A und B verbrauchen je XMfoldFUEL kts Fuel (50)
A und B haben nicht mehr als XMfoldDAMAGE Schaden (0)
A und B haben Engines, die mindestens dem Techlevel XMfoldENGINELEV entsprechen (10)
A und B müssen der selben Rasse gehören, sofern nicht bei A oder B 680 eingestellt ist.
Counterfolding Ship gibt an, zu welchem Schiff die Raumfalte erzeugt werden soll.
Natives bilden
Natives werden von der Schiffscrew durch eine intensive Ausbildung in Colos umgewandelt. Je mehr Crewmitglieder vorhanden sind, desto mehr Natives können zugleich gebildet werden. Es werden mindestens XMeduMINCLANS ausgebildet (siehe config.h). Die Happyness der Natives wird dadurch um XMeduHAPPYCHG erhöht. Natives werden nicht gebildet, wenn ihre Happyness nicht mindestens XMeduMINHAPPY beträgt. Die Ausbildung kostet pro Nativeclan XMeduCOSTMC MCs, die sich an Bord des Schiffes befinden müssen.
Sozialpädagogen einstellen
Sozialpädagogen werden eingestellt. Jede Rasse hat zunächst XMswWORKERS (siehe config.h) Sozialpädagogen zur Verfügung. Die Sozialpädagogen erhöhen mit ihrer Arbeit die Happyness der Natives um XMswHAPPYINC je Sozialpädagoge je Zug. Ihre Arbeit kostet XMswCOSTMC MCs und XMswCOSTSUP pro Sozialpädagoge pro Zug. Die Kosten werden von den Planeten innerhalb einer Reichweite von XMswPAYRANGE kassiert, wobei die Planeten anteilig zahlen: Hat ein Planet z. B. 50% des Geldes aller Planeten in Reichweite, so wird er 50% der Geldkosten zahlen. Falls die Sozialpädagogen nicht ausreichend bezahlt werden, geht es ihnen schlecht und sie verringern die Happyness der Natives um XMswHAPPYINC je Sozialpädagoge je Zug.
MaxWorkers gibt an, wieviele Sozialpädagogen eingestellt werden sollen.
Sozialpädagogen entlassen
Sozialpädagogen werden entlassen. Sie hören auf, auf einem Planeten zu arbeiten und können dort oder woanders wieder eingestellt werden.
MaxWorkers gibt an, wieviele Sozialpädagogen entlassen werden sollen.
Sozialpädagogen abwerben
Auf einem Planeten beschäftigte Sozialpädagogen werden abgeworben, was pro Sozialpädagoge XMswWINOVERMC kostet (siehe config.h). Sie gehören dadurch zu den Sozialpädagogen derjenigen Rasse, die sie abgeworben hat. Der Sinn dieser Mission ist es, anderen Sozialpädagogen wegnehmen und zum eigenen Nutzen einsetzen zu können. Um Sozialpädagogen abwerben zu können, erobert man einen gegnerischen Planeten, auf dem welche beschäftigt sind und wirbt sie ab. Das Geld zum Abwerben muß sich an Bord des Schiffes befinden.
Fighters herstellen
Der Laderaum eines Schiffes wird solange mit Fighters gefüllt, bis er voll ist oder keine weiteren Fighters hergestellt werden können oder bis MaxFighters hergestellt wurden. Fighters kosten entsprechend den Angaben in XMmkfCOST (siehe config.h). Das benötigte Material muß sich auf dem orbitierten Planet befinden (nicht im Frachtraum des Schiffes!). Diese Mission ist ausschließlich den in XMmkfALLOWED angegebenen Rassen erlaubt. Das Schiff muß Fighterbays haben.
MaxFighters gibt an, wieviele Fighters hergestellt werden sollen.
Torpedos herstellen
Der Laderaum eines Schiffes wird solange mit Torpedos gefüllt, bis er voll ist oder keine weiteren Torpedos hergestellt werden können oder bis MaxTorps hergestellt wurden. Torpedos kosten entsprechend den Angaben in XMmktpCOST (siehe config.h). Das benötigte Material muß sich auf dem orbitierten Planet befinden (nicht im Frachtraum des Schiffes!). Diese Mission ist ausschließlich den in XMmktpALLOWED angegebenen Rassen erlaubt. Das Schiff muß Torpedolauncher haben.
MaxTorps gibt an, wieviele Torpedos hergestellt werden sollen.
Position (trotz geöffneter Raumfalte) halten
Diese Mission bewirkt, daß das Schiff eine ggf. geöffnete Raumfalte nicht durchfliegt, sondern an seiner Position verharrt. Wann immer das Schiff dem Sog einer Raumfalte widerstehen muß, werden XMholdFUEL (siehe config.h) verbraucht. Hat das Schiff zu wenig Fuel dafür, durchfliegt es die Raumfalte!
eigene Raumfalte auslösen
Hiermit kann ein Schiff A ein Schiff B dazu veranlassen, für A eine Raumfalte zum angegebenen Zielschiff X zu eröffnen. Dazu verbraucht A XMtriggerFUEL (siehe config.h); auf B und X werden je XMfoldFUEL verbraucht. B und X müssen vom Hüllentyp XMfoldHULL sein und Engines haben, die mindestens dem Techlevel XMfoldENGINELEV entsprechen. A muß weniger als XMtriggerDAMAGE Schaden haben; B und X müssen weniger als XMfoldDAMAGE Schaden haben. Wird die Raumfalte ausgelöst, so fliegt A von B nach X. Alle Schiffe müssen der selben Rasse gehören, sofern B und/oder X nicht 680 eingestellt haben.
TargetShip gibt das Zielschiff an.
Antriebssyncronisation von außen erlauben
Diese Mission erlaubt die Synchronisation der Antriebe zur Erzeugung einer Raumfalte mit Schiffen, die fremden Rassen gehören. Die Benutzung der Missionen 670 und 679 in Verbindung mit Schiffen, die unterschiedlichen Rassen gehören, wird durch 680 ermöglicht. Diese Mission kostet immer XMxsyncFUEL kts Fuel (siehe config.h), und mindestens diese Menge muß noch im Tank bleiben, damit 680 ausgeführt werden kann. Ansonsten gelten die Bedingungen für die Erzeugung von Raumfalten wie bei 670 bzw. 679.
Mit XMmkfFCODE (siehe config.h) werden Fighers hergestellt --- wie in der Mission 676, nur mit dem Unterschied, daß keine Maximalanzahl angegeben wird. Es werden max. 65535 Fighters hergestellt.
Mit XMmktpFCODE (siehe config.h) werden Torpedos hergestellt --- wie in der Mission 677, nur mit dem Unterschied, daß keine Maximalanzahl angegeben wird. Es werden max. 65535 Torpedos hergestellt.
Die Fighters und Torpedos müssen natürlich in den Laderaum passen etc. /:)
Extended Missions:
Die Schiffe werden in aufsteigender ID Reihenfolge auf Missionen untersucht. Entdeckte Missionen werden sofort ausgeführt. Das geschieht in folgender Reihenfolge:
666 Disassemble Ship
667 Pull down Mines (I: MinesLeft)
668
Pull down Factories (I: FactoriesLeft)
669 Pull down Defenses (I:
DefensesLeft)
Treibstoffverbrauch für 680
670 Fold Space
(I: Counterfolding Ship)
einschließlich 678 Hold Position
und 680 Allow external Engine Sync
679 Trigger Spacefold (I: Target Ship)
einschließlich
680 Allow external Engine Sync
671 Educate Natives
672 Employ Social Workers (I: MaxWorkers)
673 Dismiss Social Workers (I: MaxWorkers)
674 Win over
Social Workers
676 Make Fighters (I: MaxFighters)
Fighterbau
nach FC übergeht 676, max. 65535 Stück per FC
677 Make
Torps (I: MaxTorps)
Fighterbau nach FC übergeht 677, max.
65535 Stück per FC
Danach wird der Schiffsbau geregelt:
in Reihenfolge
aufsteigender Q Werte:
ggf. Schiffe einswappen
ggf. Schiffe ausswappen bzw.
disassemblieren
ggf. zu erfüllende Bauaufträge in die
Buildqueue aufnehmen
ggf. nicht zu erfüllende Bauaufträge
merken
in der Reihenfolge gemerkter Bauaufträge:
ggf.
gemerkte Bauaufträge in die Buildqueue aufnehmen
in der
Reihenfolge absteigender Q Werte ggf. Schiffe
ausswappen/disassemblieren
Zum Hosten sollte PHOST, Version 3.2.3.2 verwendet werden. Bei anderen Hostversionen kann es zu Inkompatibilitäten mit den vom Host verwendeten Datenformaten kommen. Mit den Hostprogrammen, die der Erfinder des Spiels geschrieben hat, arbeitet das QVS Tool nicht zusammen.
Leider gibt es keine Runtimekonfiguration für das QVS Tool. Ich hasse es, Textparser zu schreiben, und daher wird das Programm durch Eintragungen im File ,config.h' konfiguriert. Dort stehen Erklärungen zu den Optionen. Nachdem man die Eintragungen dort geändert hat, muß das Program natürlich neu compiliert werden!
Ist das Programm fertig konfiguriert und compiliert, muß es noch in den Hostlauf integriert werden. Dazu macht man einen Eintrag in der Pconfig.src, und zwar in der Pcontrol Section:
######################################################################
# #
# P C O N T R O L S E C T I O N #
# #
######################################################################
# This section controls fine-grain PHOST operation. See
PCONTROL.HTM
# for more details
% PCONTROL
LargeMeteors
= Normal
MeteorShowers = Normal
TransferOwner = Normal
AntiCloak_1 = Normal
DeluxeSuperSpy = Normal
NewNativesAppear = Normal
RobMission = Normal
GamblingShips
= Normal
CargoDump = Normal
CargoTransfer = Normal
TrimShipCargo = Normal
BeamTransfers = Normal
GatherMission
= Normal
BeamUpCredits = Normal
MinefieldDecay = Normal
MineLaying = Normal
MineSweeping = Normal
MinefieldScan =
Normal
WormholeScan = Normal
WebDraining = Normal
SpecialMissions_1 = Normal
BuildFighters = Normal
BuildTorpedoes = Normal
Alchemy = Normal
ShipBuilding_1 =
Normal
DumpOldBaseParts = Normal
BaseMissions_1 = Normal
SupplyRepair_1 = Normal
BoardingParties = Normal
FreeFighters = Normal
Movement = Normal
GloryDevices =
Normal
AntiCloak_2 = Normal
ColonizeMission = Normal
SupplyRepair_2 = Normal
BaseMissions_2 = Normal
Combat =
Normal
SupplyRepair_3 = Normal
Terraforming = Normal
SensorSweep = Normal
SpecialMissions_2 = Normal
PlanetaryProduction = Normal
PlanetaryHappiness = Normal
PlanetaryTaxation = Normal
PlanetaryGrowth = Normal
PlanetaryLosses = Normal
ShipBuilding_2
= Execute qvsctrl.sh
# //
# // Vor der zweiten Bauphase
greift das QVS Tool ein. Die zweite
# // Bauphase bleibt dabei
erhalten.
# //
Assimilation = Normal
SuperSpyMission =
Normal
ShipExploration = Normal
########################################################################
Damit wird ein Script aufgerufen, bevor der Phost die zweite Bauphase beginnt. Dieses Script legt man in das Hostverzeichnis, damit der Phost es finden kann. Das Script sie aus wie folgt:
#!/bin/sh
#
# qvsctrl.sh
#
# game: Spielname
#
qvs
/pfad/zum/hostverzeichnis > /pfad/zum/hostverzeichnis/qvs.log
##
Falls man das Starbeamertool verwendet,
## kann man es an dieser
Stelle laufen lassen:
## starbeamer /pfad/zum/hostverzeichnis
Nun wird bei jedem Hostlauf automatisch vom Phost das Script aufgerufen und damit das QVS Tool. Damit ist man schon fast fertig. Das QVS Tool erzeugt einige Dateien im Hostverzeichnis, die man den Spielern zusammen mit den RSTs schicken sollte: plyinfo??.txt, swppri??.lst, vsshps??.lst und vslots.??. Die *txt und *lst Dateien sind Infos für die Spieler in Textform; die vslots.?? Dateien enthalten Angaben über die ausgeswappten Schiffe in maschinenlesbarer Form.
Mit den vslots.?? Dateien werden die meisten Spieler nichts anfangen können, aber man kann sie auf Wunsch mitschicken, ohne Informationen preiszugeben, die der Spieler nicht haben dürfte. --- Die Nummern in den Dateinamen geben natürlich die Spielernummer an, und man sollte schon aufpassen, daß die Spieler auch die Dateien mit den den richtigen Nummern bekommen :)
Man muß die plyinfo??.txt Dateien ggf. beobachten, da diese von Zug zu Zug immer größer werden. Es empfiehlt sich, sie vor jedem Hostlauf zu löschen.