Life sucks (yeah yeah yeah)

Well, herauszufinden woher die in meinem Kopf omnipräsente Textzeile „Life sucks (yeah, yeah, yeah)“ stammt, hat jetzt länger gedauert als ich zugeben möchte/sollte. >_<

Anyway, belassen wir es dabei das auch ich gerade „big IRL changes“ durchlebe und widmen uns den hier in diesem Blog essenzielleren Dingen: I’m working on the SXT again.

Um genau zu sein habe ich das gesamte SR:SNES:SRDMM-Projekt wieder ausgegraben und reanimert: [Project 2024] (Ja, einen neuen reißerischeren Namen hab ich dem Ding auch verpasst. xD)

Und da ich mich nicht nur komplett in ESO verkriechen kann … okay, sollte (btw. Ich hab endlich CP1000 geknackt und stehe kurz davor Cadwells Gold abzuschließen…) habe ich auch endlich wieder aktiv am SXT weitergebastelt.

Nach all dem Brainstorming/Hirngewichse im oben verlinkten Text habe ich tatsächlich erfolgreich damit begonnen alle „SLEEP 1„-Pausen gegen tatsächliche Kontrollen auf Änderungen am Bildschirm zu ersetzen. Dies bedeutet zwar einen erheblichen Mehraufwand und etliche Zeilen mehr Code, aber der Geschwindigkeitsgewinn ist unglaublich. Wenn ich den SXT_day19 fertig modifiziert habe, werde ich mir in der Console die Zeiten anzeigen lassen und diese dann vergleichen.

Heute bin ich dabei wieder auf einen Punkt gestoßen an dem eine Eingabe nicht funktioniert, der SXT aber ohne Störung weiter läuft. Um genau zu sein geht es darum das beim Speichern eines Screenshots der vorgeschlagene Dateiname im der Eingabefeld gelöscht werden soll, bevor in dieses via _SCREENPRINT der spezifisch generierte Name eingetragen werden soll. Dies passiert aber nicht. Zum Glück ist der Dateiname markiert, weshalb mit dem ersten eingetragenen Buchstaben der gesamte alte Text verschwindet, aber verlassen möchte ich mich darauf nicht.

Bei meinen Versuchen bin ich darauf gekommen das es ohne Zweifel ein Problem mit dem Timing ist. Wenn ich bis dahin alle Pixel-Kontrollen (fyi Pseudokreativ habe ich die SUB WhatAreYouWaitingFor getauft.) umgesetzt habe kann ich sagen ob ich recht hatte oder das Problem doch tiefgreifender ist.

Was tut sich sonst so?
Uhm, ich habe weder Zeit, Muse oder Lust gehabt am MLSRCYOA oder am  Project: JAST weiterzuarbeiten. Ersteres dümpelt derweilen noch in der Warteschleife, da ich mich irgendwo in den Handlungssträngen verfranst habe (Pun not intended. but welcomed.), und jetzt das gesamte bisherige Skript noch einmal mit verschärftem Augenmerk auf den zeitlichen Ablauf durchackere.

 Project: JAST liegt mangels weiterer Festival-Erfahrungen („big IRL changes„) noch eine Runde auf Eis. Denn genau so wie ich seinerzeit nicht mehr an NichtGruftig.at weitergezeichnet habe als ich aufhörte regelmäßig mit Gruftis abzuhängen, glaube ich auch nicht das der Besuch von zwei Metal-Festivals ausreicht um das entsprechende Feeling rüberbringen zu können. (Falls mich iwer iwohin zu Recherchezwecken mitnehmen mag, bitte kontaktieren! xD) Die Idee an sich ist aber im Gegensatz zu meinem mittlerweile zu Grabe getragenen Outage nicht tot. Denn während heutzutage niemand mehr mit dem 2012er-Weltende etwas anfangen kann, sollten Metal-Festivals mMn. immer Aktualität haben. ^_^

Spontan beschlossen…

Ha… wo fange ich an? Seit meinem letzten Eintrag ist einiges passiert. Ohne ins Detail zu gehen kann ich sagen das so gut wie kein Stein mehr auf dem anderen steht. Weitere Details sowie jegliche Deutungen ob das jetzt etwas positives oder negatives ist sind hier fehl am Platz. Punkt.

Die vielleicht (also wenn es denn jemanden interessieren würde) auffälligste Änderung ist das ich das WordPress-Layout jetzt öffentlich gemacht habe. Baustelle hin oder her, die alte Seite war echt nicht mehr repräsentativ. Dieses neue Layout beinhaltet zwar immer noch all die geekigen Auswüchse, legt den optischen Fokus jetzt aber auf meine Zeichnerei.

Ich habe in Ermangelung sonstiger selbsttherapeutischer Möglichkeiten wieder begonnen „mehr“ zu zeichnen. Nachdem ich dadurch wieder auf ein zivilisiertes Level gekommen bin, habe ich die Tim Turbo Fanfiction wieder ausgegraben und gebe jetzt bei der Gas.

Nachdem ich es geschafft habe meinen während bored und Drawlloween gefundenen Zeichenstil fortzuführen, habe ich durch das umarrangieren der bisherigen Seiten auch noch eine halbe Logiklücke schließen können.

Zwei Seiten und etliche Stunden Recherche später, bin ich sogar mit der Planung so weit fortgeschritten das ich sogar die erste Doppelseite umsetzen kann.

Das heißt zwar für einen im Internet veröffentlichten Comic nichts, aber wozu arbeite ich im Digitaldruck wenn ich nicht zumindestens ein Heft tatsächlich drucken werde? *g*

Tja… und kaum war ich wieder voll in Fahrt… the return of the black dog. Habe mich am Wochenende mehr oder weniger erfolgreich damit abgelenkt den zweiten South Park-Teil duchzuspielen und heute die Bastlerei an dieser Seite vorgeschoben. Eigentlich sollte ich damit alle mehr oder weniger sinnvollen Möglichkeiten zur Prokrastination ausgeschöpft haben.

Brainfart of the day: Let’s Draw

Als Ultima Dragon habe ich mir vor hundert Jahren vorgenommen alle Ultima Teile dokumentiert durchzuspielen. Bis jetzt habe ich Akalabeth und Escape from Mount Drash geschafft. Für Ultima I ist alles vorbereitet, nur irgendwie komme ich nicht in die Gänge.

Dann habe ich beschlossen „nebenbei“ mit Final Fantasy das selbe zu tun, aber meine Detailversessenheit und ein Skalierungsproblem (Unterschiedlich große Screenshots kann man nicht zu einer Map kombinieren…) habe mich bei Teil I kurz vor dem zweiten Drittel Schachmatt gesetzt.

Dann war da die Elder Scrolls Anthology mit ihrer supertollen Diskettenversion von Arena auf einer ganzen CD. Dank Gog besitze ich jetzt auch die CD-Version aber auch hier hat mich die Komplexität der von mir erstellten Webseiten mitten drinnen erschlagen.

Zwischendurch habe ich noch überlegt einen Evil-Baldurs Gate I-Run und einen Low-Intelligence-Fallout I-Run zu starten, aber beides ist noch in der Vorbereitungsphase draufgegangen. Mein Reeh vs. Chrono Trigger ist zu aufwendig geworde und meine Idee den Singleplayermodus von Shroud of the Avatar zu dokumentieren scheiterte daran das sich das Spiel dank der MMORPG-Komponente nicht pausieren lässt und einen ausloggt wenn man länger inaktiv (zB. im Notepad an der Formulierung des Geschehenen feilt) ist.

Soviel zu meinen Nicht-Video-Let’s Play-Versuchen. Bis auf mein überambitioniertes Nocturne-Mega-Schnittprojekt habe ich alle sonstigen Video-Let’s Play-Ideen für das Waldtiere-Branding zusammen mit Robert reserviert.

Trotzdem kommt es immer häufiger vor das ich das Geschehen am Monitor nicht undokumentiert lassen möchte. Einerseits weil sich da immens viel Schwachsinn in meinem Kopf angesammelt hat und andererseits weil ich große Spiele nicht mehr am Stück schaffe (Allein schon die Pausen dank meines Schichtdienstes bremsen mörderisch aus.) und regelmäßig Probleme habe wieder Anschluß zu finden.

Soviel zum Thema Let’s Play. Zum Thema Zeichnen habe ich einen ähnlichen Wortschwall…

Ich habe jetzt zum zweiten Mal an Mab Graves Drawlloween Club teilgenommen und wieder habe ich es geschafft dannach eine Pause zu benötigen. Ein Monat lang jeden Tag vier Stunden und das teilweise auch noch zu Themen die mir nichts geben war hart.

Dazu kam da sich diesmal versucht habe eine fortlaufende Geschichte zu erzählen. Ohne Worte und jeden Tag ein Instagram-taugliches Quadrat. Das Experiment ging daneben. Gründlich. Auch das war meiner Lust weiterzumachen nicht wirklich zuträglich.

Die Idee mit dem Shadowrun-Comic auf der selben 1-Bild-pro-Tag-ohne-Worte-Basis habe ad acta gelegt. Obwohl die Geschichte als auch die Charaktere sehr weit ausgearbeitet waren. Aber [rant/ON] ich möchte ja niemanden mit einem Webcomic überfordern… [rant/OFF]

Meine Tim Turbo Fanfiction liegt aufgrund meiner Unfähigkeit Fritzl Fantom auf einem mir genügendem Level zu zeichen auf Eis. Ursprünglich wollte ich Drawlloween zum Üben verwenden, aber… ja… nein.

Vor mehreren Jahren hatte ich noch „Outage„… auch daran könnte ich weitermachen, aber auch hier haben, trotz normalen Comicseiten-Layout, nur die wenigsten das mit dem „fortlaufend“ realisiert. Das sich während dessen Entstehung (und auch seit ich es auf Eis gelegt habe) mein Level verbessert hat dürfte es auch nicht leichter machen anzuschließen.

Robert meinte ich würde für mich und nicht meine Umwelt zeichnen, sollte mir das alles also nicht so zu Herzen nehmen. Bis auf die Tim Turbo Fanfiction (Die Jungs haben soviel blöde Ideen in mein Hirn gepflanzt, die sollen gefälligst an der Ernte beteiligt sein! *fg*) mag das zwar stimmen, aber wie man an „Outage“ sieht neige ich dazu eingelegte Pausen extrem zu dehnen.

Mit Shadowrun und dem vorbereiteten Storyboard für mehr als 100 Bilder wollte ich dem entgegen treten, aber das von mir angedachte Format wäre ja zu viel. Und gerade Shadowrun wäre etwas gewesen bei dem ich unbedingt gerne Feedback gehabt hätte.

Ich sitze also bei zwei meiner Hobbies gerade auf dem trockenen. Warum nicht das Schlechteste daraus machen und sie kombinieren? Aktuell spiele ich mich mit dem Gedanken Shadowrun Hong Kong noch einmal zu probieren. Erstens nervet es mich das ich seinerzeit aufgegeben habe (Ich mochte die „neue“ Matrix nicht und das die Mission auf Zeit war habe ich erst mitbekommen als diese abgelaufen war. Der Frust darüber war… anhaltend.), zweitens hat das Spiel Achievments und drittens ist seit meinem Rage Quit ist die Extended Version veröffentlich worden.

Mit der Idee statt Screenshots Cartoons zu verwenden habe ich mich schon bei Shroud of the Avatar gespielt, aber da hat mich die „Schreib etwas im Notepad und du wirst ausgeloggt„-Sache ausgebremst. Diese Probleme gibt es bei den Shadowrun-Spielen nicht, deren Fenstermodus funktioniert einwandfrei.

Damit wäre es also beschlossen: /me wird ein Shadowrun-Hong-Kong-Let’s-Draw erstellen. Während dem Spiel werde ich mir im Notepad Notizen machen und zusätzlich Screenshots erstellen. Ein Video aufzunehmen ist glaube ich nicht notwendig.

Jetzt gerade bin ich mir unschlüssig wie ich das dann umsetzen will. Das normale Comicseiten-Layout ist traditionell hochformatig und am dynamischten, kann aber auf querformatigen Bildschirmen nur sehr wenig. Das Cartoon-ige „Mehrere-Panels-nebeneinander“ zwingt mich gerade dazu pro Strip ein in sich abgeschlossenes Stück Handlung zu verpacken. Mit dem derzeit etablierten Webcomic-Format bei dem elendiglich lang nach unten gescrollt wird habe ich mich bis jetzt nicht wirklich anfreunden können, aber theoretisch würde es mir die Dynamik wieder zurückbringen. Am liebsten habe ich gerade das von Tardaasa verwendete Swipe-Comic-Format. Quadratische Panels die in Facebook/Instagram „interaktiv“ gelesen werden können und sonst in 2×3 (oder 2×4) Blockform dargestellt werden.

Ich weiß noch nicht ob es die Geschichte erlaubt, aber ad hoc schwebt mir folgendes Frankstein’sches Monster vor: Ich erstelle ein Storyboard das für das vertikal unendliche Webcomic-Format ausgelegt ist, schaue aber das alle essentiellen Teile der Panels in einem Quadrat stattfinden damit ich aus diesen einen Swipe-Comic kreieren kann.

Na dann… vielleicht kann ich dieses Wochenende schon damit beginnen 🙂


Frohe Y-nachten…

Gestern habe ich eine halbe Ewigkeit daran herumgebastelt wie ich kontrollieren könnte ob das Scene-View und Memory-View Fenster aktiviert sind nur um dann zu entdecken das sich in der vSNES.ini die Zeile WindowList=Form_Scene,Form_Memory befindet.

Während dieser Versuche habe ich entdeckt das vSNES manchmal länger lädt als die Pausen die ich dafür eingeplant habe andauern. (Warum auch immer, ein System dahinter konnte ich nicht finden.). Also habe ich die oben erwähnte Kontrolle wieder aus der Versenkung geholt und adaptiert.

Im Prinzip wird der Teil des Bildschirms in dem zu diesem Zeitpunkt der noch blauen Scene-View Fensters sein sollte in den Speicher gelegt und dann auf das Vorhandensein der blauen Farbe kontrolliert.

In der Praxis habe ich entdecken dürfen das QB64 nicht nur die 1536*864px-G’schicht sondern auch ein prinzipielles Problem mit der Bildschirmausgabe hat. Ich kann den Vergrößerungsfaktor (noch) nicht genau bestimmen, aber im Ausschnitt links ist die 1 um drei Pixel und die 2 und vier Pixel vergrößert dargestellt!?!

(Im Beispiel links liegt Notepad mit den Ziffern im Hintergrund, darüber liegt der von QB64 erstellte Screenshot dieser Spalte. Rechts daneben ist kA mehr warum ein Teil vom QB64-Fenster.)

Da sich alle Koordinaten weder auf diesen Maßstab noch den der originalen Bildschirmauflösung beziehen, ist es nach vor nur per Trial & Error möglich auf funktionierende Werte zu kommen. Erschwerend kommt auch noch dazu das auch die per POINT ausgelesenen RGB-Daten nicht den in Photoshop angezeigten entsprechen. Und soll ich auch noch erwähnen das _putimage; gerade auch nicht wirklich so funktioniert wie ich gewohnt bin? Nämlich gar nicht.

Ich hoffe ich finde demnächst heraus wo mein Fehler liegt, denn irgendwie möchte ich nicht wahrhaben das QB64 dermaßen kaputt ist.

Heute,  so als eine Art Weihnachtswunder, habe ich es endlich geschafft die Kontrolle umzusetzen. Eigentlich sollte ich jetzt weiter am exportieren basteln… aber ich habe keine Lust. Vielleicht später…

Update: Habe 137 Backup-vSNES.ini’s gelöscht und beschlossen das dies automatisch nach dem Beenden passieren sollte. Gesagt getan, vor Ende des Programms wird jetzt die ursprünglich vorhandene vSNES.ini wiederhergestellt. (alias zurück umbenannt). Weil ich die temporäre RGB-Wert-Anzeige noch nicht deaktiviert hatte, habe ich mich in diesem Zug auch gleich mit der „Status:“-Angabe gespielt.

Von einem der auszog um Sprites zu rippen…

Nachdem ich heute @wrk ein bisschen Luft habe, versuche ich einen Teil meines seit Beginn des Projektes SR:SNES:DRMM gesammelten Wissens zu tei… niederzuschreiben damit ich [Schwarzsehermodus:ON] wenn ich nachdem ich das Projekt demnächst auf Eis gelegt habe und Jahre später wieder ausgrabe mir nicht wieder alles aus den Fingern saugen muss.[Schwarzsehermodus:OFF]

And the big black dog bit me again, wohoo…

Egal. So ziemliche alle Beiträge zum Thema „SNES Sprites rippen“ berufen sich auf die mit den Emulatoren einzeln einblendbaren Layer:

Hier die Version in der die verschiedenen Layer einzeln ausgeblendet werden:



Und hier die etwas sinnvollere in der alle anderen Layer ausgeblendet sind:



Laut zSNES gibt es also vier Backround- und einen Sprite-Layer. Das stimmt mit der auf Wikipedia befindelichen Info überein:

Auflösung:224 (NTSC) bzw. 239 (PAL) Bildzeilen im Progressive-Modus, 448 bzw. 478 Zeilen im Interlaced-Modus. 256 Pixel pro Zeile im Standardmodus, 512 im „High-Res“ Modus.
Farbtiefe:15-Bit-Farbpalette, davon theoretisch alle Farben gleichzeitig darstellbar (unter Ausnutzung des Color Add/Subtract-Modus). Ansonsten bis zu 256 Farben aus 4096 (Mode 7).
Hintergründe:Bis zu 4 unabhängig scrollbare Tilemap-Grafikebenen (Playfields), Colour Add/Subtract Mode (zum Kombinieren der Grafikebenen für Transparenzeffekte zwischen den einzelnen Ebenen und Sprites), 8 Grafikmodi mit unterschiedlichen Farbtiefen und Anzahl der Ebenen, Mode 7 erlaubt das dreidimensionale Zoomen, Drehen und Verzerren einer Grafikebene. Das Kippen der Grafik war von Hause aus nicht möglich, wurde aber durch helfende DSP-Chips in manchen Modulen gewährt.
Sprites:128 Hardware-Sprites, 16 Farben pro Sprite (eine davon transparent), Spritegrößen von 8 × 8 bis 64 × 64 Pixel, max. 32 Sprites pro Zeile, max. 34 Sprite-Tiles (8 × 8 Pixel) pro Zeile.
Die meisten Beiträge schlagen vor das Spiel zu pausieren, alles bis auf die zu extrahierenden Layer auszublenden, einen Screenshot zu erstellen und dann im Bildbearbeitungsprogramm der Wahl loszulegen. Zielt man die einzelnen Phasen einer Animation ab, wünscht einem die Mehrheit ironisch viel Spaß während die Handvoll ernstzunehmender Autoren vorschlägt die gewünschte Animation mit ausgeblendeten Layern als Video aufzuzeichnen, die Frames zu extrahieren, jene mit den einzelnen Phasen auszusortieren und diese dann wie gewohnt im Bildbearbeitungsprogramm der Wahl zu verarbeiten.

Das geht einen Millimeter einfacher. zSNES verfügt nämlich über die Fähigkeit pro Tastendruck nur ein Frame weiterzurechnen. Die Betonung liegt auf weiterrechnen, denn es geht um die auf den SNES-Takt bezogen erstellten Frames, nicht jene in denen sich etwas am Bildschirm verändert. Man muß also immer noch x mal weiter drücken bis man das nächste Sprite angezeigt bekommt, aber das geht immer noch um Jahrhunderte schneller als die Version mit dem Video.

Die Vorarbeit hierzu liegt in den „SPEED OPTIONS“ (CONFIG„->“SPEED). Hier befindet sich unter „PAUSE GAME“ der standardmäßig inaktive Punkt „INCR FRAME„. Hier einmal reinklicken und die Wunschtaste (Bei mir hat sich ohne triftigen Grund „Ü“ eingebürgert…) eintragen.



Nicht vergessen unter „MISC„->“MISC KEYS“ auch eine Taste für die zSNES-eigenen „SNAPSHOTS“ (alias Screenshots) anzugeben. 😉



Dann geht’s auch schon los. Vor dem Animationsbeginn „PAUSE GAME“ (im Normalfall „P“) betätigen, dann solange die bei „INCR FRAME“ eingetragene Taste drücken bis das erste Wunschsprite angezeigt wird und mit der „SNAPSHOT„-Taste aufnehmen. Dann mit „INCR FRAME“ solange weiter bis das nächste angezeigt wird, „SNAPSHOT„, und so weiter und so weiter.

Man kann btw. während dem Drücken von „INCR FRAME“ auch weitere Befehle eingeben. Wenn man zB. eine Richtungstaste drückt um die Spielfigur zu bewegen so wird diese Aktion von zSNES registriert und angewandt. Man könnte also, genug Geduld vorausgesetzt, während dem „INCR FRAME„-„SNAPSHOT„-Prozedere das Spiel auch tatsächlich spielen.

Soviel zum Thema Screenshots.

An die Grenzen von Screenshots im Allgemeinen stößt der geneigte Ripper sobald sich Sprites überlappen (Da es nur einen Sprite-Layer gibt ist die Chance das es dazu kommt extrem hoch.) oder Tilesets in Angriff genommen werden. Je besser der urprüngliche Künstler sein Handwerk verstanden hat desto aufwendiger wird es die Pixel korrekt zuzuordnen.

In der Regel wird einem erklärt das SNES-Sprites und Tiles zwischen 16×16 und 32×32 Pixel groß sind. Weil das bei den meisten klassischen JRPGs hervorragend passt, kann man (in diesem Fall ich) auch davon ausgehen das es sich bei isometrischen Spielen wie Shadowrun genauso verhält.



Tut es aber nicht. Vor allem der fixe Trugschluss das Tiles auf 16×16 Pixel dimensioniert sind zeigt sich anhand der links übrig bleibenden einzelnen Zeile. Dank vSNES weiß ich mittlerweile das die Wahrheit bei ganz normalen rechtwinkeligen 8×8 Pixel-Quadraten liegt.



Der ganze Bildschirm ist (zumindest bei Shadowrun) in 8×8 Pixel-Quadrate aufgeteilt. Jedes Sprite, jedes Tile, jede Font, etc. ist in 8×8 Pixel Quadrate im Speicher hinterlegt. vSNES arbeitet mit den .zst-Dateien, den Savestates von zSNES. Savestates beinhalten alles was sich in dem Moment als es erstellt wurde im Speicher befand.



Das einige Farben nicht passen liegt daran das jedem Sprite eine Palette aus 16 Farben (eine davon transparent, siehe Wikipediaausschnitt) zugeordnet ist und der MemViewer immer nur eine davon anzeigt. Warum? Keine Ahnung, ist aber für meine Zwecke auch egal. Um ehrlich zu sein habe ich den MemViewer mittlerweile gar nicht mehr aktiviert, denn der SceneViewer kann in der „layers“-Anzeige nämlich diese 8×8-Pixel Quadrate einzeln anzeigen.



In dem Screenshot sieht man leider nicht das der Mauscursor sich gerade über Jakes Oberkörper befindet und dieser deswegen im „tile info“-Feld vergrößert dargestellt wird. Wirklich deutlich wird die Mächtigkeit des Viewers aber erst wenn Sprites überlappt dargestellt werden, wie zB die Tür über dem einem Morgue-Angestellten. Fährt man mit dem Cursor über das Maxerl, wird es im „tile info“-Feld vollständig, ohne Türe dargestellt.

Ich habe keine Ahnung wie es sich bei scrollenden Darstellungen verhält, so weit bin ich mit dem Auseinandernehmen (und analysieren was da gerade abgeht…) noch nicht. Die Vermutung das sich das Bild dennoch im Speicher aus 8×8 Pixel Quadraten aufbaut und am Bildschirm versetzt dargestellt wird liegt aber verdammt nahe. Zumindest funktioniert das Skyline-Hochhaus-Intro von Shadowrun auf diese Weise.



Der Tag nähert sich dem Ende und ich kann sagen das ich hier das Grundprinzip meines aktuellen Versuches die Sprites zu extrahieren meiner Meinung nach gut erklärt habe. Warum das aber noch nicht das Ende der Fahnenstange ist und warum ich extra meinen „SpriteXtractor“ (Ja, ich mag den Angebernamen immer noch *g*) bastle um die dabei anfallende Arbeit wenigsten ein bisschen auslagern zu können erkläre ich demnächst.