Seite 1 von 2

"code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Sa 27. Mär 2021, 18:19
von Saibantes
Hallo zusammen,

ich habe plötzlich Lust bekommen, dieses uralte Spiel wieder zu spielen und habe die CD von damals wiedergefunden - dass das Spiel erst kürzlich auf GOG und Steam erschienen ist, ist dabei komplett Zufall. Aber so gibt es vielleicht mehr Leute, die es jetzt auch spielen, deshalb wollte ich etwas teilen, was ich herausgefunden habe.

Ich habe am Anfang der Kristallwelt wieder einmal das Problem, dass meine Wiggles stets schlecht gelaunt sind. Dabei stehen sie mit größter Vorliebe vor den Freizeitzentren (Bowlingbahn, Theater, ...) herum und reden darüber, dass man ja keine Freizeitaktivitäten gäbe.

Ist das Remake von der Spielmechanik irgendwie anders als das Original, oder ist nur die Kompatibilität mit Win7+ verbessert worden?

Zumindest die alte Version wird zu einem großen Teil von Tcl-Scripten gesteuert. Ich habe jetzt etliche Zeit damit verbracht, den Code zu verstehen und zu debuggen (-> "printf-debugging"). Dabei ist mir ganz besonders negativ die Routine aufgefallen, die berechnet, welche Freizeitaktivität (Bar, Theater, Fitness, Bowling, Disco) der Wiggle als nächstes machen will:
(Wie ihr vielleicht schon wisst, hat jeder Wiggle zwei "Lieblingsattraktionen", die davon abhängen, welcher Stat (Nahrung, Holz, Stein, ...) der höchste ist.) Der Wiggle bevorzugt nun stets die Attraktion, für die sich der Partner bereits entschieden hat. Wenn es keinen Partner gibt oder der gerade keine Attraktion besucht, dann bevorzugt er/sie die Attraktionen, die gerade eben nicht zu den Lieblingsattraktionen gehören. Darüber hinaus bevorzugt er/sie Attraktionen, die weiter entfernt sind (solange sie nicht komplett außer Reichweite sind). Ich habe den Eindruck, dass der Entwickler hier das Vorzeichen verdreht hat oder beim "lsort" ein "-desc" vergessen hat. Darüber gibt es noch ein Stück Code, der danach aussieht, als ob auch die zuletzt besuchten Attraktionen mit in die Entscheidung einfließen sollen. Dieser Code ist aber nicht wirksam, weil er die falsche Variable verwendet ('sparetime_recent_places' statt 'sparetime_recent_fun'), die immer leer ist.
Für interessierte: Das ist die proc 'sparetime_place_find' in Data\Scripts\classes\zwerg\z_spare_fun.tcl. Dort wird zu jedem 'place' eine 'pathcost' und 'da' ermittelt, daraus dann der Score 'jm' (niedriger ist besser).


Etwas seltsam finde ich auch, dass die Bewertung, wie der Wiggle mit der Vielfalt des Freizeitangebotes zufrieden ist, komplett unabhängig davon ist, nach welchen Kriterien er sein Besuchsverhalten steuert.
Die Vielfalt bewertet er dann als optimal, wenn er jede der fünf (oben bereits genannten) Attraktionen in seinem Leben exakt ein mal besucht hat. Wenn er dann im Anschluss eine Attraktion ein zweites Mal besucht, verschlechtert sich seine Bewertung. Wenn die Attraktion, die er ein zweites Mal besucht, eine seiner beiden Lieblingsattraktionen ist, ist der Abzug sogar größer.



Ich habe vor, das für mich mal zu verändern. Außerdem wollte ich mir als nächstes angucken, wie die Wiggles während der Arbeitszeit sich für die nächste Aktion entscheiden. Das scheint aber nicht in den Scripten sondern im kompilierten Code zu sein. Ich werde dann mal ausprobieren, ob man den Code "stilllegen" kann und dann in Tcl eine "bessere" Variante implementieren kann.

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Sa 27. Mär 2021, 18:29
von cech12
Hey!

Freut mich immer wieder zu hören, dass jemand das Spiel wiederentdeckt hat :)

Erstmal zu deiner Frage: Einige wenige Bugs wurden in der Steam/Gog Version behoben und ansonsten ging es da vor allem um die Kompatibilität mit den neueren Betriebssystemen und um Stabilität. Daher sind die beschriebenen Probleme dort auch noch enthalten, soweit ich weiß.

Ich freu mich gerade riesig, dass du dich damit beschäftigt hast und auch noch beschäftigst :)
Ich wäre vor allem im Rahmen des DigglesModManagers und der zugehörigen Bugfix-Mod daran interessiert, was genau du veränderst und welchen Einfluss das hat :) Vielleicht können wir deine Änderungen dann dort mit aufnehmen, um das Spiel spielbarer zu machen :) Würde mich auf jeden Fall freuen. :D

Viele Grüße
Chris

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: So 28. Mär 2021, 03:02
von Homerclon
Das du da potentielle Möglichkeiten zur Bugbehebung gefunden ist, klingt Super.
Wenn es klappt, teile es doch bitte hier. :)

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: So 28. Mär 2021, 20:09
von Saibantes
Ich arbeite dran, das ist aber keine kleine Aufgabe. ;)
Primär versuche ich, den Code erst mal zu verstehen. Ich habe einige Ideen, die ich aber noch nicht umgesetzt habe. Ich habe mich erst mal an ein paar Bugs gemacht, die mir beim experimentieren aufgefallen sind.

Z.B. hängen die Zwerge gerne fest, wenn sie miteinander reden wollen, der eine aber gerade noch eine Freizeitbeschäftigung (konkret habe ich es in meinem Savegame beim Fitnesscenter gesehen) gemacht hat.
Korrktur: In der z_spare_talk.tcl diese Zeile am Anfang der proc sparetime_talk_start
"place" sparetime_place_end}
durch diese ersetzen:
"place" {tasklist_add this "sparetime_place_end; set sparetime_fun_mode talk"}
Vermutlich auch entsprechendes in den anderen beiden switch-Zweigen, aber das sehe ich mir noch an.

Jetzt gerade sehe ich immer wieder, dass die Zwerge vor der Bowlingbahn festhängen. Das hängt mit der merkwürdigen Reservierungsfunktion zusammen. Ich verstehe noch nicht, was die Entwickler damit beabsichtigt haben.


Geplant habe ich, die Bewertung der Qualität der Angebote durch die Zwerge anzupassen. Ganz besonders negativ fällt mir auf, dass gerade erst erwachsen gewordene Zwerge bei höheren Zivilisationsstufen über alles meckern, was sie aus Zeitgründen noch nie besucht haben, und entsprechend die ersten Tage sehr schlecht gelaunt sind.


Natürlich bin ich für Hilfe dankbar. :roll:
Konkret:
  • Kann man irgendwie Tcl-Fehler in den Event- und State-Handlern einsehen? Die tclerrors.txt scheint ja nur für die Initialisierung zu funkionieren.
  • Sehe ich das richtig, dass die Variable sparetime_disappointment geschrieben wird, aber nie für irgendwas verwendet wird? Es gibt auch noch spt_disappointment, die wird aber verwendet.
  • Sehe ich das richtig, dass sparetime_disapp_rates auf 0 initialisiert wird, und dann niemals verändert wird?
  • Sehe ich das richtig, dass sparetime_recent_places auf "" (leere Liste) initialisiert und dann niemals verändert wird?
  • Was zum Henker mach die proc sparetime_find_talker? So wie ich das sehe: Wenn ein Zwerg am liebsten gerade reden will, aber keinen Gesprächspartner finden kann (den würde er in sparetime_talk_find finden - Vorsicht, andere Datei), dann sucht er jemanden der gerade was anderes tut, läuft zu dem hin und starrt dann Löcher in die Luft - anstatt erst mal was anderes (Baden, Wohnzimmer) zu machen. Warum?

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Do 8. Apr 2021, 19:49
von cech12
Hey!

Sorry, für die späte Antwort, aber irgendwie habe ich keine Benachrichtigung bekommen :roll:
Nächste Woche habe ich hoffentlich ein bisschen Zeit, mich mal damit zu beschäftigen :) Dann kann ich dir auch ein paar deiner Fragen beantworten und vielleicht habe ich ja auch ein paar Einfälle ^^

Aber vielleicht bist du ja auch schon etwas weiter gekommen?! ^^

Viele Grüße
Chris

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Sa 10. Apr 2021, 21:52
von Saibantes
Ich bin um einiges weitergekommen, aber vieles fehlt immer noch. Hauptberuflich muss ich halt arbeiten, und ich verwende auch nicht meine gesamte Freizeit mit diesem Projekt...

Ich habe einige kleine Bugs gefunden und repariert. Der genannte Bugfix aus meinem letzten Post funktioniert übrigens nicht ganz, da muss ich noch mehr machen...
Ich habe Ideen für die Bewertungsfunktionen und das Freizeit-Verhalten, die ich noch umsetzen will.

Die Zuteilung der Arbeitsaufgaben scheint nicht in Tcl vorzuliegen, dass ist komplett in der Kompilierten EXE. :( Also muss ich (1) die komplett von Null beginnend implementieren und (2) den vorhandenen Scheduler lahmlegen, so dass er mir nicht dazwischenfunkt. Und genau da bin ich gerade dabei. Sind schon ca. 1000 Zeilen, und noch kein Ende abzusehen...


Was ich beim besten Willen nicht hinbekomme, ist in den Produktionsstätten anzuzeigen, welcher Wiggel dort gerade arbeitet, wenn ich den selber dorthin geschickt habe. :(


Ansonsten würde mich wirklich interessieren, ob der Tcl-Code von Steam/GOG exakt identisch ist mit meiner CD-Version von Anno Dunemals. Ich will jetzt niemanden dazu auffordern, mir die zuzuschicken, weil das wohl Urheberrechtlich bedenklich ist (auch wenn der Krams ohne den Rest nutzlos ist), also werde ich mal irgendwie Hashes ausrechnen lassen.

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Sa 24. Apr 2021, 20:38
von zed2000
Beim Debuggen kann dir das viewtopic.php?f=10&t=315 helfen. Damit kannst du dir eine Interaktive Python Jupyther Shell an jeder beliebigen TCL Zeile starten, Variablen angucken, und vieles mehr.

tclerrors.txt wird wohl nur für StartUp verwendet.

Der Produktionsscheduler ist, wie du bereits herausgefunden hast, wohl in die Exe kompiliert. Es gibt einige tcl Commands, die den Scheduler triggern. Fraglich ist mir noch, ob es eine Scheduler Loop innerhalb der Exe gibt, an die man leider aus TCL nicht herankommt. Da rumdrum zuarbeiten wäre spannend.

All zu viele Tcl Patches gibt es bei der Steam Version 2.1.1.10 nicht, wenn es überhaupt welche gibt...
Als Basis wurde nicht die in Deutschland verbreitete Version 1.0.844 genutzt, sondern eine neuere, die wohl in anderen Breitengraden verkauft wurde.

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Di 27. Apr 2021, 21:33
von Saibantes
Ich habe es mittlerweile geschafft, den EXE-Scheduler stillzulegen (die beste Methode scheint zu sein, alle Aufrufe "gnome_idle this 1" durch "prod_gnomeidle this 1" zu ersetzen - alternativ kann man die entsprechenden Events evt_autoprod_* und evt_change_muetze ignorieren) und das meiste durch einen Tcl-Scheduler zu ersetzen. Dadurch, dass man damit von Null beginnen muss, ist das eine ganze Menge Code. Ich bin mittlerweile bei ca. 1200 Zeilen verteilt auf 4 neue Dateien... Momentan fehlt das Erfinden noch komplett, und das Graben geht mehr schlecht als recht (aufgrund der dürftigen Tcl-Interfaces ist das der komplizierteste Teil).

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: Fr 30. Apr 2021, 04:01
von Homerclon
Da hast du dir ja einiges vorgenommen.
Ich verstehe davon leider zu wenig um zu helfen. Könnte höchstens als Tester fungieren, aber bevor es ans testen geht scheint es noch eine weile zu dauern.

Re: "code review": die wirren Verhaltensmuster der Wiggles

Verfasst: So 19. Dez 2021, 03:54
von soutrain
Bist du immer noch am Code dran?

Da Wiggles nun auf Steam und GOG ist, könntest Du Dich mit deinen Erkenntnissen und Code vieleicht an Elena Roor wenden, die mit ihrem Team das Spiel auf die Platformen gebracht hat. Hier ein Interview mit ihr über das Projekt und die Schwierigkeiten mit dem Code:

https://www.4players.de/4players.php/sp ... ungen.html