Ergebnis 1 bis 20 von 2334

Thema: Programmwunsch und -erstellungsthread #2

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Na gut. Es hat beim RmXP damals zumindest geholfen. Es hat natürlich nicht das Problem beseitigt, dass der RPGXP ohnehin viele Ressourcen frisst usw.

    Es geht dabei auch um eine ganze Menge Events, da es ja sonst nicht laggen würde. Es wäre nämlich etwas großer Aufwand für eine große Anzahl an Ereignissen eine Horde an extra Variablen und co. für die Berechnung dessen, wann ein solches im Bildschirmbereich auftaucht aufzustellen und für jedes davon gesondert anpassen zu lassen.
    Aber es war nur eine kleine Idee und sicher ist die Performance vom Rm2k(3) in den meisten Fällen auch gut genug.

    Geändert von Stray (01.08.2014 um 19:56 Uhr)

  2. #2
    Die Performance sämtlicher RPG Maker ist mit Ausnahme des XP hervorragend. Es sei denn, du hast einen wirklich alten PC.

    Beim XP hilft wiederum die Fusion mit dem VX Ace, d.h. du benutzt den RMXP mit RGSS3. Sofern du Skripte benutzt, müssten die dafür aber extra abgeändert werden.

    Die 2k-/2k3-Performance-Schwierigkeiten resultieren dagegen meistens aus diesen Sachen:
    - größere, rotierende Pictures (nicht bei jedem PC)
    - keine 0.0s oder 0.1s waits am Ende eines parallelen Prozesses
    - zu riesige Maps mit zuvielen Objektcharsets

    *senf

  3. #3
    Zitat Zitat von Davy Jones Beitrag anzeigen
    Beim XP hilft wiederum die Fusion mit dem VX Ace, d.h. du benutzt den RMXP mit RGSS3. Sofern du Skripte benutzt, müssten die dafür aber extra abgeändert werden.
    Soweit ich weiß funktioniert dann die native Encryption vom XP allerdings ebenfalls nicht mehr.

  4. #4
    Zitat Zitat von Stray Beitrag anzeigen
    eine ganze Menge Events, da es ja sonst nicht laggen würde.
    Sofern du nicht auf die Idee kommst mehr als 200 mal <MoveEvent> je Frame ausführen zu lassen. (Das kann man zB. mit einem 0.0 wait in 200er Blöcke aufteilen.) MovementRoutes sind da weniger anspruchsvoll im Hinblick auf Prozessorauslastung.



    Zitat Zitat von Stray Beitrag anzeigen
    großer Aufwand für eine große Anzahl an Ereignissen eine Horde an extra Variablen und co. für die Berechnung dessen, wann ein solches im Bildschirmbereich auftaucht
    Dazu braucht man insgesamt nur 5 (Hero_x, Hero_y, Event_ID, Event_x, Event_y). Für alle Events. Und nicht für jedes Event x Werte. Bei Differenz von Hero_x - Event_x falls kleiner -20 / größer +20 bzw. Differenz in y-Pos wird halt... ich weiß nicht... so eine Art SelfSwitch umgelegt, welcher die zweite EventPage aktiviert, bei der der MovementType auf [stationär] steht. Wenn das Event wieder im Screen ist -> SelfSwitch OFF, dann geht die MovementRoute soweit ich weiß da wieder weiter, wo sie unterbrochen wurde.

    Oder besser noch: Event_ID[xyz] bis Event_ID[zyx], welche sich in einem Bereich der Map aufhalten, erst stillegen, wenn man eine bestimmte Entfernung verzeichnet. Dann laufen die Events zumindest nicht mehr asynchron oder sonstwie ungeplant durcheinander. (Ich nehme mal an, auf das Problem stößt man mit dem XP Skript?)

    Item&EventPointer-Ersatz

    Aber es sieht auch irgendwo dämlich aus, wenn etwas, das aus dem Bild raus ist, auf einmal nicht mehr hinterherkommt.

    Geändert von bugmenot (01.08.2014 um 23:41 Uhr)

  5. #5
    Zitat Zitat von goldenroy Beitrag anzeigen
    Soweit ich weiß funktioniert dann die native Encryption vom XP allerdings ebenfalls nicht mehr.
    Die XP-Verschlüsselungen wurden schon vor Jahren geknackt, dementsprechend ist der Kram so unnötig wie ein Kropf.

    Geändert von Davy Jones (02.08.2014 um 18:07 Uhr)

  6. #6
    Ich möchte aber eine wirklich große Menge Events auf einer Map verwenden, die blöderweise alle gleichzeitig einen Parallelen Prozess bräuchten. Waits habe ich bereits überall eingefügt. Laggen tut es trotzdem immer wieder mal und ich bin mir nicht sicher, ob das auf jedem anderen Rechner noch genauso 'knapp-gut' läuft, obwohl mein Computer nicht gerade eine Low-End-Maschine ist. Er ist relativ neu und funktioniert gut.

    @bugmenot:
    Auch bei 5 Variablen wäre es bei der Menge an Events und den damit zu ersetzenden Variablen extrem, da in einem Event nicht nur die Werte abgespeichert werden, sondern auch in Bedingungen abgefragt werden, was auch wieder ersetzt werden muss. Ich benutze zur Zeit für jedes Event die selben Variablen, was verrückterweise sogar ganz okay funktioniert.

    Zitat Zitat
    Aber es sieht auch irgendwo dämlich aus, wenn etwas, das aus dem Bild raus ist, auf einmal nicht mehr hinterherkommt.
    In meinem Fall wäre es nicht so wichtig, weil es ein Sidescroller ist, bei dem sich der Bildschirm während des Spielens automatisch verschiebt.

    Geändert von Stray (14.08.2014 um 14:24 Uhr)

  7. #7
    Zitat Zitat von Stray Beitrag anzeigen
    Ich möchte aber eine wirklich große Menge Events auf einer Map verwenden, die blöderweise alle gleichzeitig einen Parallelen Prozess bräuchten. Waits habe ich bereits überall eingefügt. Laggen tut es trotzdem immer wieder mal und ich bin mir nicht sicher, ob das auf jedem anderen Rechner noch genauso 'knapp-gut' läuft, obwohl mein Computer nicht gerade eine Low-End-Maschine ist. Er ist relativ neu und funktioniert gut.
    Wäre es nicht sicherer und einfacher die Events von einem globalen Loop-Event zu callen? So hättest du a) nur einen PP und b) verhinderst du von vornherein, dass sich die Events - wenn sie die gleichen Variablen nutzen - gegenseitig in die Quere kommen.

    PeAcE
    MorDen

  8. #8
    Aber das würde ja bedeuten, dass man wieder für jedes einzelne Event neue Variablen schaffen muss - und gerade das will ich nicht.
    Die Überschneidung ist nicht das große Problem, denn die funktioniert sogar ganz gut, wenn man sie in den Griff kriegt.

    Geändert von Stray (27.08.2014 um 13:11 Uhr)

  9. #9
    Zitat Zitat von Stray Beitrag anzeigen
    Aber das würde ja bedeuten, dass man wieder für jedes einzelne Event neue Variablen schaffen muss - und gerade das will ich nicht.
    Die Überschneidung ist nicht das große Problem, denn die funktioniert sogar ganz gut, wenn man sie in den Griff kriegt.
    Hi Stray. Vielleicht misverstehe ich das Problem mit den eigenen Variablen aber vielleicht hilft dir meine Vorgehensweise bei solchen Sachverhalten.

    Ich benutze für den Rm2k den Destinypatch und habe auf meinen Maps bis zu 40 Events die sich per Call einer Datenbankevents registrieren.
    Im Anschluss daran wird in einem einzigen Event der Datenbank über die IDs geloopt und je nach Eventnamen zu der ID oder weiteren Infos reagiert.

    Dabei ist der Destinypatch unersetzlich, denn er hat die Möglichkeit ein Events per ID aus einer Variable fernzusteuern oder sogar ihr Aussehen zu verändern.
    Das Minimum was du brauchst ist eine reservierte Anzahl von Variablen des RPGMaker für die ID-Liste.

    Falls deine Events Gegner sind, die eine gewisse Energie haben brauchst du logischerweise für jeden Gegner mindestens eine eigene Variable für die Energie. Der DestinyPatch bietet hier zusätzlich eigene Datentypvariablen an, die hierfür sehr praktisch sind.
    Du kannst damit beispielsweise die HP-Variable in den dworten des Destinypatch zusammensetzen aus (MapID * 1000) + EventID.
    d.h. Event 1 auf Map 1 = d[1001]
    Event 90 auf Map 150 = d[150090]
    Der DestinyPatch lässt maximal 900.000 dworte zu, soweit ich weiß.
    Auf diese Weise kannst du deinen Events eigene globale Variablen zugestehen aber du kannst ganz ohne konkrete Variablen arbeiten indem du die entsprechende Variable immer über die Formel (MapID * 1000) + EventID = dwordPointer erhälst.

    Kann man überhaupt verstehen, was ich meine?

  10. #10
    @SuperSimon:
    Es fällt mir sehr schwer das so nachzuvollziehen und glaube auch nur ungefähr verstanden zu haben. Aber es liest sich zumindest irgendwie vielversprechend. Ich werde mir den DestinyPatch später mal näher ansehen.

  11. #11
    Nach stundenlangem Suchen kann ich Folgendes mit Stolz verkünden: keine Ahnung, wie ich an den CallTree herankommen soll.
    Ich habe es mal mit etwas anderem versucht (über die Event_ID):

    Post-Umleitung


    P.S.

    download AntiLag(Fast)

    Patches für RPG_RT2k v1.51 und RPG_RT2k3 v1.09 hinzugefügt. EventUpdates allesamt am Ende eines Frames.





    Edit:
    Zitat Zitat von MarcL Beitrag anzeigen
    (MarcLMaps-->GebirgeTeilLinks/GebirgeRECHTSunten) ziemlich stark, da sind auf den Maps ~1000-2000 Events?
    Die Parent Map dazu hat übrigens 2190 Events. Und da ist kein Text...

    Habe den Kram mal mit MarcL's Zeug durchgetestet. Der Patch nennt sich zwar "Slow", aber einen großartigen Unterschied zur schnellen Variante gibt es, hinsichtlich der Performance, nicht (außer man hat zig Events mit 50 Eventseiten und in jedem eine ganze Menge <ChangeSwitch> und <ChangeVariable>).

    Ach und: nicht vergessen die Zeile AntiLagSwitch aus der DynRPG.ini zu löschen.

    Geändert von bugmenot (14.09.2014 um 16:26 Uhr)

  12. #12
    Wenn jetzt Event A das Event B aufruft, Event B setzt einen Switch der Event A (und dadurch auch die Ausführung vom gecallten Event B!) deaktivieren würde, funktioniert das mit deiner Methode nicht.

    Meine Methode mit dem Call Stack ginge so:

    In den einzelnen Funktionen für die Eventbefehle (z.B. 4ACB18 ProcChangeVariable) gibt es ja drei Parameter: eax = aktueller TLcfgScripter, edx = aktuelle TLcfgScriptData, ecx = aktuelle TLcfEventScriptLine.
    Davon ausgehend:

    Code:
    ; angenommen, eax ist der TLcfgScripter
    mov eax, [eax+4] ; TLcfgScriptDataList
    mov eax, [eax+8] ; innere TList der TLcfgScriptDataList (quasi der Call Stack)
    mov eax, [eax+4] ; Pointer auf Array
    mov eax, [eax] ; Erster Eintrag (ursprünglicher Caller)
    mov eax, [eax+1c] ; Event ID (0 wenn kein Map Event)
    Der Vollständigkeit halber müsste das ganze btw auch bei Item Management und Change Party ausgeführt werden.

    EDIT: Bei DynRPG oder beim RM2k3 Debug Addon oder der Revolution Patch Preview-Version kann die Event ID da auch negativ sein, das ist dann eine Common-Event-ID, du solltest also überprüfen ob sie >= 0 ist, nicht != 0.

    Geändert von Cherry (14.09.2014 um 13:50 Uhr)

  13. #13
    download AntiLag(Slow)


    Sollte jetzt oben beschriebene Fälle (AC statt ABC; A callt B, B bricht A ab) und Folgendes richtig durchführen:

    Im 2k(3) wird nicht nur der Caller (@ bottom of CallTree) sondern auch der Callee (@ current CallTree_pos) geupdatet.

    ...im Falle, wenn der Caller eine höhere Event_ID hat als der Callee, wird der Ausgangspunkt des <CallEvent> als letztes geupdatet. Ist klar von den Zahlen her. Wenn der Callee aber eine höhere Event_ID als der Caller hat, dann wird der Ausgangspunkt des <CallEvent> auch als letztes geupdatet. Das mit dem "aktuellen Event (das am Bottom des Calltrees)" funktioniert nicht in beide Richtungen.

    Setze mal im 2k3 Patch 0x35 = EB und 0xB1 = EB, dann wird nur das Event da vorne im CallTree geupdatet.

    Wenn der Switch, welcher das erste Event ausstellen soll, beim gecallten Event eine neue Seite öffnet, dann wird diese Seite vorher ausgeführt, bevor der Ausgangspunkt des <CallEvent> seine neue Seite ausführt.



    Zitat Zitat von Cherry Beitrag anzeigen
    Der Vollständigkeit halber müsste das ganze [...]
    Okay, LocalUpdate jetzt bei
    <ChangeSwitch>
    <ChangeVariable>
    <ChangeTimer>
    <ChangeItem>
    <ChangeParty>
    <KeyInput>

    Zitat Zitat von Cherry Beitrag anzeigen
    Revolution Patch Preview-Version kann die Event ID da auch negativ sein
    Ich hoffe das Ding ist nur für den 2k3.

    Geändert von bugmenot (14.09.2014 um 20:23 Uhr)

Berechtigungen

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