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

 

Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 29
  1. Beiträge anzeigen #1 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline

    Vob_GetdistToVob?

    Es gibt ja Npc_GetDistToNpc. Gibt es auch irgendwo eine allgemeinere Funktion?
    Ich platziere Vobs frei in der Welt und möchte so herausfinden ob z.b. das vob x unter dem vob y platziert wurde um es anders zu behandeln. Genau gesagt geht es um gras das unter schützenden Anhöhen / vobs schneller trocknet.


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

  2. Beiträge anzeigen #2 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Nicht direkt eine Antwort auf deine Frage, aber eventuell gibt es in Verbindung mit z.B. GothicFreeAim passende ray tracing Methoden, mit denen du ermitteln kannst, ob es oberhalb des Items Kollision mit etwas gibt.

  3. Beiträge anzeigen #3 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Npc_GetDistToNpc beachtet sowieso nur die horizontalen Dimensionen (glaube ich), wäre also ziemlich ungeeignet.

    Die Distanz zwischen den beiden Punkten P = (xP, yP, zP) und Q = (xQ, yQ, zQ) kannst du aber einfach berechnen:

    dist(P, Q) = sqrt((xP-xQ)² + (yP-yQ)² + (zP-zQ)²)

    Danach brauchst du natürlich noch den Winkel. In den Trafo-Skripten (irgendwas mit TRF als Präfix bei den Funktionen) gibt es dazu aber glaube ich schon was.

  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
    Ah schön dich zu sehen. Ich nehme an die xyz muss ich schlicht mit den Werten aus der trafo füllen. Aber warum muss ich die Wurzel ziehen? Ist das so ein math. Konstrukt das man einfach nicht hinterfragt?

    Edit ich seh grad das ist ja ne standardformel die ich sogar aus der schule kenne. Aufm handy überliest man schnell ne klammer.

    Edit2 wozu brauch ich den Winkel? Meine vobs werden alle brav im 90 grad winlel aufgestellt.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette
    Geändert von Bisasam (16.06.2019 um 20:03 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Ah schön dich zu sehen. Ich nehme an die xyz muss ich schlicht mit den Werten aus der trafo füllen. Aber warum muss ich die Wurzel ziehen? Ist das so ein math. Konstrukt das man einfach nicht hinterfragt?

    Edit ich seh grad das ist ja ne standardformel die ich sogar aus der schule kenne. Aufm handy überliest man schnell ne klammer.

    Edit2 wozu brauch ich den Winkel? Meine vobs werden alle brav im 90 grad winlel aufgestellt.
    Winkel: 1m weit weg nach rechts ist in deinem Fall anders zu behandeln als 1m weit weg nach unten.

    Etwas, das du eventuell beachten möchtest: du wirst die Entfernung zu einem Punkt des Vobs berechnen. Aber die meisten Vobs haben auch eine horizontale Ausdehnung, die du beachten möchtest. Wenn das Vob ein Hausdach ist, ist es ja nicht nur unter dem Mittelpunkt des Daches geschützt, sondern auch an anderen Stellen, über denen das Dach ist.

  6. Beiträge anzeigen #6 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Und da wird das ganze wieder kompliziert...

    Ich seh mir mal an ob ich die Punktberechnung überhaupt kriege. Vielleicht komm ich dann auch selbst auf ne gute Lösung.

    Wäre es denn vllt einfacher, eine bounding box kollision abzufragen?


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

  7. Beiträge anzeigen #7 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Mud freak hat ja auch irgendwie heraus bekommen, wo ein Pfeil hin fliegt und stecken bleiben kann...

  8. Beiträge anzeigen #8 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Ich hab mal für meine Survialmod ein Skript geschrieben welches prüft ob ein VOB vorm Regen geschützt ist.

    Code:
    // Ist glaub ich von Sektenspinner aus den Irrwichtelskripten 
    
    /* Traceray-Flags (e.g. for zCWorld::TraceRayNearestHit)
    * Die Flags die übergeben werden können sollten folgende Bedeutung haben: */
    const int zTRACERAY_VOB_IGNORE_NO_CD_DYN    = 1<<0;        //Vobs ohne Kollision ignorieren
    const int zTRACERAY_VOB_IGNORE                = 1<<1;        //Alle Vobs ignorieren (nur statisches Mesh beachten)
    const int zTRACERAY_VOB_BBOX                = 1<<2;        //Test auf Boundingboxen von Vobs (schneller als "richtiger" Schnitttest)
    
    
    const int zTRACERAY_STAT_IGNORE                = 1<<4;        //Statische Welt ignorieren (nur Vobs beachten)
    const int zTRACERAY_STAT_POLY                = 1<<5;        //Ein Zeiger auf das Schnittpolygon (falls es eines gibt) wird im Tracerayreport abgelegt.
    const int zTRACERAY_STAT_PORTALS            = 1<<6;        //Schnitte mit Portalen werden auch als Schnitte gewertet
    
    
    const int zTRACERAY_POLY_NORMAL                = 1<<7;        //Ermittle auch normale des Schnittpolygons
    const int zTRACERAY_POLY_IGNORE_TRANSP        = 1<<8;        //Ignoriere Materialien mit Alphatextur
    const int zTRACERAY_POLY_TEST_WATER            = 1<<9;        //Auch Wasser ist ein Schnitt.
    const int zTRACERAY_POLY_2SIDED                = 1<<10;    //Kein Backfaceculling
    const int zTRACERAY_VOB_IGNORE_CHARACTER    = 1<<11;    //Ignoriere Npcs
    const int zTRACERAY_FIRSTHIT                = 1<<12;    //Irgendein Schnittpunkt genügt. Schneller als den nächsten Schnittpunkt ausrechnen.
    const int zTRACERAY_VOB_TEST_HELPER_VISUALS    = 1<<13;    //Auch Helpervisuals können getroffen werden
    const int zTRACERAY_VOB_IGNORE_PROJECTILES    = 1<<14;    //Ignoriere Projektile
    
    
    func int TraceRay(var int startVec, var int dirVec, var int flags) {
        const int zCWorld__TraceRayNearestHit = 6429568; //621B80
        
        //int __fastcall (class zVEC3 const &, class zVEC3 const &, class zCArray<class zCVob *> const *, int)
        CALL_IntParam(flags);
        CALL_PtrParam(0); //ignore no vobs
        CALL_PtrParam(dirVec);
        
        CALL__fastcall(MEM_InstGetOffset(MEM_World), startVec, zCWorld__TraceRayNearestHit);
        return CALL_RetValAsInt();
    };
    
    
    func void GetPositionWorldVec(var int vobPtr, var int vecPtr) {
    	var zCVob vob; vob = MEM_PtrToInst(vobPtr);
    	MEM_WriteIntArray(vecPtr, 0, vob.trafoObjToWorld[3]);
    	MEM_WriteIntArray(vecPtr, 1, vob.trafoObjToWorld[7]);
    	MEM_WriteIntArray(vecPtr, 2, vob.trafoObjToWorld[11]);
    };
    Code:
    func int CheckIfSaveFromRain (var string vobname) {
        var zCVob vob;    vob = MEM_PtrToInst (MEM_SearchVobByName (STR_Upper (vobname)));
        var int pos[3];    var int ray[3];    
        
        GetPositionWorldVec(MEM_InstToPtr (vob), _@(pos));
        ray[0] = 0; ray[2] = 0; ray[1] = mkf (10000);
        
        if (TraceRay(_@(pos), _@(ray), zTRACERAY_VOB_IGNORE_NO_CD_DYN | zTRACERAY_POLY_IGNORE_TRANSP | zTRACERAY_VOB_IGNORE_CHARACTER)) {
            return TRUE;
        } else {
            return FALSE;
        };
        
    };
    Ich bin mir aber nicht mehr sicher wie gut es wirklich funktioniert hat. Aber es wär bestimmt schon mal ein guter Anfang.

  9. Beiträge anzeigen #9 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Wusste gar nicht daß du auch mal an sowas gebaut hast, umfi. Gibts da nen thread zu? Bastelst du da grad noch dran?

    Das Skript werde ich ausprobieren. Falls noch was dran ausgebessert werden muss poste ich das aktualisierte mit comment hier rein. Vielen herzlichen Dank


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

  10. Beiträge anzeigen #10 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Wusste gar nicht daß du auch mal an sowas gebaut hast, umfi. Gibts da nen thread zu? Bastelst du da grad noch dran?
    Ja gab mal eine Ankündigung: Zum-Tode-verurteilt

    Aktuell nicht nein, bin gerade noch an VINV dran, ob ich es später dann mal fertig machen werde, wird sich zeigen.

  11. Beiträge anzeigen #11 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Oh mann du hattest das alles ja schon vor 7 jahren. Und ich dachte ich hätte das rad mal selbst erfunden...
    Auf dem letzten moddertreffen wurde gesagt dass es mittlerweile eine möglichkeit gäbe vobs regenundurchlässig zu machen. Ich find dazu aber nix. Weiss jemand was darüber?


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

  12. Beiträge anzeigen #12 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Das gibt's im ScriptBin:

    Code:
    func void rainThroughVobs(var int bool) {
        MemoryProtectionOverride(6169210, 4);
        if (!bool) {
            // bool == false -> Es regnet nicht mehr durch
            MEM_WriteByte(6169210, 224);
        } else {
            MEM_WriteByte(6169210, 226);
    	};
    };
    Einmal pro Session mit 'true' aufrufen.

  13. Beiträge anzeigen #13 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Danke dir. Ist die magic number für g1 und g2 gleich?


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

  14. Beiträge anzeigen #14 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Höchst unwahrscheinlich. Wenn du das für Gothic 1 brauchst, muss sich da jemand nochmal ransetzen und gucken ob er die selbe Stelle auch in der Gothic1 Exe findet.

  15. Beiträge anzeigen #15 Zitieren
    Provinzheld
    Registriert seit
    Mar 2010
    Ort
    Berlin
    Beiträge
    201
     
    withmorten ist offline
    6000804 für Gothic 1 in zCOutdoorRainFX::CreateParticles(). Denke mal gleiche Werte die man patchen will, zumindest der standard übergebene Wert ist gleich in G1 vs G2.

    @Lehona:

    War ganz einfach Einfach die gleiche Funktion in G1 in IDA gesucht und eben runtergescrolled.

  16. Beiträge anzeigen #16 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Danke für die schnelle entschlüsselung withmorten. Der code von umfi müsste aber ohne änderungen nutzbar sein. Ich erkenn auf den ersten blick jedenfalls keine magic number.


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

  17. Beiträge anzeigen #17 Zitieren
    Provinzheld
    Registriert seit
    Mar 2010
    Ort
    Berlin
    Beiträge
    201
     
    withmorten ist offline
    Doch, TraceRayNearestHit (übrigens die Funktion die aufgerufen wird bei der anderen Adresse in Gothic1/Gothic2, bzw die Adresse ist ein Parameter für die Funktion), muss eine andere Adresse sein.

    Einen Moment ... das ist 6243008 in Gothic 1, Hex 5F42C0.

  18. Beiträge anzeigen #18 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Der Einsatz der Funktion sorgt in G1 für einen sofortigen Access-Violation sobald es anfängt zu regnen. Reproduzierbar. Als Grund wird bloß der Versuch des Schreibens an die Adresse angegeben.

    In G2 funktioniert es dagegen Tadellos. Ich habe in die obige Funktion MEM_SwitchG1G2 eingebaut mit den entsprechenden Werten und bin daher sicher, dass ich die richtige Adresse übergeben habe.


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

  19. Beiträge anzeigen #19 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Hast du auch daran gedacht den Parameter bei MemoryProtectionOverride mit dem Switch zu versehen?

  20. Beiträge anzeigen #20 Zitieren
    Serima Avatar von Fisk2033
    Registriert seit
    Dec 2010
    Ort
    Dresden
    Beiträge
    5.803
     
    Fisk2033 ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Es gibt ja Npc_GetDistToNpc. Gibt es auch irgendwo eine allgemeinere Funktion?
    Ich platziere Vobs frei in der Welt und möchte so herausfinden ob z.b. das vob x unter dem vob y platziert wurde um es anders zu behandeln. Genau gesagt geht es um gras das unter schützenden Anhöhen / vobs schneller trocknet.
    Da es scheinbar noch nicht verlinkt wurde...
    Vob_GetDistToVob gibt es dank Sekti..

    Npc_GetDistToNpc: Distanz zwischen zwei Vobs.
    https://forum.worldofplayers.de/foru...1#post16955344

Seite 1 von 2 12 Letzte »

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