Du bist nicht angemeldet.

Eine Antwort schreiben

Schreibe deinen Beitrag und versende ihn
Beitragsoptionen
Bist Du ein Mensch oder ein Roboter ?

Verifizierung, dass diese Aktion durch eine reale Person vorgenommen wird und nicht von einem Programm.

Zurück

Themen-Übersicht (Neuester Beitrag zuerst)

Paneologe
04.10.2023 13:00
ani schrieb:

Könntest Du außerdem schauen, was passiert, wenn Du den Rechner neu startest (bzw. auch ausschalten und neu starten).
Nach dem Laden des Spiels wird der Seed nochmal aufgund von "MilliSecs()" gesetzt. Das könnte ggf. die Zeit sein, die der Rechner läuft und nicht die absolute Zeit.

ah, du warst ein paar minuten schneller.
Führe noch Softwareupdates durch (deswegen der hohe load). dann neustart. und dann TVTower :-)

und Edit:
läuft. Vielen Dank nochmal für die Unterstützung :-)

Paneologe
04.10.2023 12:58

Alles klar. es ist ein 32bit-integer overflow.
MilliSecs() scheint die uptime des computers in millisekunden auszugeben:
2^32/(60*1000*60*24)) = 24.855134815 (Tage)
und das passt:

# uptime
 12:57:48  up 24 days 23:03,  14 users,  load average: 6.10, 8.94, 9.17

schreit nach nem fix (ersatz int durch long?), wenn das Spiel nach 24 Tagen uptime nicht mehr läuft.

ani
04.10.2023 12:49

Könntest Du außerdem schauen, was passiert, wenn Du den Rechner neu startest (bzw. auch ausschalten und neu starten).
Nach dem Laden des Spiels wird der Seed nochmal aufgund von "MilliSecs()" gesetzt. Das könnte ggf. die Zeit sein, die der Rechner läuft und nicht die absolute Zeit.

Paneologe
04.10.2023 12:45

Ja, das war auch mein Ansatz, überlauf.
Die betroffene Funktion wird an mehreren Stellen aufgerufen:

./source/game.game.base.bmx:117:                SeedRand(MilliSecs())
./source/game.game.base.bmx:119:                SeedRand(0)
./source/game.game.base.bmx:363:                SeedRand(randomSeedValue)
./tests/persongenerator.bmx:5:SeedRand(Millisecs())
./unittests/test_tvfamily.bmx:33:               SeedRand(MilliSecs())

wollte das etwas debuggen. Woher auch die MilliSecs kommen?
es gibt MilliSecsLong und MilliSecs(), letzterer gibt ein Integer Wert aus, bei 64bit sollte das aber kein Problem darstellen. Wenn das ein 32bit integer ist..?
finde keine Definition der Funktion.

ok. neues Spiel, gleicher Fehler:

[12:43:57] DBG      | ====== PREPARE NEW GAME ======: 
[12:43:57] DBG      | TGAMESTATE.INITIALIZE(): Reinitialize all game objects
SeedRand got passed a negative seed "-2139214231". not allowed.

bin schonmal froh, dass es nicht am Savegame liegt :-)

ani
04.10.2023 12:09

Funktioniert denn der Start eines neuen Spiels?
Kannst Du testweise die Rechnerzeit manipulieren um zu schauen, ob das einen Einfluss hat (minus 1 Woche bzw. minus 1 Monat etc)? Ggf. haben wir es hier mit einem Überlaufproblem zu tun.

Man müsste auch nochmal schauen, warum der seed-Wert beim Laden eines Spielstands überhaupt noch einmal neu gesetzt wird (die Idee des persistierten Seeds wäre ja, dass er auch dauerhaft weiterverwendet wird).

Paneologe
04.10.2023 11:53
ani schrieb:

Ohne Garantie!
...

Vielen Dank :-)
der Wert im Spielstand ist aber bereits in diesem Range.

<field name="randomSeedValue" type="int">6468451</field>

Ein Ändern auf "1" erbrachte auch leider den gleichen Fehler :-(

[11:48:05] SAVE DBG |                : Savegame file "savegames/1sttry.xml" loaded in 22979ms.
[11:48:05] DBG      | TGAMESTATE.INITIALIZE(): Reinitialize all game objects
SeedRand got passed a negative seed "-2142565778". not allowed.

versuche das mal weiter zu debuggen, woher der Seed-Wert kommt. Kämpfe aber gerade noch damit, BlitzMax-NG zum laufen zu bringen..

ani
04.10.2023 11:41

Ohne Garantie!
1. Entpacker installieren (falls zstd im Terminal unbekannt ist)
sudo apt install zstd

2. Spielstand entpacken
zstd -d <Spielstand>.zst

3. Spielstand umbenennen (so dass Dateiendung .xml)
mv <Spielstand> <Spielstand>.xml

4. Seed im Spielstand ändern
<Spielstand>.xml mit geeignetem Texteditor öffnen und nach "randomSeedValue" suchen
dort müsste als Wert der in der Fehlermeldung stehende Wert durch einen passenden ersetzt werden - nimm einen positiven bis zu siebenstelligen

5. Spiel starten und den angepassten XML-Spielstand laden

Paneologe
04.10.2023 10:48

Hallo,
leider lädt das Spiel mein savegames (auch archivierte auto und quicksaves) nicht mehr und bringt nach dem Laden auf der Konsole den Fehler:
"SeedRand got passed a negative seed "-2146887846". not allowed." mit unterschiedlichen Zahlen.

die vollständige Ausgabe:

~/tvtower> ./TVTower_Linux64 
GL2 (with shaders) Active
GL2 (with shaders) Active
[10:35:08] INFO     | CORE: Starting TVTower, v0.8.1 Build "28.02.23 23:01".
[10:35:08] DBG      | CREATEDESKTOPFILE(): Created new TVTower.desktop file.
[10:35:08] LOAD     | TEVENTMANAGER.INIT(): OK
[10:35:08] DBG      | APPLYSETTINGS(): SetResolution = 1024x768
[10:35:08] DBG      | SOUNDMANAGER.SETAUDIOENGINE(): initialized with engine "AUTOMATIC [AUTOMATIC]".
[10:35:08] DBG      | PLAYMUSICORPLAYLIST: GetMusicStream from Playlist "menu" not possible. No Playlist.
[10:35:08] DBG      |                    : Music not found. Using random from default playlist
[10:35:08] DBG      |                    : could not start activeMusicChannel: no next music found
[10:35:08] DBG      | GRAPHICSMANAGER.INITGRAPHICS(): Initializing graphics.
[10:35:08] DBG      |                               : SetGraphicsDriver "OpenGL".
[10:35:08] DBG      |                               : Initialized graphics with "OpenGL".
[10:35:09] DBG      |                               : Initialized virtual graphics (for optional letterboxes).
[10:35:09] DBG      | APP.CREATE(): Loading base resources.
[10:35:09] DBG      | TSOUNDMANAGER.GETMUSICSTREAM(): Play music: sfx_music_title
[10:35:09] DBG      | PLAYMUSICORPLAYLIST: GetMusicStream by name "sfx_music_title"
[10:35:09] DBG      |                    : start activeMusicChannel
[10:35:11] LOAD DBG | STARTTVTOWER(): DEV RoundToBeautiful is enabled
[10:35:12] INFO     | TAPP.START(): loading time: 3503ms
[10:35:16] DBG      | DIALOGUES: Created LoadGame-Menu.
[10:35:18] DBG      |          : Closing Escape-Menu, continuing game.
[10:35:36] DBG      |          : Created LoadGame-Menu.
[10:35:47] DBG      |          : Closing Escape-Menu, continuing game.
[10:35:47] SAVE DBG | SAVEGAME.LOAD(): Restored TEntityBase.lastID=1222614, TGameObject.LastID=1222614.
[10:36:04] SAVE DBG |                : Savegame file "savegames/autosave.zst" loaded in 16706ms.
[10:36:04] DBG      | TGAMESTATE.INITIALIZE(): Reinitialize all game objects
SeedRand got passed a negative seed "-2146887846". not allowed.

Irgendeine Chance das Savegame zu restaurieren?

Bin über Tag 50 und bin sehr begeistert.
Ich war ein Fan von MadTV und MadTV2. Und dieses Remake ist mit Abstand das beste Spiel.

Vielen Dank und schne Grüsse

Paneologe