mana-godot-sport
Was jemand entsendet und was es trifft: Auslauf, Belag, Durchtritt, Flugbahn, Ball, Linien — und sieben ganze Plätze, deren Masse je gegen ihr Regelwerk geprüft sind. Entstanden, weil sechs Sport-Apps mit zusammen 26 400 Zeilen aus sechs Kits kein einziges Modul benutzten und in dieser Lücke viermal derselbe Auslauf gebaut wurde.
Kopie mit Wächter
Kopiert statt verlinkt, damit das Projekt nach einem frischen Klon aufgeht. Ein Wächter im Prüflauf meldet, wenn die Kopie hinter der Quelle zurückbleibt.
./tools/kit-abgleich.sh holen
Landet unter modules/ im Projekt.
Der Befund, gezählt
Am 2026-09-09 im Haus gemessen: sechs Sport-Apps mit zusammen 26 400 Zeilen GDScript benutzten aus sechs Kits kein einziges Modul — hallenkiste, kegelkiste, whirtray, lawnhall, sjoelbox, dehnhalt. Vier weitere benutzten ein bis drei.
Und in dieser Lücke wurde dasselbe wieder und wieder gebaut:
| gebaut | mal | wo |
|---|---|---|
| der Auslauf (konstante Bremse, Ruhe-Erkennung, Notbremse) | 4 | lawnhall · whirtray · sjoelbox · kugelweg |
| der Durchtritt durch eine Ebene | 3 | korb.gd · torwand.gd · cornhole.gd, Zeile für Zeile |
ein Ball als flach schattierte SphereMesh |
3 | lawnhall · whirtray · kegelkiste |
| eine Bodentabelle mit Bremswerten | 4 | eine je Spiel, keine geteilt |
🛑 Der teuerste Fall ist nicht die Kopie. kugelweg/scripts/boden.gd nennt
lawnhall im Kommentar, zitiert dessen Befund zu linear_damp — und baut das
Ganze trotzdem neu, samt drei Godot-Fallen zum zweiten Mal. Lehrgeld, dreimal
bezahlt, an einer Stelle, an der nichts rot wird.
Wo die Zahlen herkommen
Jede Zahl im ball_generator steht gegen das Regelwerk ihres Verbands — IHF,
FIFA, FIBA, ITF, ITTF, MLB, FIVB, FIPJP, USBC — mit der Quelle daneben. Seine
Abnahme ist ein Kontaktbogen, kein grüner Haken: bei der ersten lagen vier
von sieben Werten ausser Norm, und gefunden wurden sie erst beim
Nebeneinanderlegen.
🟢 Seine zwei Python-Wächter laufen seit dem Umzug im Prüflauf statt daneben. Ein Wächter, den niemand ruft, ist kein Wächter — eine Katalogzahl zu brechen färbt jetzt den ganzen Lauf rot, gemessen an einer 900-g-Boule.
Die Eigenheiten, an denen man das Regelwerk erkennt
- Das Volleyballnetz muss waagrecht sein — beim Tennis genau umgekehrt.
- Badminton trägt auf EINEM Platz die Linien beider Spiele, und die Aufschlagfelder tauschen in entgegengesetzte Richtungen.
- Handballs Torraum ist ein Stadion, kein Halbkreis: zwei Viertelkreise um die Pfosten, dazwischen eine Gerade.
- Beim Tor muss der ganze Ball die ganze Linie überqueren — und eine Öffnung ohne Kollision wird befahren, nicht nur gemessen.
Prüflauf: 1 002 grün.
45 Bilder aus dem Katalog
-
Tennis auf Sand — Platz, Linien, Netz, Pfosten und Einzelstäbe. Das Netz hängt in der Mitte durch: die einzige Netzregel im Kit, die eine Kurve verlangt statt einer Geraden.
-
Die Linien aus der Nähe. `court_lines` zieht sie für alle sieben Plätze — Geraden und Bögen aus denselben Daten, aus denen auch die Prüfung ihre Sollwerte nimmt.
-
Korb nach FIBA: Brett, Ring, Netz. Die Zählung hängt an einer EBENE mit interpoliertem Auftreffpunkt, nicht an einem Auslösefeld — ein Feld zählt doppelt oder gar nicht.
-
Von unten. Diese Ansicht ist der Grund, warum es sie gibt: durch den Ring sieht man, ob Netzaufhängung und Ringmitte zusammenfallen.
-
Fussball: jede Markierung, die Regel 1 festlegt, zwei Tore auf echten Pfosten — und der Strafraum aus dem Torpfosten abgeleitet statt abgemessen.
-
Volleyball. Das Netz muss WAAGRECHT sein — die entgegengesetzte Regel zum Tennisnetz, und der Fall, an dem ein gemeinsamer Netz-Baustein scheitern würde, wenn er nur eine Bauart kennte.
-
Badminton: EIN Platz, der die Linien beider Spiele trägt (Einzel und Doppel) — und dessen Aufschlagfelder in entgegengesetzte Richtungen tauschen.
-
Handball. Der Torraum ist ein Stadion, kein Halbkreis: zwei Viertelkreise um die Pfosten, dazwischen eine Gerade. Wer einen Halbkreis zeichnet, hat das Regelwerk nicht gelesen.
-
Tischtennis, 76 cm hoch. Die vierte Netzregel des Kits — und die erste Stelle, an der die Ballgrösse die Platzmasse bestimmt statt umgekehrt.
-
Die Flugbahnen, gerechnet und beschriftet. Quadratischer Luftwiderstand: der Federball knickt vorn steil ab, der Tennisball nicht. Mit linearem Widerstand sähen beide gleich aus — und genau das ist der Unterschied, den keine Prüfung meldet.
-
Ein Schläger mit echter Besaitung, Kopfgrösse midplus. Vier weitere Grössen stehen im Katalog, bis legal_max.
-
Der Tennisplatz von oben — die Ansicht, in der sich Masse prüfen lassen, und in der die Prüfung ihre Sollwerte gegen ITF hält.
Und der Rest des Katalogs
33 Bilder, so benannt, wie der Katalog sie rendert. Ohne Legende — geschrieben wird eine erst, wenn jemand am Bild etwas gesehen hat.
-
platz hardcourt
-
platz turf
-
platz carpet
-
netz quer
-
netz nah
-
netz einzelstaebe
-
aufschlagblick
-
schlaeger midsize
-
schlaeger oversize
-
schlaeger junior
-
schlaeger legal max
-
schlaeger kante
-
korb mini
-
korb von der seite
-
bplatz von oben
-
bplatz schraeg
-
bplatz ecke
-
bplatz zone
-
fplatz strafraum
-
fplatz tor
-
fplatz ecke
-
vplatz schraeg
-
vplatz netz
-
vplatz antenne
-
badminton schraeg
-
badminton netz
-
badminton aufschlag
-
hplatz torraum
-
hplatz siebenmeter
-
hplatz bogenfuss
-
tisch schraeg
-
tisch netz
-
tisch aufschlag
Woraus er besteht
run_out- Die Strecke zwischen Loslassen und Stillstand: konstante Bremse, `s = v²/(2a)`, Rutsch-Roll-Übergang, Ruhe-Erkennung. 🛑 Viermal im Haus gebaut — und `linear_damp` ist NICHT Rollreibung: Dämpfung ist geschwindigkeitsproportional, echte Rollreibung nicht, und mit Dämpfung kommt nichts je zur Ruhe.
flight- Die Bahn zwischen Schläger und Boden, mit **quadratischem** Luftwiderstand. Ein Federball ist der Extremfall: er bremst so stark, dass seine Bahn vorn steil abknickt — mit linearem Widerstand fliegt er wie ein Tennisball, und das sieht man auf jedem Bild.
surface- Der Boden als Zahl — Bremsung je Belag, Rücksprung, und ein Herkunftsvermerk an jedem Wert. Die Bodenliste ist von `footsteps` GELIEHEN, nicht nachgebaut: zwei Listen derselben Sache driften, und dann klingt ein Boden unter dem Fuss anders als unter dem Ball.
crossing- Ging es DURCH (ein Ring, eine Tormündung) oder BERÜHRTE es (eine feste Fläche)? 🛑 Dreimal im Haus gebaut, Zeile für Zeile gleich. Ein Auslösefeld statt einer Ebene zählt doppelt oder gar nicht — und ein Ball, der durch den Ring fällt und zurückspringt, zählt einmal.
ball_generator- Zwölf Bälle — Muster, Naht und Narbung als Shader-Funktionen. **Jede Zahl gegen das Regelwerk ihres Verbands geprüft** (IHF, FIFA, FIBA, ITF, ITTF, MLB, FIVB, FIPJP, USBC), jede mit Quelle daneben. Seine Abnahme ist ein Kontaktbogen, kein grüner Haken. 🟢 Am 2026-09-09 aus `mana-godot-welt` hierher gezogen: dort hatte von 60 Modulordnern genau einer einen Sport-Zweck.
court_lines- Die Markierung auf einem Belag — Geraden und Bögen, als Daten UND als ein Mesh. Sieben Plätze teilen sich denselben Strichzieher.
hoop · goal- Korb mit Brett, Ring und Netz — und eine Zählung, die sich nicht austricksen lässt. Beim Tor die Regel, dass der GANZE Ball die GANZE Linie überqueren muss; eine Öffnung ohne Kollision wird befahren, nicht nur gemessen.
die sieben Plätze- Tennis, Basketball, Fussball, Volleyball, Badminton, Handball, Tischtennis. Jeder mit den Eigenheiten, an denen man merkt, ob jemand ins Regelwerk gesehen hat: das Volleyballnetz muss WAAGRECHT sein (beim Tennis genau umgekehrt), Badmintons Aufschlagfelder tauschen in entgegengesetzte Richtungen, Handballs Torraum ist ein Stadion und kein Halbkreis.
7 Projekte benutzen ihn
Gezählt, nicht behauptet: pnpm bausteine durchsucht jede
App im Baum nach Klassennamen des Bausteins und nach vendorierten
Kopien. Ein Baustein ohne Abnehmer wäre keiner, sondern eine
Bibliothek auf Vorrat. Stand: 2026-09-15.
Wem er gehört, was ihn prüft
- Lizenz
- MIT — Bausteine sind permissiv lizenziert, Anwendungen AGPL-3.0. Ein Baustein, der ansteckt, wäre keiner.
- Träger
- Der Verein
- Gebiet
- sport —
- Wache
-
kit_smoke.gd— prüft ihn headless. - Katalog
-
kit_katalog.gd— rendert seine Bauteile als Bilder.
🛑 Kein Link ins Repository: die Kit-Repos liegen auf der eigenen Forge und sind noch nicht öffentlich. Ein Link, der 404 antwortet, wäre schlechter als keiner.
Was er verkörpert
-
OffenheitCode und Mittelverwendung öffentlich.
-
LanglebigkeitBewährte Stacks, gute Doku.
-
AchtsamkeitKeine Engagement-Tricks.
Was offen ist
- Nichts davon lief auf einer Brille — und hier wiegt das schwerer als bei den anderen Kits, weil vier der Abnehmer VR-Apps sind (wurfbogen, tresenwurf, kugelweg, taktspiegel).
- Die REGELN bleiben bewusst draussen. Vier Regelsätze im Haus passen in je eine Datei, sind headless prüfbar und tragen den Kommentar, warum sie so klein bleiben dürfen. Ein gemeinsamer Punkte-Rahmen tauschte vier saubere Dateien gegen eine Abstraktion, die keine von ihnen braucht.
- `surface` leiht `Footsteps.GROUNDS` aus `mana-godot-welt` — eine `class_name`-Kopplung über eine Repo-Grenze, und `class_name` ist eine Kopplung OHNE Textspur: ein grep nach `res://` findet sie nicht.
Ein Gebiet je Baustein
Die Trennung nach Fachgebiet ist der Grund, warum es fünf Repos sind und nicht eines.