Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002360EresseaGeneralöffentlich2017-12-05 19:48
ReporterEnno Bearbeitung durchEnno  
PrioritätnormalSchweregradkleinerer FehlerReproduzierbarnicht getestet
Status geschlossenLösungerledigt 
Produktversion3.12.6 
Zielversion3.14.0Behoben in Version3.14.0 
Zusammenfassung0002360: Durgans Megawald
Beschreibung

Aus einer Email von Thomas (ts****ge@gmx.de):

Du weisst vielleicht, dass Durgan den Megawald in Yggdrasil hat. Ich habe im Chat gelesen, dass sie diesen auf ca. 3,4 Milliarden Baeume aufblasen wollen, genug Weinachtsbaeume sind wohl vorhanden.

Ich finde das ja an sich spassig die Grenzen auszutesten, allerdings sehe ich nicht, dass der Code in kernel/region.c das hergibt:

int rtrees(const region * r, int ageclass)
{
return ((r)->land ? (r)->land->trees[ageclass] : 0); }

...

int region_maxworkers(const region r) { int size = production(r); int treespace = (rtrees(r, 2) + rtrees(r, 1) / 2) TREESIZE; return MAX(size - treespace, MIN(size / 10, 200)); }

Ich sehe TREESIZE 8, selbst wenn es keine Schösslinge gäbe wäre bei 2*28 - 1 ein Überlauf. Bevor du dir da also die Finger wundsuchst wieso es nen Absturz oder komisches Verhalten gibt, hier ist wohl der Grund Evtl. solltest du mal an der Stelle einen assert einbauen, der dich, falls es wirklich so weit kommt, beim Debugging unterstützt.

Ansonsten frage ich mich gerade, wie man als Spieldesigner mit so einer Situation umgeht: nen hartes Limit reinbauen und den Spass verderben, es drauf ankommen lassen und dann ne Meldung rausgeben (Da ist so ein Wald ...) oder was man da tut. Ich fände es auch schade wenn dann so ein komplett krasser Wald auf einmal weg wäre. Aber überall auf 64 bit umstellen kommt mir etwas schwierig vor, wenn ich mir den Code so anschaue.

Zusätzliche Informationen

Kommentar von Thoralf:

Ich glaube, ein fixes Limit ist sinnvoll und durchaus im Sinne des Spiels. Es gibt solche Größen-Limits auch andernorts zB bei Schiffen und manchen Gebäuden. Theoretisch gilt das gleiche Problem auch bei Burgen, Leuchttürmen etc. Irgendwann werden auch dort Limits erreicht, die Integer & Co. zum Überlaufen bringen. Das wäre also kein Bruch im Spiel. Kann man solche Grenzen nicht mit Hilfe irgendwelcher Tools finden, die auf Speicherüberlauf testen?

TagsKeine Tags zugeordnet.
Partei0
SpielE2
Report1039

Notizen / Dateien

Enno

Enno

2017-08-27 20:02

Administrator   ~0007420

Die Region hat die ID 156835568, und hat z.Z. 21244160 Bäume. Noch ist das nicht die schlimmste Region. Den Rekord hält immer noch die UFO-Region Vosen mit 40773974 Bäumen.

Enno

Enno

2017-08-27 20:11

Administrator   ~0007421

Gefixt in commit 1ac64650 - bei 100 Mio ist jetzt erst einmal Schluß.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2017-08-22 20:58 Enno Neuer Eintrag
2017-08-22 20:58 Enno Status neu => zugewiesen
2017-08-22 20:58 Enno Bearbeitung durch => Enno
2017-08-27 20:02 Enno Notiz hinzugefügt: 0007420
2017-08-27 20:11 Enno Status zugewiesen => erledigt
2017-08-27 20:11 Enno Lösung offen => erledigt
2017-08-27 20:11 Enno Behoben in Version => 3.14.0
2017-08-27 20:11 Enno Notiz hinzugefügt: 0007421
2017-12-05 19:48 Enno Status erledigt => geschlossen