Urwigo gliedert sich in 5 Bereiche:
- links oben die Actions, also die Befehle
- darunter die Objekte, also vor allem die Zones, Items, Characters, Tasks (sieht der Spieler nachher direkt aufm Player) und weitere Objekte (Variablen, die Cartridge, das Spieler-Objekt, Media, Inputs)
- rechts die Properties des markierten Objektes
- unten in der Mitte eine ständig aktualisierte Fehlerliste
- und in der Mitte den freien Bereich in dem Skripte visualisiert werden.

Einstieg
Den Einstieg findet man, indem man das oberste Objekt (die Cartridge selbst) markiert und dann rechts auf das programmierte Ereignis "On Start" klickt. Dann erscheint in der Bildschirmmitte das erste Script.

Was passiert denn nun hier in dem Skript? Wenn die Cartridge gestartet wird, wird zuerst die Eigenschaft Display der Zone Penguin Pool auf true gesetzt. Und ebenso wird Active der Zone auf True gesetzt. Ausserdem wird die Aufgabe (Task) "Visit the penguin pool" auf sichtbar (display = true) und aktiv (active = true) gesetzt.
Der nun folgende Dialog ist schon recht trickreich. Wenn man den Dialograhmen selbst ankllickt, erscheinen rechts die Eigenschaften des gesamten Dialoges
Wenn man etwas weiter unten klickt, wird der erste Teildialog gewählt und rechts sieht man (bzw. kann natürlich verändern) das Icon zu diesem Dialog-Eintrag. Dadurch ist es einfach, richtig gute Dialoge mit wechselnden Sprechern zu erstellen.
Den Text des aktuellen Dialogteils sieht man zum Verändern, wenn man ihn anklickt.
Warum wird denn aber überhaupt die Zone aktiv geschaltet beim Starten? Ganz einfach, damit man einfach bei der Definition der Zonen diese alles unsichtbar macht und damit eine ganz klare Benutzerführung nachher beim Spielen hinbekommt.
Zonen
Wenn man in der Objektliste auf die "Zones" doppelklickt, erscheint im Hauptfenster die Liste aller Zonen (hier schon mit Bildern), rechts unten im Eigenschaftsfenster sind die programmierten Ereignisse (Ereignisbehandlungsroutinen) fett geschrieben, hinter denen Code programmiert ist.

Wenn man also in diesem Beispiel auf das Ereignis "On enter" (der Spieler betritt eine Zone, egal ob zum ersten oder erneut) klickt, erscheit der passende Code. Das hier ist Code, der beim Betreten der Zone "Penguin Pool" abläuft. Im Wesentlichen ist hier ein Vergleich (if/else) mit 2 verschiedenen Varianten programmiert, je nachdem in welchem Zeitpunkt des Spieles man gerade ist.

Actions
Hier nun ein kleiner Überblick über alle zur verfügung stehenden Aktionen mit kleinen Anmerkungen dazu

- If/else - Abfragen von Bedingungen, danach muss immer ein oder mehrere "Compare"-Ausdrücke kommen
- Random Decision - mit einem einstellbaren Zufallsverhältnis kann z.B. ein Würfel simuliert werden und abhängig von Zufallszahlen verschiedene Varianten als Folge ausgelöst werden.
- Increment/decrement - Hoch bzw. Runterzählen einer Variablen
- Set - damit können Eigenschafts-Werte von Objekten gesetzt werden
- Move - Items und Characters können damit in eine andere Zone oder zu einem Character bewegt werden. Man kann auch ein Item in ein anderes Item "hineinlegen".
- Dialog - ein mehrstufiger Dialog zwischen mehreren Characters, jedem einzelnen Dialog kann ein anderes Bild zugeordnet werden, wodurch dann beim Spielen eine Art Comic.Effekt entsteht.
- Message - eine einfache Variante des Dialoges
- Beide (Dialog und Message) können bis zu zwei Schalter (Buttons) enthalten, die im OnClick.-Ereignis ausgewertet werden können
- ShowScreen - eine fehlerhafte Action, mit der man einen von 5 Bildschirmseiten anzeigen können soll. Auf Garmi Geräten darf man aber nur den Main-Screen (also das Hauptfenster) aufrufen. Bei verwendung vom Item- / Characters- / Locations- oder Tasks-Screen stürzen die Garmins ab.
- Input - zur Anzeige der als eigene Objekte zu definierenden "Inputs" (also Fragen an den Spieler)
- Start Timer / Stop Timer - Zum Starten und Stoppen der bei den Objekten zu definierenden Timer. Diese haben eine Ablaufzeit und jeweils ein passendes Ereignis für den Start und den Stopp.
- Play Sound / Stop Sound - funktionieren nicht auf Garmins, deswegen verwende ich die nicht.
- Save Game - speichert das Spiel, ich blende danach immer einen passenden Dialog ein ("Dein Spiel wurde gespeichert")
- User Code - eigenen LUA-Code aufrufen
- Comment - Kommentare und Erläuterungen in den Code einbauen

- Compare - Innerhalb einer If/else-Aktion kann man hiermit Vergleiche anstellen.
- And / Or - Logische Operatoren in Vergleichen
- Numeric Operation - Addieren, Subtrahieren, Multiplizieren usw. inklusive Rundungsfunktion
- Concatenate - String-Addition, hier zum Beispiel wird der Spieler mit seinem Namen begrüßt. Der Name ist in der Cartridge gespeichert, die man von der Wherigo-Webseite heruntergeladen hat und entspricht dem Login-Namen.
- Contains ("enthält") - damit kann man überprüfen, wo sich ein Item oder Character gerade befindet. Siehe dazu auch den Screenshot, in dem überprüft wird, ob der Spieler das Objekt "Cake" in seinem Inventar hält.
- Value - ein "Platzhalter" für einen beliebigen Wert, wird im obigen Beispiel gebraucht um den Text "Hallo mein Spieler" zu halten.
- Answer - kann nur in Behandlungsroutinen von Input-Objekten verwendet werden und enthält dann die Eingabe des Spielers
- Command Target - Sehr leistungsfähig, denn damit kann man in der Behandlungsroutine eines beliebigen Kommandos überprüfen, an wen sich das Kommando richtet. Mehr dazu weiter unten.
- Message Button - damit kann man überprüfen, welcher Schalter in einem Dialog angeklickt wurde
- Distance to a zone - Enthält die Entfernung zu einer bestimmten Zone, nicht nur in Metern, sondern auch in den Werten "inside" oder "in proximity" (in der Nähe)
- Random Number - Zufallszahl zwischen 0 und 1
- In Emulator - wird gerade im Emulator gespielt?
- DateTime - in sehr vielen Varianten auswählbare Darstellung der aktuellen Uhrzeit
- User Expression - beliebiger LUA-Code, von mir noch nicht verwendet.

Die Stärke einer Cartridge liegt in der Verwendung von Kommandos (Commands). Die naheliegenden "On Click"-Ereignisse darf man nicht verwenden, da die Garmin Software hier auch abstürzt. Wenn man aber schöne und selbsterklärende Kommandos zu jedem Item oder Character definiert, bekommt das Spiel seinen Handlungsstrang. Hier z.B. werden für Objekt "Honig" zwei Befehle "Give" und "Examine" (also gib und untersuche) definiert, in deren Ereignisbehandlungsroutingen ("handled") dann der entsprechende Code ausprogrammiert ist.

Und nun?
Ja, wie fängt man nun an mit einem Wherigo Cache? Ich habe mir zuerst ganz intensiv mehrere OpenSource Cartridges angeschaut und davon gelernt. dann habe ich einen von denen übersetzt und hierher "verlegt".
Bei meiner ersten eigenen Cartridge habe ich zuerst eine Art grobes Drehbuch runtergeschrieben, die Zonen, Items und Charaktere definiert und Bilder dazu gesucht.
Erst danach habe ich mit dem Urwigo angefangen zu programmieren, das ging dann recht schnell von der Hand.
Wichtig ist wohl noch, dass man testen, testen, testen muss und an möglichst alle Varianten denken muss, die während des Spiels auftreten können.