Giter Club home page Giter Club logo

tip-toi-reveng's Introduction

Das tttool hat jetzt eine deutsche Webseite für Anwender: http://tttool.entropia.de/

tip-toi-reveng

The goal of this project is to understand the file and paper format for the Ravensburger TipToi pen. The ultimate goal is that everyone can create their own books, with their own sounds.

The current status is that we understood most of the file format (see the GME file format specification). We provide a tool that allows you to dissect these files. The tool can also be used to generate completely new files from scratch; see below for details.

If you want to learn more please have a look into our wiki (https://github.com/entropia/tip-toi-reveng/wiki).

The tttool tool

Use the tool tttool to investigate the gme files and build new ones. It supports various subcommands:

GME creation commands:
  assemble                 creates a gme file from the given source

OID code creation commands:
  oid-table                creates a PDF or SVG file with all codes in the yaml file
  oid-codes                creates files for every OID in the yaml file (default: PNG).
  oid-code                 creates PNG files for each given code(s)

GME modification commands:
  set-language             sets the language field of an GME file
  set-product-id           changes the product id an GME file

GME analysis commands:
  info                     Print general information about a GME file
  export                   dumps the file in the human-readable yaml format
  scripts                  prints the decoded scripts for each OID
  script                   prints the decoded scripts for a specific OID
  games                    prints the decoded games
  lint                     checks for errors in the file or in this program
  segments                 lists all known parts of the file, with description.
  segment                  prints the segment that contains a specific offset
  explain                  print a hexdump of a GME file with descriptions
  holes                    lists all unknown parts of the file.
  rewrite                  parses the file and writes it again (for debugging)

GME extraction commands:
  media                    dumps all audio samples
  binaries                 dumps all binaries

Simulation commands:
  play                     interactively play a GME file

Run

./tttool --help

to learn about global options (e.g. DPI settings), and

./tttool command --help

for the options of the individual command.

Installation

We release tttool for Windows and Linux users as a zipfile. You can find them in the releases section of the GitHub project.

Linux users likely want to install additional packages. On Debian or Ubuntu, run sudo apt install libttspico-utils vorbis-tools

See Building.md for instructions on how to build tttool from source.

Building your own gme files

Once you have installed tttool, you can create your own .gme files. The process is as follows

  1. Record the audio samples you want to include, as Ogg Vorbis files, mono, 22050Hz. I use

    arecord -r 22050 foo.wav
    oggenc foo.wav
    rm foo.wav
    
  2. Write a my-book.yaml file containing some general information, and especially the scripts (i.e. what to do) for each OIDs (i.e. the various fields of a book). You can use the example.yaml file as a starting point; it contains more information in its comments.

  3. Run ./tttool assemble my-book.yaml, and make sure it reports no error, i.e. finishes silently.

  4. Copy the now generated my-book.gme to your TipToi pen and enjoy!

If you need to find out what OID code corresponds to what part of the book, you can generate a debug gme using the debug.yaml file, adjusting its Product-Id to your product’s id, building it with ./tttool assemble debug.yaml and loading the resulting debug.gme on your pen. It will then read out the codes, as a sequence of english digits.

If you want to convert existing audio files of almost any format, and you have ffmpeg installed, you can use

ffmpeg -i input-audio-in-some.fmt -ar 22050 -ac 1 foo.ogg

Text to speech

If you have libttspico-utils and vorbis-tools installed, you can have tttool generate audio files from text for you, which makes developing your yaml file much easier. See text2speech.yaml for more information.

Printing your own books

With the code in this repository, you can create GME files. This is even more fun if you can also create your own books! „Pronwan“ found out how that works, as you can see in this video demonstration. He also published 30 minute video tutorial (in German).

Press Review

TODO

  • What are all the header fields? (See wip/Header.md)
  • Finish decoding the games. (See wip/games.txt)
  • What is the purpose of the additional script table?

Other resources in this repository

  • oid-decoder.html allows you to manually decode an OID image.
  • gameanalyse.c and libtiptoi.c is an alternative tool to investigate gme files. It can also replace audio files in gme files; compile and run it for diagnostic output.
  • Audio/ contains some audio files, such as digits read out.
  • docs/ collects information about TipToi found elsewhere.
  • wip/ (work in progess) contains notes about the parts of the gme files that are not fully understood yet.
  • perl-tools contains a perl based script, to generate a PDF with all OID codes from a yaml-file as well some functions to generate PNG-files, inject pHYs-chunks with resolution hints into GD generated PNG files as result from some testing

tip-toi-reveng's People

Contributors

b-g-t avatar centic9 avatar chbw avatar colinba avatar ernie76 avatar exmackina avatar golpe82 avatar horstfrank avatar hunfeld avatar kontrafuss avatar larsweiler avatar m42e avatar m7thon avatar mercutiodesign avatar mrteutone avatar muelli avatar nchiapol avatar nimvek avatar nomeata avatar pronwan avatar ravotd avatar schaffstein avatar sengels avatar susonicth avatar tbleher avatar tronje-the-falconer avatar tsager avatar uli42 avatar waltner avatar wkraft-fablabka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tip-toi-reveng's Issues

Export & Import of games

  1. MP3s
    As the Tiptoi pen can play the very popular MP3s format, it would be great if tttool could use them for assembling of gme files, too.
    Can you modify tttool accordingly or is it too much effort?

  2. Export & import of games
    Exporting & modifying existing GMEs and then assembling them into new GMEs is maybe the most interesting practical application of tttool.
    I understand that currently games are lost by this procedure because their format is not yet 100% understood.
    I haven't followed all the discussion about this topic so let me ask a silly question: Would it be possible to export games and re-import them during assembling without any modification? Or do they contain for example pointers which are not yet fully understand and hence would break the game?

Support GME language field

The GME file format may specify a language. This is not yet supported in tttool. It should:

  • Print the language in tttool info.
  • Extract it upon tttool export
  • Write it to the GME in tttool assemble

Fehler beim Kompilieren tttools.hs

Hallo,

wie auf mikrocontroller.net besprochen, wende ich mich mit meinem Problem hier.

Wenn ich die Datei tttools.hs kompilieren will, bekomme ich folgende Fehlermeldungen:

ghc -O -with-rtsopts=-K100M tttool.hs

tttool.hs:1:42:
Warning: -XRecursiveDo is deprecated: use -XDoRec or pragma {-# LANGUAGE DoRec #-} instead
[1 of 1] Compiling Main ( tttool.hs, tttool.o )

tttool.hs:144:47:
Couldn't match expected type bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString' with actual typeBC.ByteString'
In the first argument of Br.fromLazyByteString', namelybs'
In the first argument of tell', namely (Br.fromLazyByteString bs)'
In the first argument of (>>)', namely tell (Br.fromLazyByteString bs)'

tttool.hs:182:5:
No instance for (MonadWriter Br.Builder m0)
arising from a use of tell' Possible fix: add an instance declaration for (MonadWriter Br.Builder m0) In the expression: tell In a stmt of a 'do' block: tell $ (Br.fromLazyByteString (B.replicate (fromIntegral (to - now)) 0)) In the second argument of($)', namely
`do { now <- get;
when (now > to)
$ do { fail
$ printf "Cannot seek to 0x%08X, already at 0x%08X" to now };
tell
$ (Br.fromLazyByteString
(B.replicate (fromIntegral (to - now)) 0));
modify (+ (to - now)) }'

tttool.hs:182:36:
Couldn't match expected type bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString' with actual typeBC.ByteString'
In the return type of a call of B.replicate' In the first argument ofBr.fromLazyByteString', namely
(B.replicate (fromIntegral (to - now)) 0)' In the second argument of($)', namely
`(Br.fromLazyByteString (B.replicate (fromIntegral (to - now)) 0))'

tttool.hs:194:23:
Couldn't match expected type BC.ByteString' with actual typebytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString'
In the expression:
Br.toLazyByteString $ execWriter (evalStateT act 0)
In an equation for `runSPut':
runSPut (SPutM act)
= Br.toLazyByteString $ execWriter (evalStateT act 0)

tttool.hs:333:40:
Couldn't match expected type bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString' with actual typeBC.ByteString'
In the return type of a call of BC.drop' In the second argument ofG.runGetState', namely
`(BC.drop (fromIntegral offset) bytes)'
In the expression:
G.runGetState act (BC.drop (fromIntegral offset) bytes) 0

tttool.hs:405:13:
Couldn't match expected type BC.ByteString' with actual typebytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString'
Expected type: SGet BC.ByteString
Actual type: SGet
bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString
In the expression: liftGet $ G.getLazyByteString (fromIntegral n)
In an equation for `getBS':
getBS n = liftGet $ G.getLazyByteString (fromIntegral n)

tttool.hs:1059:80:
Couldn't match expected type bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString' with actual typeBC.ByteString'
In the second argument of G.runGet', namelybytes'
In the first argument of (==)', namely G.runGet (G.skip (fromIntegral o) >> G.getWord16le) bytes'
In the second argument of (&&)', namely G.runGet (G.skip (fromIntegral o) >> G.getWord16le) bytes == 0'

tttool.hs:1148:31:
Couldn't match expected type bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString' with actual typeBC.ByteString'
In the first argument of Br.fromLazyByteString', namelybytes'
In the first argument of Br.append', namely Br.fromLazyByteString bytes'
In the second argument of ($)', namely Br.fromLazyByteString bytes Br.append Br.putWord32le checksum'
make: *** [tttool] Fehler 1

Ich verwende folgende Versionen:
ghc -> Version 7.4.1
bytestring->0.9.2.1
text -> 0.11.2.0
ghc-prim-> 0.2.0.0
integer-gmp -> 0.4.0.0
base ->4.5.0.0
template-haskell -> 2.7.0.0

Gruß,

Michael

Nummern der Sounds ändern sich nach Export -> Assemble

Das TTTool ist echt super weiter so.

Ich hab gerade angefangen mich mit der "WWW Bauernhof.gme" zu spielen.
Dabei ist mir aufgefallen das wenn ich die Datei mit Export in eine Yaml Konvertiere und ohne etwas zu ändern wieder mit Assemble eine Gme Datei erstelle ändern sich die Nummern der Sounds.
Überprüft hab ich das mit dem Kommando Play.

Das liegt vermutlich daran das bei den Sounds in der Gme Datei keine Namen oder Nummern mit abgespeichert werden und die einfach nur den Array Index bekommen.
Ist es möglich die Sounds wider in der alten Reihenfolge zu speichern?

Außerdem ist mir aufgefallen das sich die Anzahl der Media Dateien geändert hat. Zuerst waren es 620 jetzt nur mehr 428.
Hab ich da was falsch gemacht?

decode lint "Dein Koerper und du.gme" finds wrong overlaps

All media segments seem to overlap themselves (same offset, same size)

...
Offset 02185B66 Size 8902 (Header/Media/1441) overlaps Offset 02185B66 Size 8902 (Header/Media/2889) by 8902
Offset 02187E2C Size 9440 (Header/Media/1442) overlaps Offset 02187E2C Size 9440 (Header/Media/2890) by 9440
Offset 0218A30C Size 10103 (Header/Media/1443) overlaps Offset 0218A30C Size 10103 (Header/Media/2891) by 10103
Offset 0218CA83 Size 14821 (Header/Media/1444) overlaps Offset 0218CA83 Size 14821 (Header/Media/2892) by 14821
Offset 02190468 Size 13311 (Header/Media/1445) overlaps Offset 02190468 Size 13311 (Header/Media/2893) by 13311
Offset 02193867 Size 14175 (Header/Media/1446) overlaps Offset 02193867 Size 14175 (Header/Media/2894) by 14175
Offset 02196FC6 Size 7935 (Header/Media/1447) overlaps Offset 02196FC6 Size 7935 (Header/Media/2895) by 7935

Neuer "Simulate"-Modus ?

Um die gme-Datei testen zu können, muss diese
immer wieder mit assemble gebaut und nach dem Assemble immer wieder
auf den Stift kopiert werden. Dies finde ich sehr hinderlich. Ich habe einen alten Stift,
der dann immer abgeklemmt und gestartet werden muss.

Schöner wäre, den richtigen Sound direkt zu hören, nach dem man den
OID-Gewählt hat (simulate) wäre dann ein Modus, so dass die yaml-Datei erst gar nicht
in das gme-Format "komprimiert" werden müsste?

Dabei kam die Frage auf:
Könnte das tttool auch mit https://www.libsdl.org zusammenarbeiten?

Ein workaround ist für Windows:

  1. Download der Daten für die ogg-decodierung notwendig:
    DirectShow Plugin: http://xiph.org/dshow/
  2. Media-Player aus yaml-Datei aufrufen über: "FQ-Pfad zum WMP" "AudioDatei"
    Mittels https://msdn.microsoft.com/en-us/library/windows/desktop/dd562731(v=vs.85).aspx
    kann geprüft werden, ob der Windows-Media-Player (WMP) installiert ist.

Rewrite play commands in tttool

We now have 5 play commands;

  • FFE0 (written P(): play one random sample of the media list
  • FFE1 (written P(): play all samples of the media list
  • FFE8 (written P(m)): Play audio referenced by the mth entry in the indices list.
  • FB00 (written P(b-a)): Play all samples from that inclusive range. a := lowbyte(m), b := highbyte(m)
  • FC00 (written P(b-a)): Play one random sample from that inclusive range. a := lowbyte(m), b := highbyte(m)

First implement the missing ones, then change code to make them distinguishable in the yaml file. Maybe implement some generic play command that resolves to the one of the known commands that fits best (as the current implementation does).

include von yaml-Dateien

Für größere Aufgaben und Projekte,
kann es (wie in meinem Fall) gut sein, wenn
man die Scripte in verschiedenen Dateien ablegen kann,
die dann beim tttool play und beim tttool assemble zusammengebunden werden.

scripts:
# includings:
- include: "Pfad-zur-Include-Datei"

Ist diese nicht vorhanden, wird mit einem Text
Fehler:nn line:xx - Konnte include Datei: "Angabe" nicht finden.
abgebrochen.

Combine YAML files

Given two yaml files (e.g. the original one and the debug file) and a special sequence, combine them so that one can switch between these two.

Slightly less general: Add a command that takes a yaml file and adds a debug mode to it.

Save OID PNG files with correct DPI

Currently the generated OID PNG files are saved with 72 DPI. Saving them with the actually intended DPI (600 or 1200) would help when printing them from certain programs.

(It may be that they are currently saved without any DPI information and that my applocations (Mac OS X Preview and Gimp) just display the monitor default of 72 DPI.)

This is a minor issue.

game disassebmly

Well this is less an issue but a place to discuss (hopefully, this is ok for you).

I discovered in the file of Erste Buchstaben only one game is recognized but there are several games (21 I think).

But there are holes (11, one is about 120kB).

Does tttool offer a way of hex dump the unknown parts or also known parts? Would be a nice feature, wouldn't it?

I try to dig a bit deeper into the Erste Buchstaben file and report if I find something interesting.

Bye,
Matthias

Installation

Hello,
i have some Problems in installing the program on my pc !

  1. Install Haskell platform on my System (download and install) easy and done
  2. Install the dependencies. CMD cabal update and cabal install easy and done
  3. Now you can build the program using "make" ????? how ? where? what?
  4. At this point, tttool should be ready to go. If you run ./tttool you should see the list of commands shown above. ?
    I can start tttool.hs and it says "Ok, modules loaded: Main. "
    and the next line is *Main> but it isn't accepting any commands

Pls help me
I really want to play a little bit around with my tiptoi by using your code?

Bug in tttool play command

Hello,
my compiled gme file doesn't work in the tttool player. I got this output:

State now: $0=2 $1=1 $2=1 $3=101 $4=4 $5=2 $6=1 $8=4 $16=4
Next OID touched? 1425
Executing: $3>=100? $4:=1 J(9001)
Executing: $3==101? $2==$4? $16:=$4 J(9020)
Executing: $16==1? $1+=1 $0-=1 P(5) J(9021)
Playing audio sample 5
None of these lines matched!
$0> 0? $3:=101 J(9013)
$0==0? $3:=100 P(15)
State now: $0=1 $1=2 $2=1 $3=101 $4=1 $5=2 $6=1 $8=4 $16=1
Next OID touched?

The variable $0 is 1 but the line $0>0 does not match. Why? If I copy the gme file to the tiptoi pen it jumps to 9013. I'm using the tttool version 1.4

Generate wavs using text-to-speech software

Add a switch for the assemble command that generates wav files on the fly. This way you could hold all your text in the yaml file without maintaining any wav/mp3/oggs. Perfect during
testing/development. After you are satisfied with your yaml you cold
still create better sound files.

Here's the content of the mail I wrote that describes what needs to be done:

To make experimenting a bit easier and save some time I played around
with text-to-speech software. This is a little example how to use
text-to-speech software to generate your wavs using Ubuntu:

  1. sudo apt-get install libttspico-utils
  2. pico2wave -l en-GB -w cool.wav "tiptoi is cool"

-> you'll find cool.wav which you can listen to with play.

For conversion to .ogg I found dir2ogg:

  1. dir2ogg *.wav
  2. rm *.wav (tttool will complain if it finds both)

For the okto1 example yaml file (see below) you can this:


!/bin/bash

for i in homer marge lisa bart grandpa; do
pico2wave -l en-US -w $i.wav $i
done

pico2wave -l de-DE -w hallo.wav hallo
pico2wave -l de-DE -w Richtig.wav richtig
pico2wave -l de-DE -w falsch.wav falsch

pico2wave -l de-DE -w WoBarnius.wav "Wo ist Barnius"

$ cat okto1.yaml

product-id: 42
comment: test
init: $mode:=0

welcome: hallo

scripts:
8066:

  • $mode==0? $mode:=1 P(WoBarnius)
  • $mode==1? $mode:=0 P(grandpa)
    8067:
  • $mode==0? P(homer)
  • $mode==1? P(Falsch)
    8068:
  • $mode==0? P(marge)
  • $mode==1? P(Richtig)
    8069:
  • $mode==0? P(bart)
  • $mode==1? P(Falsch)
    8070:
  • $mode==0? P(lisa)

- $mode==1? P(Falsch)

Non-exhaustive patterns

I got a "tttool: tttool.hs:(782,1)-(786,54): Non-exhaustive patterns in function ppCondOp" using tttool on the "Das Tal der Tempel.gme". Anything I can do?

Feature-Request: add more information to the output of "tttool games"

This is all I want for christmas... ;-)

At the moment "tttool games" prints only the known cough or rather implemented cough parts of a game.
Looking at the same file with "tttool explain" may show some "-- unknown --" blocks related to the game.
For analyzing of the game functionality it would be great to have a little indicator to see if there are unknown parts left. E.g. "unknown code detected" at the end of the game. Details would still be in the "tttool explain" output.
This could also help for future use if more game types are added.

The definitely known parts should be listed with a useful description:
u1 = rounds, the repeat-oid and bonus-game rounds of u2, u3 = the points needed for a rank in the main or bonus game, etc.

For the already discovered, but still unknown parts (e.g. u2 [or what is left] for games and u for subgames) it would help, to have the - as we assume - 16 bit values as single lines and number them from u1 to un. As some unknown variables are only available in gametype 6, the numbering may have holes for games of any other types. When the games have n unknown variables, the subgames should start with u(n+1), to have unique identifiers for every unknown element.
This will blow up the output but makes it a lot easier to search a specific element in multiple files.
Also numbering the playlists would help me a lot to have a quick overview.
u3 should be renamed (maybe game-rank) and maybe could be grouped:
for gametype 6: [[9,0][1,0,0,0,0,0,0,0]] or in two lines with different descriptions (main-rank, bonus-rank or whatever)
for other gametypes: [9,8,7,6,5,4,3,2,1,0]

"deprecated" warning on compile

uli@traube:~/work/tiptoi/uli42/tip-toi-reveng-games$ make
ghc -O -with-rtsopts=-K100M decode.hs

decode.hs:1:42:
Warning: -XRecursiveDo is deprecated: use -XDoRec or pragma {-# LANGUAGE DoRec #-} instead

Simplified installation under OSX with Homebrew tap

I'm running OSX and wanted to try out tttool. I did not want to install manually, so I wrote a formula for Homebrew, the de facto package manager for OSX that I'm using anyway.

When you have Homebrew installed, you can simply install tttool like this:

brew tap awendt/tap
brew install tttool

Dependencies like haskell and Cabal are resolved by Homebrew using the formula, and the installation is cleanly sandboxed.

I'm not sure it's a good idea to sanction my repo as the "official tap" (you'd want things like that under your control) but I'd like to see a tap available nonetheless.

Thoughts on this? Would you be willing to create a formulae repo for entropia?

.\media\WWW_Bauernhof_orig_invalid_index_1.wav

I created by "tttool export" a yaml file from the original WWW_Bauernhof_orig.gme and exported all media by "tttool media".

As a first test for assembling an own gme, I then used "tttool assemble".
Tttool then comes up immediately with the error message:

Could not find any of these files:
.\media\WWW_Bauernhof_orig_invalid_index_1.wav
.\media\WWW_Bauernhof_orig_invalid_index_1.ogg
.\media\WWW_Bauernhof_orig_invalid_index_1.flac

This looks to me not like that the file "WWW_Bauernhof_orig_1.ogg" could not be found but like an index related issue.

Do you have any idea?

Offset after end of file

uli@traube:~/work/tiptoi/uli42/tip-toi-reveng-games$ ./decode info Reise\ durch\ die\ Jahreszeiten.gme
decode: Trying to read from offset 0x007E007D, which is after the end of the file!

007E007d looks like 2 16bit offsets, not one 32bit offset

Happens fpr alle three language versions of this product.

Feature request for decode: compress playlists

Some playlists are really large. Instead of

[1,2,3,4,5,6,7,8,9,10]

print

[1-10] or [1..10]

This would save a lot of space, e.g. in this game output of "Dein Koerper und du":

playlistlists: (10)
[[317,318,319,320,321,322,323,324,325,326],[327,328,329,330,331,332,333,334,335,336],[337,338,339,340,341,342,343,344,345,346],[347,348,349,350,351,352,353,354,355,356],[357,358,359,360,361,362,363,364,365,366],[367,368,369,370,371,372,373,374,375,376],[377,378,379,380,381,382,383,384,385,386],[387,388,389,390,391,392,393,394,395,396],[397,398,399,400,401,402,403,404,405,406],[407,408,409,410,411,412,413,414,415,416],[417,418,419,420,421,422,423,424,425,426],[427,428,429,430,431,432,433,434,435,436],[437,438,439,440,441,442,443,444,445,446],[447,448,449,450,451,452,453,454,455,456],[457,458,459,460,461,462,463,464,465,466],[467,468,469,470,471,472,473,474,475,476],[477,478,479,480,481,482,483,484,485,486],[487,488,489,490,491,492,493,494,495,496],[497,498,499,500,501,502,503,504,505,506],[507,508,509,510,511,512,513,514,515,516],[517,518,519,520,521,522,523,524,525,526],[527,528,529,530,531,532,533,534,535,536],[537,538,539,540,541,542,543,544,545,546],[547,548,549,550,551,552,553,554,555,556],[557,558,559,560,561,562,563,564,565,566],[567,568,569,570,571,572,573,574,575,576],[577,578,579,580,581,582,583,584,585,586],[587,588,589,590,591,592,593,594,595,596],[597,598,599,600,601,602,603,604,605,606],[607,608,609,610,611,612,613,614,615,616],[617,618,619,620,621,622,623,624,625,626],[627,628,629,630,631,632,633,634,635,636],[637,638,639,640,641,642,643,644,645,646],[647,648,649,650,651,652,653,654,655,656],[657,658,659,660,661,662,663,664,665,666],[667,668,669,670,671,672,673,674,675,676],[677,678,679,680,681,682,683,684,685,686],[687,688,689,690,691,692,693,694,695,696],[697,698,699,700,701,702,703,704,705,706],[707,708,709,710,711,712,713,714,715,716],[717,718,719,720,721,722,723,724,725,726],[727,728,729,730,731,732,733,734,735,736],[737,738,739,740,741,742,743,744,745,746],[747,748,749,750,751,752,753,754,755,756],[757,758,759,760,761,762,763,764,765,766],[767,768,769,770,771,772,773,774,775,776],[777,778,779,780,781,782,783,784,785,786],[787,788,789,790,791,792,793,794,795,796],[797,798,799,800,801,802,803,804,805,806],[807,808,809,810,811,812,813,814,815,816]]
[[817,818,819,820,821,822,823,824,825,826],[827,828,829,830,831,832,833,834,835,836],[837,838,839,840,841,842,843,844,845,846],[847,848,849,850,851,852,853,854,855,856],[857,858,859,860,861,862,863,864,865,866],[867,868,869,870,871,872,873,874,875,876],[877,878,879,880,881,882,883,884,885,886],[887,888,889,890,891,892,893,894,895,896],[897,898,899,900,901,902,903,904,905,906],[907,908,909,910,911,912,913,914,915,916],[917,918,919,920,921,922,923,924,925,926],[927,928,929,930,931,932,933,934,935,936],[937,938,939,940,941,942,943,944,945,946],[947,948,949,950,951,952,953,954,955,956],[957,958,959,960,961,962,963,964,965,966],[967,968,969,970,971,972,973,974,975,976],[977,978,979,980,981,982,983,984,985,986],[987,988,989,990,991,992,993,994,995,996],[997,998,999,1000,1001,1002,1003,1004,1005,1006],[1007,1008,1009,1010,1011,1012,1013,1014,1015,1016],[1017,1018,1019,1020,1021,1022,1023,1024,1025,1026],[1027,1028,1029,1030,1031,1032,1033,1034,1035,1036],[1037,1038,1039,1040,1041,1042,1043,1044,1045,1046],[1047,1048,1049,1050,1051,1052,1053,1054,1055,1056],[1057,1058,1059,1060,1061,1062,1063,1064,1065,1066],[1067,1068,1069,1070,1071,1072,1073,1074,1075,1076],[1077,1078,1079,1080,1081,1082,1083,1084,1085,1086],[1087,1088,1089,1090,1091,1092,1093,1094,1095,1096],[1097,1098,1099,1100,1101,1102,1103,1104,1105,1106],[1107,1108,1109,1110,1111,1112,1113,1114,1115,1116],[1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],[1127,1128,1129,1130,1131,1132,1133,1134,1135,1136],[1137,1138,1139,1140,1141,1142,1143,1144,1145,1146],[1147,1148,1149,1150,1151,1152,1153,1154,1155,1156],[1157,1158,1159,1160,1161,1162,1163,1164,1165,1166],[1167,1168,1169,1170,1171,1172,1173,1174,1175,1176],[1177,1178,1179,1180,1181,1182,1183,1184,1185,1186],[1187,1188,1189,1190,1191,1192,1193,1194,1195,1196],[1197,1198,1199,1200,1201,1202,1203,1204,1205,1206],[1207,1208,1209,1210,1211,1212,1213,1214,1215,1216],[1217,1218,1219,1220,1221,1222,1223,1224,1225,1226],[1227,1228,1229,1230,1231,1232,1233,1234,1235,1236],[1237,1238,1239,1240,1241,1242,1243,1244,1245,1246],[1247,1248,1249,1250,1251,1252,1253,1254,1255,1256],[1257,1258,1259,1260,1261,1262,1263,1264,1265,1266],[1267,1268,1269,1270,1271,1272,1273,1274,1275,1276],[1277,1278,1279,1280,1281,1282,1283,1284,1285,1286],[1287,1288,1289,1290,1291,1292,1293,1294,1295,1296],[1297,1298,1299,1300,1301,1302,1303,1304,1305,1306],[1307,1308,1309,1310,1311,1312,1313,1314,1315,1316]]
[[1317,1318,1319,1320,1321,1322,1323,1324,1325,1326],[1327,1328,1329,1330,1331,1332,1333,1334,1335,1336],[1337,1338,1339,1340,1341,1342,1343,1344,1345,1346],[1347,1348,1349,1350,1351,1352,1353,1354,1355,1356],[1357,1358,1359,1360,1361,1362,1363,1364,1365,1366],[1367,1368,1369,1370,1371,1372,1373,1374,1375,1376],[1377,1378,1379,1380,1381,1382,1383,1384,1385,1386],[1387,1388,1389,1390,1391,1392,1393,1394,1395,1396],[1397,1398,1399,1400,1401,1402,1403,1404,1405,1406],[1407,1408,1409,1410,1411,1412,1413,1414,1415,1416],[1417,1418,1419,1420,1421,1422,1423,1424,1425,1426],[1427,1428,1429,1430,1431,1432,1433,1434,1435,1436],[1437,1438,1439,1440,1441,1442,1443,1444,1445,1446]

Windows: `tttool media -d` bringt `usage`, wenn man ein Verzeichnis mit Leerzeichen angibt

Das tttool bringt, trotz Anführungsstrichen unter Windows die usage aus anstatt in das entsprechende
Verzeichnis die Meida-Dateien zu exportieren.

tttool.exe media -d "F:\ischniertshauer\OOPortable\Documents\KowHow\tipToi\tip-toi-reveng\media\008\00512 - Das Geheimnis der Zahleninsel\20100901\" Geheimnis_der_Zahleninsel.gme
bringt
Usage: tttool.exe [options] command ....

Erst ein ersetzen der Leerzeichen, macht den Export der medien:
F:\ischniertshauer\OOPortable\Documents\KowHow\tipToi\tip-toi-reveng>tttool.exe media -d F:\ischniertshauer\OOPortable\Documents\KowHow\tipToi\tip-toi-reveng\media\008\00512-Das_Geheimnis_der_Zahleninsel\20100901 Geheimnis_der_Zahleninsel.gme Audio Table entries: 965 Dumped sample 0 as F:\ischniertshauer\OOPortable\Documents\KowHow\tipToi\tip-toi-reveng\media\008\00512-Das_Geheimnis_der_Zahleninsel\20100901/Geheimnis_der_Zahleninsel_0.ogg

comment Tag has maximum length tttool should care of

While trying to create own project discovered the Fact that the Comment Line has a maximum of 49 characters. (including spaces, without leading Space after >comment:<

At the moment the following willl happen (tttool-win32-1.3)
if a comment exceeds this limit the gme file will be created but the resulting file will not be recocnized by the tiptoi-pen-

request 1:
tttool should at least warn about this problem and ask to abort or maybe shorten the text to apropriate maxsize

additional suggestions:
the example yaml files should mention Limits in Tags
the examples should contain tags like the speak funktions or the language Tag

create-debug is broken

I have several issues with tttool crete-debug:

uli@traube:~/work/tiptoi/tip-toi-reveng$ ./tttool create-debug debug42.gme 42Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.

OK, so I tried that:
uli@traube:~/work/tiptoi/tip-toi-reveng$ ./tttool +RTS -K10000 -RTS create-debug debug42.gme 42
tttool: Most RTS options are disabled. Link with -rtsopts to enable them.

Ok, I have added -rtsopts to tttool.cabal. I'll make a pull request for this.

  1. I'd like to generate the yaml-file for the debug file. Due to the issue above I am not sure if this is created. If not, there should be a way to only generate the yaml file.
  2. I'd like to create a text-to-speech debug version in German. Seems like this is not possible currently. Maybe a better way was to create a yaml file the user may adjust to his liking and in a second step use that yaml file to create the debug gme.

Make firstObjectCode unique for product id.

In order to make the object codes unique for different projects (and different from existing Ravensburger products, as far as possible) it would be nice if the firstObjectCode could be changed. Two modes would be useful.

  1. Manually set the firstObjectCode, or
  2. by default the firstObjectCode could be derived somehow from the product id.

The latter could be done by multiplying the product id with (sqrt(5)-1)/2 (Goldener Schnitt) to avoid collisions as far as possible.

play modus mit "OID-Liste"?

Im Moment teste ich mein 1x1-Spiel. Dabei durchlaufe ich viele Aufgaben/Lösungen-OID's. Gut wäre es, wenn man den Play-Modus mit einer Liste in der Form:
tttool play *.yaml "OID1,OID2,OID3....OIDn,OIDn+1 als Startwerte angeben kann.
Nach dem Ablauf der Liste wartet das tttool playdann auf die nächste OID.

assemble meldet alle fehlenden audiofiles in einer Liste

beim 'assemble' wird eine fehlende Audiodatei nach der anderen als fehlend
ausgeworfen:
'Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

F:\tip-toi-reveng\myProjects\rechenzwerg>"....\tttool (2).exe" assemble rechenkobold.yaml
Could not find any of these files:
../sounds/n42.wav
../sounds/n42.ogg
../sounds/n42.flac
../sounds/n42.mp3

F:\tip-toi-reveng\myProjects\rechenzwerg>"....\tttool (2).exe" assemble rechenkobold.yaml
Could not find any of these files:
../sounds/n48.wav
../sounds/n48.ogg
../sounds/n48.flac
../sounds/n48.mp3

F:\tip-toi-reveng\myProjects\rechenzwerg>"....\tttool (2).exe" assemble rechenkobold.yaml
Could not find any of these files:
../sounds/n49.wav
../sounds/n49.ogg
../sounds/n49.flac
../sounds/n49.mp3

F:\tip-toi-reveng\myProjects\rechenzwerg>"....\tttool (2).exe" assemble rechenkobold.yaml
Could not find any of these files:
../sounds/n54.wav
../sounds/n54.ogg
../sounds/n54.flac
../sounds/n54.mp3'

Kann das nicht als Eine Liste der Dateien kommen?
Und ohne Endung, damit es übersichtlicher ist, könnte
die Liste auch in 4 Spalten aus gegeben werden.

tttool does not recognize 'C' in script

I exported a gme file that contains a C in the script, which means cancel, and should be also recognized by the parser (I'm not familiar with haskel at the moment). But I get an error:

unexpected ' '
expecting end of input, Register action, Play action, Cancel or Start Game)

Any ideas?

Product IDs

Hi,

could you please provide a short introduction on how to write/create your own TipToi books/games. The movie published is awesome but a more detailed information on how to create non-conflicting product IDs etc. It would be greate to have a short written document that guids you through the process.

rename decode

I think a name like tttool would be more appropriate since the program does much more than only decode something.

Number games and subgames in "tttool explain", "tttol games" and "tttool export" from 1 to n

The games are internally numbered from 1 to n.
See gid-lists for gametype 8 e.g. in Bauernhof: gids: [9,10,11]
"tttool explain", "tttool games" lists the games from 0 to n-1.
The YAML-files generated by "tttool export" show G(0) to G(n-1).
It would be helpful, to have the output of the above functions in the same way as the internal games.

The subgames in "tttool explain" are numbered from 0 to n-1, but are internally numbered from 1 to n
See"playlistlist" which is a "subgamelistlist" for gametype 7 e.g in Bauernhof: playlistlist: [[1,2],[3..6],[7,8]]
"tttool games" doesn't even attach numbers to the subgames. Please add them for subgames counting from 1 to n (and add A and B for gametype 6).

Changing the numbers won't mess anything up, because import of games isn't possible by now.

Debugger

Hi,

I have tried: tttool create-debug debug.gme 20
but when i use it on the tiptoi it is not working.

I have tried it with Product-ID 20 (Bilderlexikon Tiere) which are the current books you get a McDonalds as far as i know. I am missing something?

Thanks!

openBinaryFile: resource exhausted (Too many open files)

Hallo,

zuerst einmal danke für dieses klasse Tool!

Ich habe ein Original-gme-Datei zerlegt (yaml extrahiert und media extrahiert). Wenn ich sie nun versuche, wieder zu assemblen, bekomme ich o.g. Fehlermeldung. Mache ich etwas falsch?

whats about the .rav files ?? gibt es schon Versuche eigene .rav Files zu erzeugen??

we produce some litle audio stuff together with our kids. It would be wonderful to play it on the tiptoy pen ..

Wir Produzieren kleine Hörspiele mit unseren Kindern und es wäre grandios wenn man die auf den TipToy Stift übertragen könnte ..

has anybody looked at the .rav file format??
Hat sich das .rav Format schon mal jemand angeschaut??

Grüße

Moving all shell, or other "tools" to a new folder?

Hallo Joachim,
immer mehr Skripte (gerne auch das von Daniela) kommen hinzu. Manche sind im "main"-Folder
vom Git, andere haben einen eigenen "Sub-folder".
Was hälst Du von einer "Restrukturierung" dieser Skripte?

creating OID within tttool

For better understanding and generating the OID's for Printing, can you make a matching table,
perhaps as yaml-file for generating the OID-Output?

Is there perhaps the possability to get some geometric foms for printing like:
square 10 (10mm) oder circle 10 (10mm diameter)? where the forms and measurements are
fixed in the code ...

Register names

Registers in YAMl file should be named, and then mapped to numerical registers by tttool.

Local registers should be available.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.