{"id":10741,"date":"2025-01-23T12:03:40","date_gmt":"2025-01-23T12:03:40","guid":{"rendered":"https:\/\/www.gamelab.ch\/?p=10741"},"modified":"2025-01-23T17:13:50","modified_gmt":"2025-01-23T17:13:50","slug":"codegolfing-mit-pico8-notiz","status":"publish","type":"post","link":"https:\/\/www.gamelab.ch\/?p=10741","title":{"rendered":"CodeGolfing (mit Pico8) [Notiz]"},"content":{"rendered":"\n<p><strong>Code Golfing \u2013 size coding<\/strong><\/p>\n\n\n\n<p>Die Demoscene ist eigentlich Teil der gr\u00f6sseren Bewegung des Code-Golfings. Code Golfing ist ein Wettbewerb zur Frage, wie kann man* ein Problem (etwa den kleinsten Compiler, was zu FALSE,&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Brainfuck\">Brainfuck&nbsp;<\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/Brainfuck\" target=\"_blank\" rel=\"noreferrer noopener\">und<\/a><a href=\"https:\/\/en.wikipedia.org\/wiki\/Brainfuck\">&nbsp;Co<\/a>&nbsp;f\u00fchrte) mit m\u00f6glichst wenig Code in einer spezifischen Umgebung l\u00f6sen (oder wie schaffe ich es eine Umgebung zu gestalten in der Probleme mit m\u00f6glichst wenig Code gel\u00f6st werden k\u00f6nnen). Konkreter: Was ist der kleinstm\u00f6gliche Code f\u00fcr ein Problem oder sportlicher: Mit wie wenig Schl\u00e4gen komme ich ans Ziel.&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_golf\" target=\"_blank\" rel=\"noreferrer noopener\">Mehr zu Codegolfing hier &gt;<\/a><\/p>\n\n\n\n<p><strong>Demoscene: Feste Gr\u00f6sse, Golfen mit dem Resultat<\/strong><\/p>\n\n\n\n<p>Die Crackerszene des 8- und 16-Bit lebte vom Dilemma sich darstellen zu wollen und gleichzeitig wenig Platz zu haben (Die Disketten waren schon so rand voll mit Spielinhalten). Was zu interessanten Intros f\u00fchrte in denen die Cracker* alle funktionalen Inhalte wie Software\u00fcbersichten, Auswahl, Trainer (Cheatmodes), Infos, Kommunikationswege und Werbung \u00fcber sie (Postadresse, BBS), Greetings, Hatings m\u00f6glichst kreativ verpackten in Texte, Scrolltexten, Spielen mit Schriften, Effekten. Es war also ein weiterer Wettbewerb entstanden: Wer kann wie viel mit wenig Platz. Dadurch wurden auch die teilweise \u2018qualitativ\u2019 schlechten Spiele wenigstens in ihren Intros etwas Grosses.&nbsp;<\/p>\n\n\n\n<p>Die Demoscene, die sich bekanntlich aus den begrenzten Ressourcen der Crackerszene entwickelte, hat f\u00fcr die Contest Kategorien geschaffen und damit die Ressourcen beschr\u00e4nkt 8byte, 64byte, 256byte (historische Kategorie wegen den ), 512b, 64kb etc. So dass es weiterhin heisst: Wer kann welche Effekte, Demos, Stories in minimalste Anzahl von Programm verpacken. Und damit alle die gleichen \u2018 Chancen\u2019 haben \u2013 begrenzt man die Kategorien. Ein Beispiel daf\u00fcr w\u00e4re etwa: LoveBytes\/Kategorien.<\/p>\n\n\n\n<p>Neben den klassischen Computern (C64, Spectrum, Atari ST, Amiga, Windows) und Consolen (Atari 2600) haben seit l\u00e4ngerem Fantasy Consolen\/Computer Einzug gehalten wie Tic80 oder Pico8. Mehr dazu hier &gt;<\/p>\n\n\n\n<p><strong>Gamedesign-Golfing, Nanowettbewerb<\/strong><\/p>\n\n\n\n<p>Zunehmend taucht nun in Demosceneevents auch die Kategorie \u00abNanogames\u00bb auf. Meist sind sie dann \u2013 bl\u00f6derweise in der selben Kategorie \u2013 wie Demos. Etwa 256b Games. Dabei wird wenig Rechnung getragen, dass eine Spielechanik meist auf if und loops Bedingungen aufbaut. Vermutlich w\u00e4re eine 384 Byte Untergrenze etwa f\u00fcr Fantasy Consolen sinnvoll. Nichts desto trotzt f\u00fchrt das zur Frage: Was l\u00e4sst sich in so wenig Bytes machen? Und die Frage dahinter: Was ist Gamedesign Golfing? Was ist das Verh\u00e4ltnis von Code und Game von den Visuals bis zur Mechanik. Und vielleicht interessanter: Was sind die kleinstm\u00f6glichen Spielmechaniken f\u00fcr ein Genre?<\/p>\n\n\n\n<p>Im Nachfolgenden soll anhand des Lovebyte-Contest 2023 diesen Fragen an der Oberfl\u00e4che nachgegangen werden.&nbsp;<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Constraints \u2013 Gr\u00f6sse ist alles<\/strong><\/p>\n\n\n\n<p>Eigentlich sollte man jeden Contest von hinten anschauen. Was sind die Bedingungen? Wo ist der Contest beschr\u00e4nkt. Hier gibt es zwei unterschiedliche Kategorien:<\/p>\n\n\n\n<p><strong>File-Size-Gr\u00f6sse<\/strong><\/p>\n\n\n\n<p>Die historische Gr\u00f6sse ist einfach, sie ist einfach die Gr\u00f6sse der ausf\u00fchrbaren Datei (etwa exe). Das ist einfach messbar und \u00fcberpr\u00fcfbar. Selbstverst\u00e4ndlich gibt es auch hier Systeme, die schlecht wegkommen. Etwa Macos X. Hinter dem ausf\u00fchrbaren Code lassen sich aber auch viele Source-Code Bytes verstecken, der Code l\u00e4sst sich Packen etc.&nbsp;<\/p>\n\n\n\n<p>Heutige FantasyConsolen erm\u00f6glichen es aber auch den Code einfach gezipped zu exportieren und damit das eine oder andere Byte noch loszuwerden. Pico8 verwendet daf\u00fcr in der Console eine Art ZLIB:<\/p>\n\n\n\n<p>Export -t NAMEX.p8.rom<\/p>\n\n\n\n<p>Die meisten Contests verwenden diese Form. Hier stellt sich die Frage, ob man dann nicht auch f\u00fcr diesen Packer optimiert.<\/p>\n\n\n\n<p><strong>Source-Code-Gr\u00f6sse<\/strong><\/p>\n\n\n\n<p>Hier wird nur die Gr\u00f6sse des effektiven Codes gez\u00e4hlt. Dieser l\u00e4sst sich dann auch einfach kopieren. Beliebtes Format hier sind die TweetCards 280 Zeichen. Diese lassen sich per Tweet verschicken und einfach schnell ausprobieren.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Oldschool &amp; Fantasie-Konsolen<\/h2>\n\n\n\n<p>Zuerzeit dominieren bei den Fantasy-Consolen Pico8\/Tic80. Daneben gibt es allerdings diverse andere Konsolen. Auch stark vertreten ist Assembler.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konzepte und Games<\/h2>\n\n\n\n<p>Games sind prinzipiell komplexe Software. Sie sind meistens multimedial (Displays: Visuell, Sound) und interaktiv (Interfaces, Entscheidungen).&nbsp;&nbsp;Zus\u00e4tzlich verwenden sie Spielmechaniken. Was mehrheitlich zu Loops und Entscheidungen und damit zu vielen Abfragen f\u00fchren.&nbsp;<\/p>\n\n\n\n<p>Es ist deswegen wichtig im Bereich Nanogames, die Konzepte so einfach wie m\u00f6glich zu halten, bzw. sie auf das minimalste zu reduzieren. Das heisst auch: Wie kann ich etwa Loops mehrfach verwenden. Wie kann ich inits direkt in eine Schlaufe w\u00e4hrend des Gamloops integrieren?<\/p>\n\n\n\n<p>Umgekehrt gefragt; was kann ich alles in einem Loop unterbringen.<\/p>\n\n\n\n<p>Probleme werden oft in Games im Allgemeinen gel\u00f6st. Hier ergibt sich bei der \u00dcberarbeitung auch oft die Frage, l\u00e4sst dich das Ganze nicht als Spezialfall l\u00f6sen? Muss x,yz sein?<\/p>\n\n\n\n<p>Beispiele:<\/p>\n\n\n\n<p>Double Us<\/p>\n\n\n\n<p>Alternative M\u00f6glichkeiten f\u00fcr Ressourcen, Statusdarstellungen:<\/p>\n\n\n\n<p>Game Over<\/p>\n\n\n\n<p>Interessante Funktionen (anders als in OldSchool Demoscening):<\/p>\n\n\n\n<ul>\n<li>Floating-Point<\/li>\n\n\n\n<li>Flr()<\/li>\n\n\n\n<li>Ceil()<\/li>\n\n\n\n<li>^<\/li>\n\n\n\n<li>a\/10<\/li>\n\n\n\n<li>a\\10<\/li>\n\n\n\n<li>a%10<\/li>\n<\/ul>\n\n\n\n<p>Floating erm\u00f6glichen auch all die 3D Dinge!&nbsp;<\/p>\n\n\n\n<p>String:<\/p>\n\n\n\n<p>Concat ..<br>length #a<\/p>\n\n\n\n<p>Sub: String fangen bei 1 an! (substring)<\/p>\n\n\n\n<p>Speicherung: peek &amp; poke \u2026&nbsp;<\/p>\n\n\n\n<p>\/\/ cstore and co<\/p>\n\n\n\n<ul>\n<li>store to the cardtriged \u2026<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Pico8 (FantasyConsoles)<\/h2>\n\n\n\n<p>Jede Programmiersprache hat ihre Eigenheiten und erm\u00f6glicht verschiedene Dinge. Zumindest 2 der FantasyConsoles verwenden Lua als Scriptsprache (Es ist vergleichweise einfach Lua zu implementieren und als VirtualMaschine laufen zu lassen).&nbsp;&nbsp;Hier soll auf Lua eingegenagen werden.<\/p>\n\n\n\n<p>Eine gute Einf\u00fchrung ins Demoscening findet sich auch hier:<br><a href=\"https:\/\/demobasics.pixienop.net\/\">https:\/\/demobasics.pixienop.net<\/a><\/p>\n\n\n\n<p>Die folgenden Tipps zusammengesetzt aus Selbstverst\u00e4ndlichkeiten, Tipps des Tetris-Beispiel und eigene Erfahrungen:&nbsp;&nbsp;<a href=\"https:\/\/demoman.net\/?a=optimizing-for-tweetcarts\">https:\/\/demoman.net\/?a=optimizing-for-tweetcarts<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Effects<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Klassische Demoscene Effekte<\/h3>\n\n\n\n<h2 class=\"wp-block-heading\">&nbsp;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3D<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 0: Iterationen<\/h3>\n\n\n\n<p>Regelm\u00e4ssig testen und ausprobieren. Gerade das \u00abExport -t xyz.p8.rom\u00bb erzeugt durch die Zlib-Kompression immer wieder andere Zeichenzahlen. Da kann man auch etwas entfernen und es hat auf einmal mehr Zeichen, da es nun nichts mehr zu packen gibt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 1: Mainloop<\/h3>\n\n\n\n<p>Einfachster Mainloop:<\/p>\n\n\n\n<p>function _draw()<\/p>\n\n\n\n<p>end<\/p>\n\n\n\n<p>Noch einfacherer Mainloop (ohne Geschwindigkeitskontrolle):<\/p>\n\n\n\n<p>::_::<\/p>\n\n\n\n<p>goto ::_::<\/p>\n\n\n\n<p>Alle Pixel durchgehen:<\/p>\n\n\n\n<p>Alle Pixel 2:<\/p>\n\n\n\n<p>Zeichnen und Verwlaten im selben loop!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 2: Vereinfachen<\/h3>\n\n\n\n<p>Einfachere Schreibweisen:<\/p>\n\n\n\n<p>i=i+1 &gt; i+=1 \/\/ -2<br>i+=-1 &gt; i-=1 \/\/ -1<\/p>\n\n\n\n<p>i+=0.1<br>i+=.1&nbsp;<\/p>\n\n\n\n<p>Verwenden von Buchstabenvariablennamen:<\/p>\n\n\n\n<p>abc=1 &gt; a=1<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 3: Oft verwendete Teile als Variable<\/h3>\n\n\n\n<p>i+=128<br>t=a*128<\/p>\n\n\n\n<p>h=128&nbsp;<br>i+=h&nbsp;&nbsp;&nbsp;<br>t=a*h&nbsp;<br>&#8212; \/\/ + 5 \u2013 6<\/p>\n\n\n\n<p>Dasselbe gilt nat\u00fcrlich auch f\u00fcr Zwischenresultate:<\/p>\n\n\n\n<p>h=t\/6<br><\/p>\n\n\n\n<p>Je \u00f6fter man das verwendet, umso mehr lohnt es sich.&nbsp;<br><br>Kann man eventuell auch dieselben Zahlen nochmals benutzen? Etwa bei Effekten?<\/p>\n\n\n\n<p>Funktionsnamen ersetzen<\/p>\n\n\n\n<p>a=sin(t\/100)<br>b=sin(l\/100)<\/p>\n\n\n\n<p>s=sin<br>a=s(t\/100<br>b=s(t\/100)<br>&#8212; \/\/ +5 -6<br><br>Je \u00f6fter man nun sin verwendet, umso besser. Cos ist auch nichts anderes als 1-sin etc!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Schritt 3: If-statements<\/h2>\n\n\n\n<p>Leider benutzt LUA kein {} sondern&nbsp;<br><br>if() then else end<br><br>if () then end&nbsp;<br>&gt; Trick if a==0<\/p>\n\n\n\n<p>If (i==0)&nbsp;<\/p>\n\n\n\n<p>if (i&lt;1) &#8211;\/\/ -1<\/p>\n\n\n\n<p>Kaskadieren von If-Statements<br>if()CMD1cmd2CMD3<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 4: Function-Default-Statements<\/h3>\n\n\n\n<p><br>Viele Funktionen lassen sich auch ohne Werte nutzen.&nbsp;<br><\/p>\n\n\n\n<p>Mget(4,0)&nbsp;<br>mget(4) &#8212; \/\/ -1&nbsp;<\/p>\n\n\n\n<p><br>mset(x,y,0)&nbsp;<br>mset(x,y) &#8212; \/\/ -1<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 4: Reihenfolge<\/h3>\n\n\n\n<p>Immer wieder interessant ist die Frage, l\u00e4sst sich mit Umstellen und Commandoaneinderreihen nicht doch noch etwas sparen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 4: Darstellung<\/h3>\n\n\n\n<p>Dinge k\u00f6nnen auf verschiedenste Arten dargestellt und kombiniert werden:<\/p>\n\n\n\n<ul>\n<li>Direkte Zeichenroutinen (Vorteil direkt: circ(),rect \u2026 brauchen viel<\/li>\n\n\n\n<li>Sprites (spr)<\/li>\n\n\n\n<li>Sprites (sspr)<\/li>\n\n\n\n<li>Text bzw. vordefinierte Sonderzeichen (Herzen etc.)<\/li>\n\n\n\n<li>Tilemaps<\/li>\n\n\n\n<li>Memorymanipulationen<\/li>\n<\/ul>\n\n\n\n<p>?,1,7<br><br>\/\/ leuchtender&nbsp;<\/p>\n\n\n\n<p>\/\/ copy screen to background<\/p>\n\n\n\n<p>memcpy(0,0&#215;6000,1000)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 5: Kreativit\u00e4t<\/h3>\n\n\n\n<p>Nicht zu untersch\u00e4tzen, ist die eigene Kreativit\u00e4t und das immer wieder \u00fcber den Code schauen.&nbsp;<br><br>&#8211; Gibt es etwas, was man anders machen k\u00f6nnte?<br>&#8211; Gibt es etwas&nbsp;<br>&#8211; Wenn man etwas umstellt, ver\u00e4ndert sich etwas?&nbsp;Wird etwas neu m\u00f6glich?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Release<\/h3>\n\n\n\n<p># pico8 &#8211; capturing_on_mac (1280&#215;720) # XYZ = your user name terminal drag in your Pico8-App-Icon cd PICO-8.app\/Contents\/MacOS .\/pico8 -width 1280 -height 720 # Use your screencapturing tool on the pico 8 window oder make the window bigger and screenshot exactly 1280&#215;720<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Beobachtungen<\/h3>\n\n\n\n<p>\/\/ negative values und abstanzberechnung<br>\/\/ immer die m\u00f6glicherweise negativen beim negativ ben\u00fctzen<\/p>\n\n\n\n<p>x-mouseposition.x<\/p>\n\n\n\n<p>\/\/ demofix<\/p>\n\n\n\n<p>einfang spiel<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>einfacher nur \u00fcberleben kein einsammeln oder auslassen<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>!!!!<\/p>\n<\/blockquote>\n<\/blockquote>\n\n\n\n<p>\/\/ demofix game<br>\/\/ no mset &gt; direct array 32*32 \u2026<br>\/\/ display cls<\/p>\n\n\n\n<p>\/\/ breakout<\/p>\n\n\n\n<p>?&#8220;\u25cf&#8220;..s,a,b,t<\/p>\n\n\n\n<p>FIX the PIX<\/p>\n\n\n\n<p>\/\/ val\/2<\/p>\n\n\n\n<p>g,s=0t=0p=16s=stat<br>j=128d=rnd<br>poke(0x5f2d,1)::_::h=mget<br>m=s(32)n=s(33)e=0for x=0,j do<br>for y=0,j do<br>v=h(x\\4,y\\4)f=sin(x<em>y<\/em>t\/20)*2<br>if(v&gt;0)e+=1f=7<br>pset(x,y,f)<br>end<br>end<br>t+=1if(t%p&lt;1)mset(d(b),d(b),d(2)) v=h(m\\4,n\\4)if(v&gt;0)v=0t=0<br>mset(m\\4,n\\4,0)<br>if(e&gt;50)cls()<br>?&#8220;\uc6c3&#8220;..(t\\p),m,n,7<\/p>\n\n\n\n<p>::<em>::h flip()goto<\/em><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">pico-demo-checklist<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>effects<br>\/*<br>x,n: 0-128<br>y,m: 0-128<br>o=n\\8<br>p=n\\8<\/p>\n<\/blockquote>\n\n\n\n<p>\/\/ circles \u2026<br>f=2+(m^2+n^2)(t\\3)%3<\/p>\n\n\n\n<p>\/\/ schachbrett<\/p>\n\n\n\n<p>f=m\\t<\/p>\n\n\n\n<p>\/\/ simplest loop<br>h=64i=0::<em>::i+=1pset(i%h,i\\h%h,i%9)goto<\/em><\/p>\n\n\n\n<p>\/\/ flip() nicht benutzt<\/p>\n\n\n\n<p>\/\/ optimising to then end<\/p>\n\n\n\n<p>defaults \u2026 verk\u00fcrzt<\/p>\n\n\n\n<p>\/\/ tile nutzen \u2026<br>s=mset<br>g=mget<br>s(0,1)<br>g(1) \/\/ gibt den 5,0 wieder<\/p>\n\n\n\n<p>pset(x,y) \/\/ setzt pixel auf 0!<br>mget(x ) &gt;&gt;?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">demo short &#8211; loop<\/h3>\n\n\n\n<p>h=99i=0::<em>::i+=1pset(i%h,i\\h,i%7)goto<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">longer<\/h3>\n\n\n\n<p>l=0h=99i=0::<em>::i+=1pset(i%h,i\\h,flr(l\\i))l+=1if(i&gt;h*h)i=h goto<\/em><\/p>\n\n\n\n<p>worst &#8211; smaller size \u2026<\/p>\n\n\n\n<p>(a==0) &gt;&gt; better (a&lt;1)<\/p>\n\n\n\n<p>*\/<\/p>\n\n\n\n<ul>\n<li>no space<\/li>\n\n\n\n<li>a,b=0<\/li>\n\n\n\n<li>s=stat<\/li>\n\n\n\n<li>a<br>b<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>ab<br>) \/ etc<\/p>\n\n\n\n<ul>\n<li>? :<\/li>\n\n\n\n<li>a%b &amp; a\\b<\/li>\n\n\n\n<li>if(v&gt;0) v<\/li>\n\n\n\n<li>if (x)AND(y)<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p>if (v) then is not working:-()<\/p>\n\n\n\n<p>if (i==0) &gt; if i&lt;1<\/p>\n\n\n\n<p>32 &gt; zahl<\/p>\n\n\n\n<p>Map(0,0) &gt; map<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>another place<br>?<\/p>\n<\/blockquote>\n\n\n\n<p>poke() &gt; poke 0! 1<\/p>\n\n\n\n<p>\/\/ faster<br>poke(24365,1)<\/p>\n\n\n\n<p>strategies<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>rnd &gt; endless game<br>% instead of random<\/p>\n<\/blockquote>\n\n\n\n<p>btn([left])<br>btn(&lt;)<br>btn(righ)<\/p>\n\n\n\n<p>\/\/ take always one !<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>use a timer and than %30 objects<br>over t%<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/demoman.net\/?a=optimizing-for-tweetcarts\n<\/div><\/figure>\n\n\n\n<p>print ?<\/p>\n\n\n\n<p>?&#8220;\uc6c3&#8220;..(t\/10)..&#8220; &#8222;..a,m,n,7<\/p>\n\n\n\n<p>if() &gt;&gt;&gt;&gt;&gt;<br>if a=1NEXT COMMAND!<\/p>\n\n\n\n<p>if(a==3)CMD1CMD2 CMD3<\/p>\n\n\n\n<p>if()<\/p>\n\n\n\n<p>not working<br>a,b,c=0 !!! &gt; a,b,c=0,0,0<\/p>\n\n\n\n<p>::<em>::h flip()goto<\/em><\/p>\n\n\n\n<p>mehrfachverwendete zahlen?<br>x=32<br>32<br>32<\/p>\n\n\n\n<p>spr &gt; circ?<br>circ default no radius<\/p>\n\n\n\n<p>spr(1,a,b)<\/p>\n\n\n\n<p>circ(a,b,3)<\/p>\n\n\n\n<p>werte: auch 0.5 m\u00f6glich !!!!<\/p>\n\n\n\n<p>if(a&gt;7)CMD &gt; if a&gt;7CMD<\/p>\n\n\n\n<p>if(a&gt;7)CMDX CMDY else CMDX,CMDY<\/p>\n\n\n\n<p>a = -1<br>if (a) not<br>a = 1<br>if (a) ys<\/p>\n\n\n\n<p>print chr(7) \u2026 &gt; ton<\/p>\n\n\n\n<p>strategies:<\/p>\n\n\n\n<ul>\n<li>zeichnen und verwaltung im selben loop!<\/li>\n\n\n\n<li>double use!<\/li>\n\n\n\n<li>atari 2600 use<\/li>\n\n\n\n<li>wiederverwendetes in variable<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Attention<\/h3>\n\n\n\n<p>memcpy( destaddr, sourceaddr, len )<\/p>\n\n\n\n<ol>\n<li>DEST 2. SOURCE!<\/li>\n<\/ol>\n\n\n\n<p>SPRITESCREEN TO SCREEN<br>&#8212; copy sprite sheet to screen<br>memcpy(0x6000,0,1000)<\/p>\n\n\n\n<p>&#8212; screen to sprite screen<br>memcpy(0,0&#215;6000,1000)<\/p>\n\n\n\n<p>\/\/ print colors background \u2026<br>https:\/\/pico-8.fandom.com\/wiki\/P8SCII<br>https:\/\/pico-8.fandom.com\/wiki\/P8SCII_Control_Codes<\/p>\n\n\n\n<p>WIDE<br>S T R I PED<br>Dotted: ^<br>\\^w : Wide. Doubles the width.<br>\\^t : Tall. Doubles the height.<br>\\^= : Stripey. When wide or tall, only even pixels are rendered.<br>\\^p : Pinball. Equivalent to wide, tall, and dotty.<br>\\^i : Inverted. The foreground color is used as the background, and vice versa.<br>\\^b : Bordered. Text has left and top padding. (On by default.)<br>\\^# : Solid background. The default is a transparent background.<br><code>\\f P0<\/code>\u00a0: foreground color<br><code>\\# P0<\/code>\u00a0: background color<\/p>\n\n\n\n<p>print(&#8222;#4 \\^w font&#8220;)<\/p>\n\n\n\n<p>SCREEN-CAPTURING:<\/p>\n\n\n\n<p>cd \/Users\/XYZ\/Desktop\/Themen\/pico-8\/pico-8-4\/PICO-8.app\/Contents\/MacOS<br>.\/pico8 -width 1280 -height 720<br>.\/pico8 -width 1380 -height 750<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">PICO-ROUTINEN<\/h3>\n\n\n\n<p>\/\/ direct in<\/p>\n\n\n\n<p>\/\/ grid over it \u2026.<br>pset(x,y,(t+l)%5)<\/p>\n\n\n\n<p>for i=0,128<em>128,2 do n=i%128 m=i\\128 pset(n,m,((n+t\/4)<\/em>m)%7+12)<br>end<\/p>\n\n\n\n<p>memory: https:\/\/trasevol.dog\/2017\/04\/21\/di13-spritesheet1\/<br>interesting: https:\/\/trasevol.dog\/2017\/04\/13\/doodle-insights-12-voxels-in-pico-8\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Code Golfing \u2013 size coding Die Demoscene ist eigentlich Teil der gr\u00f6sseren Bewegung des Code-Golfings. Code Golfing ist ein Wettbewerb zur Frage, wie kann man* ein Problem (etwa den kleinsten Compiler, was zu FALSE,&nbsp;Brainfuck&nbsp;und&nbsp;Co&nbsp;f\u00fchrte) mit m\u00f6glichst wenig Code in einer &hellip; <a href=\"https:\/\/www.gamelab.ch\/?p=10741\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=\/wp\/v2\/posts\/10741"}],"collection":[{"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10741"}],"version-history":[{"count":5,"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=\/wp\/v2\/posts\/10741\/revisions"}],"predecessor-version":[{"id":10747,"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=\/wp\/v2\/posts\/10741\/revisions\/10747"}],"wp:attachment":[{"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gamelab.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}