Hi,
also heute habe ich mich mal wieder grün und blau geärgert mit meinem
RPG-Maker 2000. Aus irgendeinem Grund hatte ich in meinem Menü
plötzlich einen gravierenden Fehler ohne wirklich zu wissen woher dieser
stammen könnte. Erst nach Stunden des herumprobierens habe ich mich
dann mal dazu durchgerungen den ewig langen Code von oben bis unten
genaustens zu inspizieren. Dabei bin ich auf folgende Kuriosität gestoßen:
Dem ein oder anderen erfahrenen Makerer wird hier sofort auffallen, dass
eigentlich der Gesamte Inhalt einer Fork-Case blau dargestellt werden
sollte wenn man diese mit der Maus anklickt. Bei mir war das an dieser
Stelle aus irgendeinem Grund nicht der Fall. Das selbe hatte ich auch bei
drei weiteren Forks direkt über dieser.
Etwas weiter unten dann dieser Befehl. Den Befehl "Do Nothing" kannte ich
bis dato garnicht O_o
So wie es ausieht hat der Maker wohl einfach meine Fork "zerlegt". Ich habe
die "befallenen" Forks dann "einfach" gelöscht und sie nochmal neu erstellt.
Das Problem ist jetzt zwar wieder behoben aber dennoch würde ich gerne
wissen wie es zu solch einem Fehler kommen kann?
Kennt jemand das Problem? Weiß einer wo es herkommt oder was ich
schlimmes angestellt habe das mir das passiert?
Könntest du uns sagen welche Version des RM2k du nutzt?
Gibt ja einige davon.
Sowas ist mir wirklich noch nie untergekommen, ich kann mir das nur mit einer
fehlerhaften Makerversion erklären, aber warum sollte es dann funktionieren
wenn du die fork löscht und exakt dasselbe nochmals machst.
Wie lang war denn dein Makercode?
Hab mal von einem Freund gehört, dass da ziemlich kuriose Dinge passieren können wenn der Code zu lange wird ^^
Ich benutze die Version 1.85 (zumindestens laut > Help > About)
Leider weiß ich jetzt nicht wie ich die Länge des Codes in Worte fassen soll.
Aber er ist schon kacke lang^^ Dummerweise habe ich aber mehrere lange
Codes. Der "befallene" Code ist dabei glaube ich noch nichtmal der längste.
Könntest du die "kuriosen Dinge" mal genauer beschreiben bzw. deinen
Freund dazu befragen. Wäre schon recht interessant für mich zu erfahren
was denn da scheinbar alles passieren kann damit ich mich darauf gefasst
machen kann^_-
Hmhmhm... vielleicht ein Fehler beim speichern der Database?
Sind ja alles im Endeffekt nur Offsets in einer Datei... beim fehlerhaften speichern eines Event Offsets bzw. einer If Abfrage kommt vielleicht das dabei raus.
Kuriose Theorie... aber naja... der Fehler ist glaube ich absolut neu.
--
Aktuelles Projekt "Uns're Ordnung ist das Chaos!
Verändern heißt zerstör'n!
Ich nehme mal an, dass das ein Bug beim Speichern/Laden des Events ist, der nur unter bestimmten (sehr seltenen) Bedingungen auftreten kann.
Erklären kann ich mir das so:
der Maker speichert die Befehle ungefähr so ab (nur ein Beispiel, nicht wirklich genau so):
Change Variable [0014] += 50
A = Change Variable
B = Variable 000Eh = 14
C = Add
D = Wert 00000032h = 50
Dieser Befehl ist dann 8 Bytes lang.
nehmen wir nun an, 0x79 als A sei Wait. Und das braucht nur ein Argument.
Wait 2.5 s
A = Wait
B = 1/10 Sekunden x 0019h = 25
Dieser Befehl wäre somit nur 3 Bytes lang.
wenn nun aus irgendeinem Grund bei dem oben erwähnten Change Variable statt 0x78 nun 0x79 gespeichert würde, ergibt sich folgendes:
A = Wait (!)
B = 1/10 Sekunden x 000Eh = 14
X = Neuer Befehl. 0x01 in diesem Fall. Zumindest wird das X dann als neuer Befehl gesehen, weil der Befehl 0x79 im Gegensatz zu 0x78 ja nur 3 statt 8 Bytes lang ist, die restlichen 5 Bytes also als neuer Befehl gesehen werden.
Hat jetzt wahrscheinlich kein Mensch verstanden. Aber egal.
mfG Cherry
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Ich nehme mal an, dass das ein Bug beim Speichern/Laden des Events ist, der nur unter bestimmten (sehr seltenen) Bedingungen auftreten kann.
Erklären kann ich mir das so:
der Maker speichert die Befehle ungefähr so ab (nur ein Beispiel, nicht wirklich genau so):
Change Variable [0014] += 50
A = Change Variable
B = Variable 000Eh = 14
C = Add
D = Wert 00000032h = 50
Dieser Befehl ist dann 8 Bytes lang.
nehmen wir nun an, 0x79 als A sei Wait. Und das braucht nur ein Argument.
Wait 2.5 s
A = Wait
B = 1/10 Sekunden x 0019h = 25
Dieser Befehl wäre somit nur 3 Bytes lang.
wenn nun aus irgendeinem Grund bei dem oben erwähnten Change Variable statt 0x78 nun 0x79 gespeichert würde, ergibt sich folgendes:
A = Wait (!)
B = 1/10 Sekunden x 000Eh = 14
X = Neuer Befehl. 0x01 in diesem Fall. Zumindest wird das X dann als neuer Befehl gesehen, weil der Befehl 0x79 im Gegensatz zu 0x78 ja nur 3 statt 8 Bytes lang ist, die restlichen 5 Bytes also als neuer Befehl gesehen werden.
Hat jetzt wahrscheinlich kein Mensch verstanden. Aber egal.
mfG Cherry
...
Ich habs verstanden und das ist die komplizierte Ausführung von dem was ich gemeint hab ^^
--
Aktuelles Projekt "Uns're Ordnung ist das Chaos!
Verändern heißt zerstör'n!
So richtig verstanden habe ich euch beide glaube ich noch nicht. Ihr seid
wohl der Meinung das sich der Maker in in seinem Konstrukt aus Bits und
Bytes wohl irgendwie verhaspelt hat und deswegen die Else-Case als neuen
Befehlt ansieht.
Sollte an dieser These etwas dran sein dann bräuchte ich mir wenigstens
keine Sorgen zu machen das meine Maker mir jetzt zukünftig weiter fleißig
meine Forks zerlegt. Schließlich sollte die Chance für so einen Fehler ja
doch sehr gering sein
In diesem Sinne mal danke, sollte der Fehler wieder auftauchen melde ich
mich wieder oder sollten euch noch mehr kuriose Theorien einfallen dann
postet die ruhig^_-
So richtig verstanden habe ich euch beide glaube ich noch nicht. Ihr seid
wohl der Meinung das sich der Maker in in seinem Konstrukt aus Bits und
Bytes wohl irgendwie verhaspelt hat und deswegen die Else-Case als neuen
Befehlt ansieht.
Sollte an dieser These etwas dran sein dann bräuchte ich mir wenigstens
keine Sorgen zu machen das meine Maker mir jetzt zukünftig weiter fleißig
meine Forks zerlegt. Schließlich sollte die Chance für so einen Fehler ja
doch sehr gering sein
In diesem Sinne mal danke, sollte der Fehler wieder auftauchen melde ich
mich wieder oder sollten euch noch mehr kuriose Theorien einfallen dann
postet die ruhig^_-
Gruß
Stoep
...
Nja... ich versuchs nochmal einfacher zu erklären ^^
- Jedes Event wird in einer Datei gespeichert.
- Jeder Befehl, benötigt je nach Art unterschiedlich viele Bytes in der Datei.
- Wir nehmen an das beim Speichern/Laden der Datei ein Fehler passiert ist.
- Das heißt quasi das der Fork Befehl nicht komplett gespeichert oder geladen wurde
- In Folge von dem weiss der Maker nicht, was er mit den verbleibenden Befehlsstücken zu tun hat.
Ein einfaches Beispiel: Eine 8 Byte lange Fork. Der Maker erwartet beim Auslesen nun genau 8 Byte wovon jedes mit entsprechenden Werten gefüllt sein muss. Wenn nun z.B. beim Speichern ein Fehler auftritt und der Befehl bei 7 Byte abgeschnitten wird, steht beim 8ten Byte für den eigentlichen Befehl schon der nächste Befehl. Das verwirrt den Maker weil das 8te Byte ja noch zu der Fork gehören sollte anstatt zu dem nächsten Befehl.
Ein weiteres Beispiel: Es wird ein Change Variable gespeichert mit einer Länge von 8 Byte. Anstatt das im ersten Byte der Index für Change Variable steht, steht nun anstelle dessen z.B. der Index für einen Wait dort welcher nur 3 Bytes lang ist. Der Maker interpretiert die Folgenden Bytes also als Wait, die 5 weiteren die dort noch kommen das es ja eigentlich ein 8 Byte Befehl war werden vom Maker nun als neuer Befehl gesehen oder komplett Fehlinterpretiert.
Das Beispiel ist nun nicht wirklich Praxisnah. Aber um es einfach zu verdeutlichen was Cherry meinte sollte es denke ich genügen ^^
Es tät in jedem Fall passen. Ich könnt mir vorstellen das dieses "Do nothing" Quasi die Fehlerüberbrückung von Enterbrain ist damit nicht der gesamte Maker oder das Spiel aufgrund eines einfachen Speichern/Laden Fehlers crasht.
Ich hoffe das ist etwas einfacher und verständlicher ^^ Wenn es in der Praxis doch viel komplexer zugeht.
--
Aktuelles Projekt "Uns're Ordnung ist das Chaos!
Verändern heißt zerstör'n!