Ergebnis 1 bis 20 von 506

Thema: +++ DynRPG - Das RM2k3-Plugin-SDK +++

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Mich hat gerade wer gefragt um eine Idee wie man Messageboxen custom zeichnen könnte.

    Ich dachte irgendwie nicht dran, dass diese Person gar kein Plugin-Developer ist, drum brachte es letztenendes nichts. Aber vielleicht bringts ja hier wem was.

    Hier ist Code (den ich allerdings nicht getestet habe), mit dem man in der Lage sein sollte, das zu erreichen:

    Code:
    bool onStartup(char *pluginName) {
        // Set up hook
        void *trampoline;
        asm volatile("movl $_drawMessageBoxTrampoline, %%eax" : "=a" (trampoline));
        *reinterpret_cast<void **>(0x4C60DC) = trampoline;
    }
    
    // This can be used to trigger the original drawing function
    void originalDrawMessageBox(RPG::WindowMessage *box) {
        asm volatile("call *%%esi" : : "S" (0x4C8488), "a" (box) : "edx", "ecx", "cc", "memory");
    }
    
    // Some more stuff for the hook
    void drawMessageBox(RPG::WindowMessage* box);
    extern "C" {
        void __stdcall drawMessageBoxTrampoline2(RPG::WindowMessage *box) {
            drawMessageBox(box);
        }
    }
    asm volatile("_drawMessageBoxTrampoline:; pushl %eax; jmp *$_drawMessageBoxTrampoline2@4");
    
    // Here is your drawing callback!
    void drawMessageBox(RPG::WindowMessage* box) {
        // Here you can draw the box yourself, based on the information available in the box object!
        // Or, to call the original drawing function, use originalDrawMessageBox(box);
    }
    Braucht PepsiOtakus Version von DynRPG (0.32 oder so): http://www.rewking.com/dynrpg/

    RPG::WindowMessage ist hier dokumentiert: http://www.rewking.com/dynrpg/class_...w_message.html

    Geändert von Cherry (10.08.2022 um 11:29 Uhr)

  2. #2
    Lebt hier noch wer und kann mir sagen obs irgendwie machbar ist im Kampf anzeigen zu lassen ob ein Gegner einem Angriff ausgewichen oder dagegen Immun war (Zustandsveränderungen)? Der 2k3 hat ja nur noch eine Evade Message für alles - was halt gerade bei Zuständen extrem nervig ist wenn da nur steht "Miss" aber man nicht weiß ob der jetzt ausgewichen ist oder der Zustand einfach nur 0% Chance auf Erfolg hat.

  3. #3
    Is there still someone who creates plugins for dynrpg?

  4. #4
    Probably more at rpgmaker.net than here...

  5. #5
    Ich hab was gebastelt mit dem man in einem Plugin auf das Zeichnen von Text reagieren kann und auch darauf Einfluss nehmen.

    https://gist.github.com/CherryDT/760...69c05000955f5c

  6. #6
    Hui, hier ist ja schon eine ganze Weile nichts mehr gepostet worden, aber ich versuche es trotzdem mal, hehe.

    Ich habe ein Plugin erstellt, mit dem es möglich ist, dass Actors eine spezielle "Low HP/Weak"-Pose anstelle der normalen Idle-Pose verwenden, sobald ihre HP unter 33% fallen.

    Code:
    #include <DynRPG/DynRPG.h>
    
    // ID des Weak-Status (Conditions-Tab)
    static const int WEAK_STATE_ID = 12;
    
    bool onBattlerActionDone(RPG::Battler *battler, bool success) {
        // nur bei echtem Abschluss (success==true)
        if(!success)
            return true;  // weiteren Plugins nichts im Weg stehen
    
        // nur Actors behandeln
        if(!battler->isMonster()) {                                        // isMonster(): true=Monster
            // HP-Prozent berechnen
            int currentHP = battler->hp;                                   // aktuelles HP-Feld
            int maxHP     = battler->getMaxHp();                           // Max-HP via Member-Funktion
            double pct    = (double)currentHP / maxHP * 100.0;
    
            // 1) <= 33 % HP -> Weak-Status hinzufügen
            if(pct <= 33.0 && battler->conditions[WEAK_STATE_ID] == 0) {
                battler->conditions[WEAK_STATE_ID] = 1;                    // Zustand aktivieren
                RPG::updateBattle();
            }
            // 2) > 33 % HP -> Weak-Status entfernen
            else if(pct > 33.0 && battler->conditions[WEAK_STATE_ID] > 0) {
                battler->conditions[WEAK_STATE_ID] = 0;                    // Zustand deaktivieren
                RPG::updateBattle();
            }
        }
        return true;  // Callback-Kette nicht unterbrechen
    }
    @Cherry Der eigentliche Grund, warum ich hier bin: Ich würde gerne eine Pose für das Ausweichen (Evasion) und eine für das Blocken (Guarding) einbauen. Konkret möchte ich, dass während ein Actor im Guarding-Modus ist, eine andere Pose angezeigt wird als die normale Damage-Pose. Beispiel: Actor hält ein Schild. Gibt es eine Möglichkeit, abzufragen, ob sich ein Actor gerade im Guarding-Modus befindet? Und wie könnte man das mit dem Ausweichen handhaben? Ich vermute, Letzteres ist ohne ASM-Hacks an der RPG_RT.exe wahrscheinlich nicht wirklich umsetzbar, aber ich würde mich trotzdem über Input oder Ideen freuen!

    Geändert von budbud (08.05.2025 um 22:04 Uhr)

Berechtigungen

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