TypeScript
๐๐๐ฒ ๐จ๐ง๐: ๐๐จ๐ฎ๐ซ ๐ฐ๐๐๐ฉ๐จ๐ง๐ฌ. ๐๐๐ฒ ๐๐ข๐ฏ๐: ๐ฌ๐๐ฏ๐๐ง๐ญ๐๐๐ง.
I’ve continued the work on my browser-based game ๐๐ฅ๐ฅ๐ข๐ฎ๐ฆ ๐๐ฌ๐ฌ๐๐ฎ๐ฅ๐ญ. Over the past 5 days and additional 99 commits I’ve turned the minimal prototype into a fully usable game.
๐ญ๐ฅ;๐๐ซ: you can play it without any installation for free on GitHub Pages: https://marcelpetrick.github.io/AlliumAssault/
It is still a turn-based 3D artillery game with ๐ ๐๐ซ๐ฅ๐ข๐ ๐๐ฎ๐๐๐ข๐๐ฌ ๐ง in the spirit of Worms 2. I had lots of fun with friends thanks to the guys from @Team17.
Adding the new weapons was more than just creating a new sprite for the button – playtesting turned out to be crucial. A ๐ฃ๐ข๐ฏ๐ข๐ฏ๐ข ๐ฃ๐ฐ๐ฎ๐ฃ acts a bit differently from a ๐ฃ๐ข๐ด๐ฆ๐ฃ๐ข๐ญ๐ญ ๐ฃ๐ข๐ต. And as you know, ๐ด๐ฉ๐ฆ๐ฆ๐ฑ and ๐ด๐ถ๐ฑ๐ฆ๐ณ ๐ด๐ฉ๐ฆ๐ฆ๐ฑ share only part of the name, but not their behaviour.
Since doing repeated tests would be boring, I added 17 E2E tests with ๐๐ฅ๐๐ฒ๐ฐ๐ซ๐ข๐ ๐ก๐ญ to get this done.
Also, I’ve done one profiling run and then decided to remove multisampling, which saved around 40% of the cost per frame with almost no quality loss. And, of course, the major improvement – each push now runs ๐๐ ๐ฏ๐ข๐ ๐๐ข๐ญ๐๐ฎ๐ ๐๐๐ญ๐ข๐จ๐ง๐ฌ, which automatically deploys to GitHub Pages. And this allows you to run it without any changes from any browser (also tested on a smartphone, but it still lacks “no keyboard” controls).
I have some more ideas in mind. Also, I hesitated until now to add a rope as a weapon, because its functionality is an easy way to introduce a load of bugs.
And if someone is interested: the repository now contains almost ๐๐๐ค ๐๐จ๐ ๐จ๐ ๐๐ฒ๐ฉ๐๐๐๐ซ๐ข๐ฉ๐ญ in 118 commits, 115 tests, a C4 documentation, CI for quality assurance and releases, …
So, spend the Sunday wisely: go to https://marcelpetrick.github.io/AlliumAssault/ and give it a try ๐
#worms2 #wormsarmageddon #team17 #typescript #sdlc #AlliumAssault
Early preview: ๐๐ฅ๐ฅ๐ข๐ฎ๐ฆ ๐๐ฌ๐ฌ๐๐ฎ๐ฅ๐ญ ๐ง
Not much time to write posts these days. But, of course, the grind never stops.
My most recent creation is Allium Assault, a ๐๐จ๐ซ๐ฆ๐ฌ clone. With that said, I guess I don’t have to explain the game principle in detail. Two or more teams of garlic buddies fight each other with bazookas, grenades, … on a generated landscape. A ๐๐ฎ๐ฅ๐ฅ๐ฒ ๐๐๐ฌ๐ญ๐ซ๐ฎ๐๐ญ๐ข๐๐ฅ๐ ๐ฅ๐๐ง๐๐ฌ๐๐๐ฉ๐ plus gravity, wind, and turn-based gameplay.
I plan to add way more features as soon as possible. The first show-and-test with the stakeholders has already elicited some giggles from them.
Tech stack: ๐๐๐๐ฒ๐ฅ๐จ๐ง.๐ฃ๐ฌ renders the gameโnever used it before, but this was the first time I was able to create a satisfying 3D landscape in the browser. TypeScript, Vite, … Vitest and Playwright for test support. Sound effects are currently generated by the Web Audio API, since I did not want to spend much time looking for samples.
Hosted as always on ๐๐ข๐ญ๐๐ฎ๐: if you want to fork or play it: https://github.com/marcelpetrick/AlliumAssault
Videos automatisch รผbersetzen: ๐๐๐ซ๐ฆ๐๐ง๐๐ฎ๐๐
Eine clevere technische Lรถsung zu bauen ist meistens gar nicht das eigentliche Problem. Viel interessanter ist doch: Wie baut man etwas, das Leute wirklich benutzen wollen?
Ich wollte den Kindern ein richtig gutes Video รผber die rรถmische Armee zeigen. Nicht irgendein trockenes Erklรคrvideo, sondern eins, wo man denkt: Okay, das ist cool, da lernt man was. Problem war nur: die guten Videos waren auf Englisch.
Klar kann man sagen: Ist doch super, dann lernen die Kinder gleich noch Englisch. Stimmt. Aber wenn man zu viele Sachen gleichzeitig machen mรถchte, wird halt alles ein bisschen schlechter. Manchmal sollen sie einfach ein cooles Video schauen und dabei was lernen.
Also dachte ich: ๐๐ค๐ฉ, ๐ฅ๐ข๐ด ๐ฌ๐ข๐ฏ๐ฏ ๐ฅ๐ฐ๐ค๐ฉ ๐ฏ๐ช๐ค๐ฉ๐ต ๐ด๐ฐ ๐ด๐ค๐ฉ๐ธ๐ฆ๐ณ ๐ด๐ฆ๐ช๐ฏ. Video transkribieren, รผbersetzen, neue Tonspur drรผber und fertig.
Lass uns das mal schnell bauen.
Aus zwei Stunden wurden dann halt ๐ณ๐ฐ๐๐ข ๐๐๐ ๐.
Die erste Version war ein Command Line Tool. Hat funktioniert. Aber wenn ich das so verรถffentliche, benutzt das halt kaum jemand. Man sieht keinen Fortschritt, Fehler sind unรผbersichtlich, mehrere Videos parallel zu verarbeiten ist mรผhsam und wenn irgendwo etwas schieflรคuft, will man nicht jedes Mal den kompletten Workflow neu starten.
Also habe ich gedacht: ๐๐๐ง๐ง ๐ก๐๐ฅ๐ญ ๐ซ๐ข๐๐ก๐ญ๐ข๐ .
Schรถnes UI und Benutzerfรผhrung, mehrere Sprachen, parallele Verarbeitung, Fortschritt, Statistiken, Fehler direkt sichtbar, einzelne Schritte neu starten, Transkriptionen bearbeiten und gezielt neu generieren.
Und genau da merkt man halt den Unterschied zwischen einer technischen Lรถsung und einem Produkt.
Zeigst du jemandem ein Terminal und sagst: Damit kann ich Videos automatisch รผbersetzen, kommt meistens ein โAh, coolโ.
Zeigst du dieselbe Funktionalitรคt in einer Oberflรคche, wo sofort klar ist, was passiert und wo man einfach eingreifen kann, kommt plรถtzlich: โKann ich das ausprobieren?โ
Genau das wird meiner Meinung nach bei Software oft unterschรคtzt. Es reicht nicht, dass etwas clever ist und funktioniert. Es muss auch komfortabel sein. Leicht verstรคndlich. Leicht benutzbar. Und wenn etwas schieflรคuft, muss man trotzdem weiterkommen.
Das gilt รผbrigens auch fรผrs Setup. Wer ๐๐๐ซ๐ฆ๐๐ง๐๐ฎ๐๐ ausprobieren mรถchte, klont einfach das GitHub Repo (https://github.com/marcelpetrick/GermanDubI), kopiert drei Befehle aus der Anleitung ins Terminal und das Ding lรคuft.
Die technischen Details spare ich mir hier. Python, TypeScript, Uvicorn, Parallelverarbeitung, 95% Testcoverage, Pipelines und der ganze Kram. Darรผber kรถnnte ich noch stundenlang reden, weil mir das halt Spaร macht, aber am Ende interessiert das sowieso kaum jemanden.
Fรผr mich ist der interessantere Teil: ๐๐ฎ๐ฌ ๐๐ข๐ง๐๐ซ ๐ค๐ฅ๐๐ข๐ง๐๐ง ๐๐๐๐ ๐๐ข๐ง๐ ๐รถ๐ฌ๐ฎ๐ง๐ ๐ณ๐ฎ ๐๐๐ฎ๐๐ง, ๐๐ข๐ ๐ง๐ข๐๐ก๐ญ ๐ง๐ฎ๐ซ ๐ญ๐๐๐ก๐ง๐ข๐ฌ๐๐ก ๐๐ฎ๐ง๐ค๐ญ๐ข๐จ๐ง๐ข๐๐ซ๐ญ, ๐ฌ๐จ๐ง๐๐๐ซ๐ง ๐ฌ๐ข๐๐ก ๐๐ฎ๐๐ก ๐ฐ๐ข๐ ๐๐ข๐ง ๐๐ซ๐จ๐๐ฎ๐ค๐ญ ๐๐ง๐รผ๐ก๐ฅ๐ญ.




