Aus dem Code:
Code:
/* storms should be the first thing we do. */
stormchance = stormyness / shipspeed(sh, u);
if (check_leuchtturm(next_point, NULL))
stormchance /= 3;
Stormyness ist abhängig von Jahreszeit.
Erkenntnis 1: Abtreibechance ist abhängig von der Schiffsgeschwindigkeit.
Erkenntnis 2: Wenn Schiff in Leuchtturmwirkung wird die Chance zum Abtreiben gedrittelt.
Jetzt zur Leuchtturmwirkung (check_leuchtturm), freie Interpretation des Codes:
Code:
if (fval(b, BLD_WORKING) && b->size >= 10) {
Das Gebäude muss "arbeiten" und eine Grösse >= 10 haben. Achtung, jetzt gleich ein wenig mehr:
Code:
int maxd = (int)log10(b->size) + 1;
if (skill_enabled[SK_PERCEPTION]) {
region *r2 = b->region;
unit *u;
int c = 0;
int d = 0;
for (u = r2->units; u; u = u->next) {
if (u->building == b) {
c += u->number;
if (c > buildingcapacity(b))
break;
if (f == NULL || u->faction == f) {
if (!d)
d = distance(r, r2);
if (maxd < d)
break;
if (eff_skill(u, SK_PERCEPTION, r) >= d * 3)
return true;
}
} else if (c)
break; /* first unit that's no longer in the house ends the search */
}
} else {
/* E3A rule: no perception req'd */
return maxd;
}
mit maxD wird die Maximale Sichtweite des LTs bestimmt.
Also, wenn Wahrnehmung aktiviert ist (in E3 z.B. nicht), werden überhaupt erst die Insassen untersucht. Es werden dabei tatsächlich nur die Insassen untersucht, die in das Gebäude passen.
Dann gibt es den angefragten Check auf Parteizugehörigkeit, der aber für die Sturmchancenbeeinflussung *nicht* greift (Aufruf der Funktion mit NULL als Partei-Parameter, s.o.).
Ist eine Einheit im Leuchtturm und ist dieser groß genug, auch das Schiff zu sehen, dann wird das Wahrnehmungstalent der Einheit untersucht. Reicht auch dass aus, liefert die Funktion ein freundliches "YEP!" und meint damit, dass ein Leuchtturm das Schiff beeinflusst, was dann wiederum zur Reduzierung der Abtriebschance führt.
Lucon hat ganz Recht, denn die ganze Sturmgeschichte wird nur dann durchlaufen, wenn das nächste Feld in der Bewegung des Schiffes ein Ozeanfeld ist (also kein Küstenfeld und kein Landfeld).
Soweit mein Blick in den Code.
Gruß
Fiete