Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lint #239

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

Lint #239

wants to merge 7 commits into from

Conversation

tbleher
Copy link
Contributor

@tbleher tbleher commented Dec 5, 2020

Entsprechend der Diskussion in #238 habe ich mich mal an einem lint-Check für J() versucht. Tatsächlich scheint es bei allen TipToi-Files von Ravensburger nur maximal einen J()-Befehl pro Zeile zu geben, immer am Ende.
Beim Testen habe ich mir gewünscht, dass tttool lint sich bei Fehlern mit einem passenden Exit-Code beendet. Das war eine gute Ausrede, um die IO-Monad etwas besser kennenzulernen :)
Kommentare wie immer herzlich willkommen.

nomeata and others added 6 commits November 30, 2020 22:05
and a bit more files for the test suite
Most or all Ravensburger GMEs have a duplicated Audio table. Most of
them have an identical copy, but it seems not all. For those where the
table is 80% equal, treat it like a copy (and throw away the extra
information for now).

It remains future work to make sense of this extra table.
Since commit 8e49687 ("Allow referencing audio files with filenames
outside [a-zA-Z0-9_] (entropia#236)"), all filenames could be given to the play
command, however the user had to cut off the file extension manually.
First search for the full filename, before trying with the standard
extension.

To allow basic filenames without quoting, "." is now also allowed in
identifiers for the play command.

Idea and code suggestion by Joachim Breitner.

Co-authored-by: Thomas Bleher <[email protected]>
As discussed in entropia#231 and entropia#238, TipToi pens handle a jump after all other
actions (even if they are earlier in the list). If there are multiple
jumps, only the last has an effect. This lint check verifies that a GME
only contains one jump, and that the jump is the last action. This check
is true for all GMEs published by Ravensburger.
This makes it easier to use `tttool lint` in scripts.
@tbleher
Copy link
Contributor Author

tbleher commented Dec 6, 2020

Nachdem ich eine Nacht darüber geschlafen habe: der Grund für #238 war, dass ich ein Skript über mehrere Codes aufteilen musste, um das Limit mit 8 Kommandos zu umgehen. Der naive Ansatz mit "P(datei) J(nextOid)" führte aber zu den problematischen 2s-Pausen nach dem J()-Kommando. Entsprechend dem Vorschlag im TipToi-Buch habe ich auf "J(nextOid) P(datei)" umgestellt, was auf dem TipToi gut funktioniert, nur mit tttool play nicht. Daher #238.

Hier zeigt sich nun, dass der oben genannte Trick anscheinend in TipToi-Büchern von Ravensburger nicht verwendet wird. Man muss also wohl nochmal nachschauen, wie sie das 2s-Pausen-Problem lösen.

@nomeata
Copy link
Member

nomeata commented Dec 6, 2020

Hier zeigt sich nun, dass der oben genannte Trick anscheinend in TipToi-Büchern von Ravensburger nicht verwendet wird. Man muss also wohl nochmal nachschauen, wie sie das 2s-Pausen-Problem lösen.

Das wäre interessant herauszufinden. Kann es sein dass die Ravensburger GMEs vielleicht entweder J oder P Befehle in einer Zeile haben?

Copy link
Member

@nomeata nomeata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Schön! Ich hab ein paar kleine Vorschläge, mehr um dein Haskell zu verfeinern :)

src/Commands.hs Outdated Show resolved Hide resolved
src/Lint.hs Outdated Show resolved Hide resolved
src/Lint.hs Outdated Show resolved Hide resolved
@tbleher
Copy link
Contributor Author

tbleher commented Dec 6, 2020

Hier zeigt sich nun, dass der oben genannte Trick anscheinend in TipToi-Büchern von Ravensburger nicht verwendet wird. Man muss also wohl nochmal nachschauen, wie sie das 2s-Pausen-Problem lösen.

Das wäre interessant herauszufinden. Kann es sein dass die Ravensburger GMEs vielleicht entweder J oder P Befehle in einer Zeile haben?

Interessante Idee. Tatsächlich scheint nur Abenteuer_Supermarkt.gme P und J gleichzeitig zu haben:

$ grep J\( *.yaml | grep P\(
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $13==0? $8+=1 $13:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $16==0? $8+=1 $16:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $17==0? $8+=1 $17:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $10==0? $8+=1 $10:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $8==10? $7:=0 $8:=0 P(589) J(10361)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $18==0? $8+=1 $18:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $11==0? $8+=1 $11:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $14==0? $8+=1 $14:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $9==0? $8+=1 $9:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $12==0? $8+=1 $12:=1 P(591) J(10360)
Abenteuer_Supermarkt.yaml:  - $0==1? $7==1? $15==0? $8+=1 $15:=1 P(591) J(10360)

Co-authored-by: Joachim Breitner <[email protected]>
@tbleher
Copy link
Contributor Author

tbleher commented Dec 6, 2020

Schön! Ich hab ein paar kleine Vorschläge, mehr um dein Haskell zu verfeinern :)

Vielen Dank Dir! Das hilft mir :)
Falls Du lieber saubere Commits haben möchtest, kann ich die Änderungen auch noch in die beiden Commits einpflegen.

@nomeata
Copy link
Member

nomeata commented Dec 6, 2020

Ich mach eh Squash commits, also brauchst du nicht Aufräumen.

Wäre spannend zu sehen ob der Supermarkt auch den 2s-Bug hat. Wenn du motiviert bist, dann drucke doch die entsprechenden Codes aus und probiere es (das Problem hängt glaub von der Stift-Version ab).

@tbleher
Copy link
Contributor Author

tbleher commented Dec 8, 2020

Wäre spannend zu sehen ob der Supermarkt auch den 2s-Bug hat. Wenn du motiviert bist, dann drucke doch die entsprechenden Codes aus und probiere es (das Problem hängt glaub von der Stift-Version ab).

Werde ich die nächsten Tage mal machen. Ich weiß nur noch nicht genau, wann ich dazu komme.

@tbleher
Copy link
Contributor Author

tbleher commented Jan 30, 2021

OK, "nächste Tage" hat leider länger gedauert, aber jetzt kam ich endlich dazu.
Ich konnte bei Abenteuer_Supermarkt.gme kein 2s-Problem feststellen (weder mit einem Stift mit Player, noch mit einem neueren mit Aufnahmefunktion).

Der Code ist interessant strukturiert (hier nur die Cases, die von den Variablen-Inhalten her matchen):

  '10087':
  - $0==1? $7==0? $7:=1 P(587) P(588)

Das startet ein Spiel, wo man insgesamt 10 Dinge finden muss.

Hier der Code der Items, immer nur für den Fall, dass man das erste Mal draufdrückt:

  '10093':
  - $0==1? $7==1? $9==0? $8+=1 $9:=1 P(591) J(10360)
  '10094':
  - $0==1? $7==1? $10==0? $8+=1 $10:=1 P(591) J(10360)
  '10095':
  - $0==1? $7==1? $11==0? $8+=1 $11:=1 P(591) J(10360)
  '10096':
  - $0==1? $7==1? $12==0? $8+=1 $12:=1 P(591) J(10360)
  '10097':
  - $0==1? $7==1? $13==0? $8+=1 $13:=1 P(591) J(10360)
  '10098':
  - $0==1? $7==1? $14==0? $8+=1 $14:=1 P(591) J(10360)
  '10099':
  - $0==1? $7==1? $15==0? $8+=1 $15:=1 P(591) J(10360)
  '10100':
  - $0==1? $7==1? $16==0? $8+=1 $16:=1 P(591) J(10360)
  '10101':
  - $0==1? $7==1? $17==0? $8+=1 $17:=1 P(591) J(10360)
  '10102':
  - $0==1? $7==1? $18==0? $8+=1 $18:=1 P(591) J(10360)

D.h. pro Item gibt es eine Variable, wo er sich merkt, ob man es schon gefunden hat. Dazu einen Zähler in $8.

Hier der Code für 10360 und folgende:

  '10360':
  - $0==1? $8==10? $7:=0 $8:=0 P(589) J(10361)
  '10361':
  - $0==1? $9:=0 $10:=0 $11:=0 J(10362)
   '10362':
  - $0==1? $12:=0 $13:=0 $14:=0 J(10363)
  '10363':
  - $0==1? $15:=0 $16:=0 $17:=0 J(10364)
  '10364':
  - $0==1? $18:=0

Hier wird also noch eine Text ausgegeben, und dann (über mehrere OIDs verteilt) alle Variablen wieder zurückgesetzt.

Ich denke man braucht noch weitere Experimente mit eigenen Dateien, um herauszufinden, warum es hier keine 2s Pause gibt. Liegt es an den Zuweisungen, die dazwischen sind? Oder daran, dass danach noch weitere Jumps kommen?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants