[Tiptoi] tt-homebrew A-star pathfinding

Jens Georg jens.georg at biologie.uni-freiburg.de
Mo Nov 11 08:24:40 CET 2024


Hallo,
ich muß noch mal meiner Begeisterung Ausdruck verleihen, was jetzt
alles möglich ist ;-). 

Man kann sogar A* pathfinding (JPS geht auch, habe ich aber in C noch
nicht ans laufen gekriegt) auf ziemlich großen Grids und in Echtzeit
machen. Fast wie in Warcraft3.  Ein Beispiel habe ich auf google drive
gelegt. 

https://drive.google.com/drive/folders/1xnTnSf8Nuuli2JBxRkO8i1M7acbh9-lh?usp=sharing

In dem Beispiel (hier nur 10 x10) tippt man auf ein Startfeld und ein
Endfeld. Tippen auf die 100 triggert das Wegfinden und die Ansage der
Wegfelder (Diagonalen möglich). Die Koordinaten des jeweils letzten
Pfades werden auch als Textfile auf dem Tiptoi gespeichert.

Ich hätte echt Lust irgendein Echtzeit Strategiespiel für den Tiptoi zu
bauen. Es wäre cool wenn noch jemand Lust dazu hätte und man zusammen
an so einem Projekt arbeiten könnte. Könnte auch ohne Kampf mit
Farmsetting oder ähnlichem sein.

VG Jens




On Tue, 29 Oct 2024 12:55:35 +0100
 Florian via tiptoi <tiptoi at lists.nomeata.de> wrote:
>Hallo,
>
>> Oder paar Stunden warten, ich glaube, ich weiß, wo ich suchen muss.
>
>Habe das Update gepusht. Es ist nun möglich, die GME-Register zu
>speichern und das Game-Binary zu beenden (einfach $0 auf nicht 4
>setzen).
>
>
>Mit cachix baut das tttool ohne Probleme, alles funktioniert. Bin
>aktuell am überlegen, wie man tttool und tt-homebrew am besten
>kombinieren könnte. Also falls jemand Ideen hat, bin ich offen.
>
>
>> Hallo,
>>
>> als eigentlich stiller aber interessierter Mitleser muss ich jetzt
>doch mal nachfragen: versteh ich das richtig dass ich, wenn ich ne
>Sprache habe, die Arm64-Binaries (< 64k)erzeugen kann, ich praktisch
>auch diese verwenden kann? Denn bislang hat mich dabei abgeschreckt
>das ich C bzw C++ lernen müsste. Ich bin eigentlich Pascal-"Freak"...
>Und speziell Lazarus (wahrscheinlich geht es auch direkt in der
>Freepascal-IDE) kann mit etwas Vorarbeit und Konfiguration auch ARM64.
>
>Im Prinzip ja, aber C zu lernen wird der einfachere Weg sein, da man
>keine Standartbibliothek lernen muss, sondern nur den Syntax. Für eine
>andere Programmiersprache müsste man die ganzen C Funktionen wrappen,
>was aktuell die api.h macht. Zudem gibt es auf dem TipToi keinen
>stdout, wodurch ein einfaches Hello World nicht klappt. Aber man
>könnte es in das tt-homebrew Repo hinzufügen, man müsste nur die
>Makefile ändern.
>
>
>Ps. Es ist arm32 kein arm64
>
>
>
>Mit freundlichen Grüßen,
>
>Florian
>
>
>On 29.10.24 09:09, Florian via tiptoi wrote:
>>
>> Hallo,
>>
>> solange das Spiel läuft, wird die Main-Funktion 10 mal in der
>Sekunde aufgerufen. Der Code in  if (api->fpAkOidPara[First_time_exec]
>== 0) {} wird einmal ausgeführt. Beim 2.mal Ausführen wird done
>niemals auf true gesetzt, und die Binary loopt für immer. Das erkennt
>ein Watchdog und resetet den TipToi.
>>
>> Wichtig: Die Main-Funktion muss innerhalb von weniger als einer
>Sekunde returnen, sonst crasht der Stift. (Hätte ich vllt irgendwo in
>die Readme schreiben sollen)
>>
>>> Wie wahrscheinlich ist es, dass eine der tbd Positionen in der Api
>ein
>>> terminate oder exit Funktion ist?
>> 100%, das machen die ganzen Spiele so. Es ist auch möglich, von
>einer Binary eine andere zu Starten.
>>
>> Fürs erste würde ich ein playSoundNow() nehmen, was den Spieler
>auffordert, auf eine Oid zu tippen, welche "|FAFF| (written |C|):
>Cancel game mode." enthält. Oder paar Stunden warten, ich glaube, ich
>weiß, wo ich suchen muss.
>>
>>
>> Mit freundlichen Grüßen,
>>
>> Florian
>>
>>
>>
>> On 29.10.24 08:35, Jens Georg via tiptoi wrote:
>>> Hallo Florian und Joachim,
>>>
>>> schon mal vielen Dank für eure Arbeit.
>>>
>>> Das kombinieren von eigenen yaml Files und binaries mit der neuen
>>> tttool rewrite Funktion klappt super ;-).
>>>
>>> Ich habe eine kleines tiptoi "spiel" geschrieben um die
>>> save_gme_registers binary aus dem tt-homebrew repo zu testen. Das
>>> Speichern klappt schon mal ;-). Das Problem ist, wie von dir
>>> befürchtet, das Terminieren des "subgames". Zum Testen habe ich den
>>> Loop nach dem Speichern mit einem Boolean terminiert (siehe
>unten).Das
>>> hat aber nur den Effekt, das sich der Stift nach dem Speichern
>selbst
>>> ausschaltet.
>>>
>>> Wie wahrscheinlich ist es, dass eine der tbd Positionen in der Api
>ein
>>> terminate oder exit Funktion ist?
>>>
>>> VG Jens
>>>
>>> #include "api.h"
>>> #include "sdk.c"
>>> #include <stdbool.h>
>>>
>>> void main(system_api *apiPara) {
>>>      initTT(apiPara);
>>>      bool done = false;
>>>
>>>      while (!done) {
>>>          if (api->fpAkOidPara[First_time_exec] == 0) {
>>>              api->fpAkOidPara[First_time_exec] = 1;
>>>                           if (api->gme_registers[5] == 0) {
>>>                  // Load game
>>>                  int file = api->open(L"B:/tt-homebrew.save", 0,
>0);
>>>                  api->read(file, api->gme_registers,
>>> *api->gme_register_count * 2);
>>>                  api->close(file);
>>>                  done = true;
>>>              } else if (api->gme_registers[5] == 1) {
>>>                  // Save game
>>>                  int file = api->open(L"B:/tt-homebrew.save", 1,
>1);
>>>                  api->write(file, api->gme_registers,
>>> *api->gme_register_count * 2);
>>>                  api->close(file);
>>>
>>>                  // Set flag to end loop
>>>                  done = true;
>>>              }
>>>          }
>>>      }
>>> }
>>>
>>>
>>>
>>>
>>

------------------------------
Dr. Jens Georg
Universität Freiburg
Genetik und exp. Bioinformatik
Schänzlestr. 1
79104 Freiburg
Tel.: 0761/2032708
E-Mail: jens.georg at biologie.uni-freiburg.de


Mehr Informationen über die Mailingliste tiptoi