Wie ich schon schrieb hat das zur Folge dass ein nennenswerter (immer groesser werdender) Anteil der Sprites das jeweilige Ende des darueberliegenden Sprites enthaelt.
Maniac Mansion - technische Details?
-
ZeHa -
1. Juni 2016 um 13:45 -
Erledigt
Es gibt 65 Antworten in diesem Thema, welches 14.367 mal aufgerufen wurde. Der letzte Beitrag (
-
-
- Offizieller Beitrag
Ich weiss nicht, ob der Link schon gepostet wurde, aber hier hat Ron Gilbert selbst nochmal erklärt, wie die Sprites dargestellt werden:
Bitte melde dich an, um diesen Link zu sehen. -
Nee nee, das ist schon immer nur 1 Sprite pro Spritesäule.
Scheint so.Außerdem hast Du bei Deinem Argument übersehen, dass auch der Mauszeiger ein Sprite ist.
Stimmt, der ist wohl immer Sprite Bitte melde dich an, um diesen Link zu sehen., Sprite #0-2(3) die Spieler.Das hatte mich irgendwie verwirrt:
Dabei ueberlagern sich die Sprites vertikal deutlich, damit das Timing nicht so kritisch ist
Kann ein Sprite sich selbst überlagern? Oder wie... -
Kann ein Sprite sich selbst überlagern? Oder wie...
Nein. Nicht das Sprite selbst.(technisch gesehen).
Aber der Inhalt (die Daten).
D.h. wenn das Sprite 2mal direkt untereinander ist, ist es egal, ob du die Spritepointer eine Zeile vorher oder später umschaltest, da z.b. die letzte Datenzeile in beiden Spritedatas des 1. und 2. Sprites gleich ist.
Das hat dann aber natürlich zur Folge, dass du beim Umschalten vom 2. auf das 3. Sprite schon mindestens in der vorletzten Zeile Umschalten muss (da ja die letzte Zeile des 2. Sprites schon mit den letzten Datenzeile des 1. Sprites übereinstimmt.Und jetzt nicht denken, dass man im Sprite 2 gleiche Datenzeilen untereinander hat. Denn dann hast du es noch nicht verstanden

-
So sieht es im RAM aus

Wie man sieht ist ist MM da grosszuegiger als 1 Zeile. -
Wie man sieht ist ist MM da grosszuegiger als 1 Zeile.
Eigentlich kann man da an Razors Mund ganz gut sehen, daß es genau eine Zeile ist, die sich die Sprites teilen.
Ich nehme an, daß das so aufgeteilt ist, daß die Badlines da nicht in die Quere kommen, damit genug Zeit bleibt, um alle 6 Spritesäulen rechtzeitig umzuschalten. -
Ist echt ne dufte Idee, aber "Spritesäule" höre ich zum ersten Mal, ist der Begrifff "Multiplexing" nicht ausreichend?
"Spritesäule" ist eine von vielen Untermengen von "gemultiplexten Sprites"

-
So, wäre das alles nicht mal was für die Return? Zu Maniac Mansion kommen immer einige Fragen zur Technik. Sowas in der Rubrik "Proficorner" wie bei der 64er. Vielleicht unter dem Label "Secret´s of Maniac Mansion". Nicht Großes. Jedesmal ein kleines Secret mit 2 Bildern (z.B. wie in Post Nr. 3) und Erläuterung auf einer halben Seite.
-
Ich finde, das ist schon eine bemerkenswerte Leistung, was SCUMM da vorgelegt hat. Auf die Idee, die Spritezeiger einfach mitten im Sprite umzuschalten muß man auch erstmal kommen. Macht das überhaupt irgend ein anderes Spiel aus den 80'ern oder 90'ern auf diese Weise? Flackernde Sprites hat man ja schon in vielen Spielen zu Genüge gesehen.
-
Aber der Inhalt (die Daten).
D.h. wenn das Sprite 2mal direkt untereinander ist, ist es egal, ob du die Spritepointer eine Zeile vorher oder später umschaltest, da z.b. die letzte Datenzeile in beiden Spritedatas des 1. und 2. Sprites gleich ist.So sieht es im RAM aus
Ich schmeiß' mich weg..., ist das herrlich 'bescheuert' gelöst
.Wie man sieht ist ist MM da grosszuegiger als 1 Zeile.
Ich sehe (im Speicher) zwischen 4 und 6 Zeilen
. Warum variiert das?Für die, die es bis jetzt (neben mir) auch nicht verstanden hatten:
Der Sprite-Pointer wird noch während das Sprite Bitte melde dich an, um diesen Link zu sehen. z. B. an Position Bitte melde dich an, um diesen Link zu sehen. gezeichnet wird in einer der unteren 4-6 Sprite-Zeilen (vermutlich bei ca. Zeile 2/3 davon) schon auf das nächste Sprite umgeschaltet und malt aus diesem Sprite (unmerklich) weiter und zeichnet dann an der nächsten Position ebenfalls aus diesem Sprite-Pointer, aber von 'vorne/oben' an (usw.).
Beispiel:
Bitte melde dich an, um diesen Anhang zu sehen.
Während noch im Sprite davor die Haare gemalt werden, wird schon auf dieses Sprite umgeschaltet und der VIC malt die (gleichen) Haar-Pixel-Bytes aus dem Sprite Bitte melde dich an, um diesen Link zu sehen. weiter und macht an der nächsten Position darunter mit dem oberen Teil weiter usw. usf..
Die Säulen hatte ich mir jetzt auch spaßeshalber mal gebaut:
Bitte melde dich an, um diesen Anhang zu sehen.
an die Macher. -
Ich sehe (im Speicher) zwischen 4 und 6 Zeilen . Warum variiert das?
Du meinst sicher den Abstand zwischen Umschaltpunkt und Spriteende. Gemeinsam haben die Sprites immer genau eine Zeile. Daß hier im Beispiel die letzten 4 Zeilen zum "neuen" Sprite gehören und beim nächsten Sprite aber dann die letzten 5 Zeilen usw., ist eigentlich logisch. Das ergibt sich so, wenn man alle 20 Zeilen die Spritepointer während der jeweils gemeinsamen Zeile umschaltet, ein Sprite aber eine Höhe von 21 Zeilen hat. Das Praktische dabei ist auch, daß man so nie einer Badline in die Quere kommt und das Timing würde laut Ron Gilbert sogar für 6 Spritesäulen ausreichen.
-
Gemeinsam haben die Sprites immer genau eine Zeile.
Nein, guck' dir die Sprites doch mal an...! (oder wir reden aneinander vorbei...)

-
Du musst ja für jedes Sprite in Y-Richtung immer etwas früher als beim vorigen Mal umschalten, da sonst der untere Teil mit dem Overlap zum vorigen Sprite sichtbar würde. Daher muss/kann der Overlap in jedem Sprite in Y-Richtung etwas größer werden (theoretisch könnte der unterste Teil dann auch beliebig aussehen, da er nie sichtbar wird). Meinst Du das?
-
theoretisch könnte der unterste Teil dann auch beliebig aussehen, da er nie sichtbar wird
Doch, der untere Teil wird schon angezeigt. Er wird aber zuerst dargestellt. Danach geht es bei unverändertem Spritepointer im nächsten Sprite weiter, wo dann der obere Teil zu sehen ist. Und im Übergangsbereich ist genau eine Zeile mit der nächsten Spriteadresse identisch. An der Stelle wird der Spritepointer verändert. Danach kommen wieder neue Spritedaten. Im AR-Screenshot oben ist Razors Mund diese gemeinsame Zeile.
Und wenn wir von einer gemeinsamen Zeile sprechen, sind natürlich die Spritedaten damit gemeint, wie sie im RAM stehen. Im Spiel werden natürlich keine Überlappungen angezeigt.
-
Naja, das eine ist die Y-Position die ist ja fix und mit Ueberlapp meinte ich natuerlich 'Bilddaten'.
N Zeilen Sprite x am Ende sind identisch mit den N Zeilen von Sprite x+1 am Ende.
Und es sind 4 Saeulen, nicht 6
-
Doch, der untere Teil wird schon angezeigt.
Ich meinte mit "unterster Teil" den, der dann unter der Zeile kommt, in der zwischen oberem und unterem Spritepointer umgeschaltet wird. Ach Gott, das ist aber schwierig zu beschreiben...
Ich versuche mal eine einfache Skizze:
Spritedaten 1 für Kopf im Speicher (der Einfachheit halber mal 4x4 Sprites):
KKKK
KKKK
KKKK
KKKKSpritedaten 2 für Bauch im Speicher:
BBBB
BBBB
BBBB
KKKKSpritedaten 3 für Füße im Speicher:
FFFF
FFFF
BBBB
BBBB<- es ist eigentlich egal, was in dieser Zeile istEDIT: nein, ist es nicht...Spritepointer pro Rasterzeile:
Code
Alles anzeigen1111 1111 1111 1122 <- irgendwo in dieser Zeile wird der Spritepointer von den Daten für den Kopf auf den Bauch umgeschaltet. 2222 2222 2233 <- in dieser Zeile muss schon auf den Fuß umgeschaltet werden, weil ja die letzte Bauchzeile eine Kopfzeile enthält! 3333 3344 <- und wieder eine Zeile früher umschalten, weil ja die Füße gleich zwei Bauchzeilen enthalten! 4444 4444 4444Glasklar, oder?

-
Ich hab mal eine Animation erstellt, die das Prinzip verdeutlicht. Ich hoffe, daß ist so verständlich.
Bitte melde dich an, um diesen Anhang zu sehen. -
- Offizieller Beitrag
Ich hab mal eine Animation erstellt, die das Prinzip verdeutlicht. Ich hoffe, daß ist so verständlich.
Bitte melde dich an, um diesen Anhang zu sehen.DANK-O-MAT!!!
Jetzt haben es auch Doofesten - wie ich - kapiert....
-
Super, viel besser als meine verzweifelten Erklärungsversuche! Ja, und damit wird auch klar, dass ich Quatsch rede und natürlich auch der unterste Teil relevant ist (hüstel!).


-
Zumindest Turrican3 macht das aehnlich btw, aber MM ist ja doch ne ganze Ecke aelter

-