Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 10 von 10
  1. Beiträge anzeigen #1 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline

    Gothic 2 - Fäuste ziehen mit Zirkumflex Taste wie in G1

    Gibt es dafür schon eine fertige Lösung?

    Möchte Fäuste ziehen mit Zirkumflex Taste, wie in G1, in G2 wieder einbauen.

  2. Beiträge anzeigen #2 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Ich bin mir ziemlich sicher, dass das in G2 geht. Ganz sicher, dass du das nicht in den Optionen einfach umkonfiguriert hast?

  3. Beiträge anzeigen #3 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Ich bin mir ziemlich sicher, dass das in G2 geht. Ganz sicher, dass du das nicht in den Optionen einfach umkonfiguriert hast?
    Man kann die Fäuste nur mit Taste 1 bzw. Leertaste ziehen, wenn man keine Nahkampfwaffe angelegt hat, aber nicht mit Zirkumflex, egal ob man eine Nahkampfwaffe angelegt hat oder nicht.


    Getestet mit Original Gothic 2 DNdR - Standard Steuerung sowie Alternativ Steuerung jeweils mit Gothic 1 Controls an und aus.

    Systempack ist beim Test verwendet worden, wird aber hoffentlich jetzt nicht den Unterschied machen.

  4. Beiträge anzeigen #4 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Also ich konnte das schon immer. Geht sowohl in G1 als auch in G2. Weiß nicht warums bei dir nicht geht


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  5. Beiträge anzeigen #5 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    G2 ohne Systempack: bei mir geht es nicht.
    In G1 funktioniert es.
    Konnte auch nirgendwo eine Einstellung dafür finden.

  6. Beiträge anzeigen #6 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Also ich konnte das schon immer. Geht sowohl in G1 als auch in G2. Weiß nicht warums bei dir nicht geht
    Du kannst in G2 die Fäuste ziehen, wenn du gleichzeitig eine Nahkampfwaffe ausgerüstest hast? Sicher?

  7. Beiträge anzeigen #7 Zitieren
    Hero Avatar von lali
    Registriert seit
    Feb 2016
    Beiträge
    5.473
     
    lali ist offline
    Ich schätze mal sie haben nicht richtig gelesen. Ich kann bestätigen, dass es bei mir nicht geht und ich habe jetzt mal ohne SystemPack getestet.
    Phoenix Dev | Website | Discord

  8. Beiträge anzeigen #8 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline
    Gibt es diesbezüglich wirklich gar keine Möglichkeit?

  9. Beiträge anzeigen #9 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Moe Beitrag anzeigen
    Gibt es diesbezüglich wirklich gar keine Möglichkeit?
    Zitat Zitat von F a w k e s Beitrag anzeigen
    Everything is possible
    Man kann das sicher (auf sehr instabile Weise) sehr einfach einbauen (FrameFunctions, MEM_KeyState, etc.). Ich wollte ein paar Anstöße geben, wie man das aber etwas sicherer in der Art und Weise von Gothic 1 nachbauen kann. Allerdings wird da in der Engine einiges überprüft, sodass ich hier nicht einfach einen Haufen von Engine-Adressen abladen wollte. Deshalb hab ichs mal fertig implementiert. Die Lösung ist so nahe wie möglich an Gothic 1 orientiert - alle Aufrufe kommen auch so in Gothic 1 vor.

    Code:
    /*
     * Initialization function for enabling fist mode on grave key
     */
    func void Game_KeyEventInit() {
        const int oCGame__HandleEvent_dfltCase = 7328820; //0x6FD434
        HookEngineF(oCGame__HandleEvent_dfltCase, 6, Game_KeyEvent);
    };
    func void Game_KeyEvent() {
        var int key; key = ESI;
    
        if (key == KEY_GRAVE) {
            var oCNpc her; her = Hlp_GetNpc(hero);
    
            if (!Npc_CanDrawWeapon(hero)) {
                return;
            };
    
            if (her.mag_book) {
                MagBook_Close(her.mag_book, TRUE);
            };
    
            if (Input_KeyToggled(KEY_GRAVE)) {
    
                if (Inventory_IsOpen()) {
                    Inventory_Close();
                };
    
                if (her.interactMob) {
                    MobContainer_CloseAndReset(her.interactMob, hero);
                };
    
                if (her.fmode != FMODE_NONE) {
                    AI_RemoveWeapon(hero);
                };
    
                if (her.fmode != FMODE_FIST) {
                    AI_DrawFists(hero);
                };
            };
        };
    };

    Den Code habe ich versucht sehr übersichtlich und nachvollziehbar zu schreiben und habe alle Engine-Aufrufe in separate Funktionen mit verständlichen Namen geschrieben (siehe unten), die vor den oben stehenden Funktionen geparst werden müssen. Initialisiert wird das ganze mit Game_KeyEventInit(); in der Init_Global.

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    func int Npc_CanDrawWeapon(var C_Npc slf) {
        const int oCNpc__CanDrawWeapon = 6817216; //0x6805C0
    
        if (!Hlp_IsValidNpc(slf)) {
            return 0;
        };
    
        var int slfPtr; slfPtr = _@(slf);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_PutRetValTo(_@(ret));
            CALL__thiscall(_@(slfPtr), oCNpc__CanDrawWeapon);
            call = CALL_End();
        };
    
        var int ret;
        return +ret;
    };
    
    func void MagBook_Close(var int mag_book, var int full) {
        const int oCMag_Book__Close = 4682352; //0x477270
    
        if (!mag_book) {
            return;
        };
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_IntParam(_@(full));
            CALL__thiscall(_@(mag_book), oCMag_Book__Close);
            call = CALL_End();
        };
    };
    
    func int Input_KeyToggled(var int key) {
        const int zCInput_Win32__KeyToggled = 5067216; //0x4D51D0
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_IntParam(_@(key));
            CALL_PutRetValTo(_@(ret));
            CALL__thiscall(_@(zCInput_zinput), zCInput_Win32__KeyToggled);
            call = CALL_End();
        };
    
        var int ret;
        return +ret;
    };
    
    func int Inventory_IsOpen() {
        const int oCItemContainer__IsOpen = 7377408; //0x709200
    
        if (!Hlp_IsValidNpc(hero)) {
            return 0;
        };
    
        var oCNpc her; her = Hlp_GetNpc(hero);
        var int inv; inv = _@(her.inventory2_vtbl);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_PutRetValTo(_@(ret));
            CALL__thiscall(_@(inv), oCItemContainer__IsOpen);
            call = CALL_End();
        };
    
        var int ret;
        return +ret;
    };
    
    func void Inventory_Close() {
        const int oCNpc__CloseInventory = 7742480; //0x762410
    
        if (!Hlp_IsValidNpc(hero)) {
            return;
        };
    
        var int herPtr; herPtr = _@(hero);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL__thiscall(_@(herPtr), oCNpc__CloseInventory);
            call = CALL_End();
        };
    };
    
    func void MobContainer_CloseAndReset(var int mobPtr, var C_Npc user) {
        const int oCMobContainer__Close = 7497280; //0x726640
        const int oCMobContainer__Reset = 7495264; //0x725E60
    
        if (!Hlp_Is_oCMobContainer(mobPtr)) {
            return;
        };
    
        if (!Hlp_IsValidNpc(user)) {
            return;
        };
    
        var int userPtr; userPtr = _@(user);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_PtrParam(_@(userPtr));
            CALL__thiscall(_@(mobPtr), oCMobContainer__Close);
    
            CALL__thiscall(_@(mobPtr), oCMobContainer__Reset);
    
            call = CALL_End();
        };
    };
    
    func void AI_DrawFists(var C_Npc slf) {
        const int sizeof_oCMsgWeapon        =       80; //0x50
        const int zCClassDef__ObjectCreated =  5942960; //0x5AAEB0
        const int oCMsgWeapon__classDef     = 11218112; //00AB2CC0
        const int oCMsgWeapon__oCMsgWeapon  =  7759824; //0x7667D0
        const int zCVob__GetEM              =  6290960; //0x5FFE10
        const int zCEventManager__OnMessage =  7889792; //0x786380
        const int EV_DRAWWEAPON             =        0;
    
        if (!Hlp_IsValidNpc(slf)) {
            return;
        };
    
        var int slfPtr; slfPtr = _@(slf);
        var int em;
        var int msgWeap; msgWeap = MEM_Alloc(sizeof_oCMsgWeapon);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_PtrParam(_@(oCMsgWeapon__classDef));
            CALL_PtrParam(_@(msgWeap));
            CALL__cdecl(zCClassDef__ObjectCreated);
    
            CALL_IntParam(_@(TRUE));
            CALL_IntParam(_@(FMODE_FIST));
            CALL_IntParam(_@(EV_DRAWWEAPON));
            CALL__thiscall(_@(msgWeap), oCMsgWeapon__oCMsgWeapon);
    
            CALL_PutRetValTo(_@(em));
            CALL__fastcall(_@(slfPtr), _@(FALSE), zCVob__GetEM);
    
            CALL_PtrParam(_@(slfPtr));
            CALL_PtrParam(_@(msgWeap));
            CALL__thiscall(_@(em), zCEventManager__OnMessage);
    
            call = CALL_End();
        };
    };
    Geändert von mud-freak (09.03.2019 um 10:15 Uhr)

  10. Beiträge anzeigen #10 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline
    Tausend Dank mud-freak!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide