Ergebnis 1 bis 9 von 9

Thema: Zerstörte Fork

  1. #1

    Zerstörte Fork

    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?

    Gruß
    Stoep

  2. #2
    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 ^^

  3. #3
    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^_-

    Gruß
    Stoep

  4. #4
    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.

  5. #5
    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
    Code:
    0x780E000132000000
      AABBBBCCDDDDDDDD
    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
    Code:
    0x791900
      AABBBB
    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:

    Code:
    0x790E000132000000
      AABBBBXXXXXXXXXX
    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

  6. #6
    Zitat Zitat von Cherry1 Beitrag anzeigen
    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
    Code:
    0x780E000132000000
      AABBBBCCDDDDDDDD
    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
    Code:
    0x791900
      AABBBB
    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:

    Code:
    0x790E000132000000
      AABBBBXXXXXXXXXX
    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 ^^

  7. #7
    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

  8. #8
    Zitat Zitat von Stoep Beitrag anzeigen
    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.

    Code:
    Die Fork 
    ABBBBBBE
    
    Fehlerhaft gespeichert:
    ABBBBBBA
    
    A ist jeweils der Befehlsanfang und E das Ende. Wenn der Maker nun anstelle des Ende von der Fork wieder ein A für den nächsten Befehl findet, kommt es zu einem Fehler.
    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.

  9. #9
    @Caine Luveno: Wirklich gut erklärt. Das habe ich jetzt nämlich sogar
    geblickt^_-

    Gruß
    Stoep

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •