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 4 1234 Letzte »
Ergebnis 1 bis 20 von 67
  1. Beiträge anzeigen #1 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline

    [daedalus] Direkter Zugriff auf ZenGin-Objekte

    Dieses "Forschungs"-Projekt befindet sich erst in den Anfängen. Da ich in der nächsten Zeit mit anderen Dingen beschäftigt bin, veröffentliche ich bereits jetzt den ersten (grundsätzlich funktionierenden) aktuellen Stand. Vielleicht findet jemand die Informationen nützlich...

    Allerdings sollte die übliche Warnung nicht fehlen: Die Skriptklassen beschreiben den Speicherbereich genau einer Version von Gothic - sollte es sich um eine andere Version handeln, könnte der Speicher anders aussehen!
    (nun, man kann diverse Konsistenzprüfungen einbauen, um die Korrektheit der Klassendefinition zu testen)

    Gruß Nico
    Angehängte Dateien
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (03.03.2010 um 13:07 Uhr)

  2. #2 Zitieren
    Don Bilbo
    Gast
     
    Hmm hört sich ja ganz interessant an.

    Aber was kann man genau damit machen?

  3. Beiträge anzeigen #3 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Auf Eigenschaften zugreifen, auf die man normalerweise keinen Zugriff hat.
    Code:
    Npc.vob_bitfield = Npc.vob_bitfield | zCVob_bitfield0_drawBBox3D;
    Da Klassenreferenzen in Klassen nicht funktionieren (bzw. ich bisher keine Idee habe, wie man das in Daedalus anstellen könnte), ist das ganze relativ limitiert (man kann also nicht auf die referenzierten Objekte zugreifen).
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (03.03.2010 um 15:07 Uhr)

  4. Homepage besuchen Beiträge anzeigen #4 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Interessant! Ich sehe noch kein konkretes Feature, was sich damit implementieren ließe (ich habe aber auch nicht alles durchgesehen), aber wer weiß, wofür sich diese "Grundlagenforschung" noch alles nutzen lässt?
    Für Scripter könnte sich das als wahre Schatztruhe entpuppen.

    Gute Arbeit. Danke!
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts
    Geändert von Sektenspinner (12.07.2009 um 20:50 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Es gab mal einen Thread, in dem (sehr aufwändig) versucht wurde, Positionen und Entfernungen zu bestimmen. Das könnte damit etwas einfacher werden.

    edit: Nein, ich habe keinen Link. Und ich weiß aus dem Stegreif auch nicht, wonach ich suchen sollte.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (13.07.2009 um 08:48 Uhr)

  6. Homepage besuchen Beiträge anzeigen #6 Zitieren
    Ehrengarde Avatar von Syrill
    Registriert seit
    Nov 2007
    Ort
    Bayern
    Beiträge
    2.494
     
    Syrill ist offline
    Zitat Zitat von NicoDE Beitrag anzeigen
    Es gab mal einen Thread, in dem (sehr aufwändig) versucht wurde, Positionen und Entfernungen zu bestimmen. Das könnte damit etwas einfacher werden.
    hast du vielleicht den Link?
    A little hard work never killed anyone important.

    Syrill auf Facebook
    und auf Instagram
    uuuund Twitter!

  7. Beiträge anzeigen #7 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Auf Nachfrage per PN:

    percList[66] ist ein unsortiertes Array mit 33 Einträgen, welche aus einer var int percID (siehe PERC_Xxx in Constants.d) und einer var func percFunc (siehe B_AssessXxx.d) besteht. percActive enthält die Anzahl von genutzten Einträgen in percList (Achtung: die Einträge sind weder sortiert, noch fortlaufend).
    Aus den Skripten wird percList mit den Externals Npc_PercEnable und Npc_PercDisable bearbeitet.

    Hinweis: Die External Perc_SetRange ändert die Einträge in einer globalen Liste - sie gelten also für alle oCNpc.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor

  8. Beiträge anzeigen #8 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist offline
    Zitat Zitat von NicoDE Beitrag anzeigen
    edit: Nein, ich habe keinen Link. Und ich weiß aus dem Stegreif auch nicht, wonach ich suchen sollte.
    Ich konnte mich an einen solchen Thread erinnern, in dem es einen Lösungsvorschlag mit Dreiecken gab. Nach "dreieck" gesucht und
    http://forum.worldofplayers.de/forum...hlight=dreieck

    Edit: Das kann eigentlich nicht der Thread sein, den ich gemeint hatte, da ich zu dem Zeitpunkt hier nicht aktiv war.
    Ich hatte sowieso mehr daran gedacht, dass es in Verbindung mit einem Kompass war.
    http://forum.worldofplayers.de/forum...hlight=dreieck

  9. Beiträge anzeigen #9 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Für den Kompass könnte man den AtVector aus der Object-To-World-Transformation auslesen. Das Problem ist "nur", dass der Daedalus-Parser von Gothic keine float-Arrays mag. Man müsste es als int-Array deklarieren (muss man ohnehin, da man mit den Fließkommazahlen normalerweise in Daedalus nicht viel machen kann).
    Code:
    func void ShowHeroAtVector()
    {
      var zCVob Vob; Vob = Hlp_GetNpc( Hlp_GetInstanceId( hero ) );
      var int At0; At0 = Vob.trafoObjToWorld[2];   // 4 * 0 + 2
      var int At1; At1 = Vob.trafoObjToWorld[6];   // 4 * 1 + 2
      var int At2; At2 = Vob.trafoObjToWorld[10];  // 4 * 2 + 2
      var int Doc; Doc = Doc_Create();
      Doc_SetPages( Doc, 2 );
      Doc_SetPage( Doc, 0, "Book_Red_L.tga", 0 );
      Doc_SetPage( Doc, 1, "Book_Red_R.tga", 0 );
      Doc_SetMargins( Doc, 0, 275, 20, 30, 20, TRUE );
      Doc_SetMargins( Doc, 1, 30, 20, 275, 20, TRUE );
      Doc_SetFont( Doc, -1, "Font_15_Book.tga" );
      Doc_PrintLine( Doc, 0, "" );                   Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "Hero.GetAtVector()" ); Doc_PrintLine( Doc, 1, "" );
      Doc_SetFont( Doc, -1, "Font_10_Book.tga" );
      Doc_PrintLine( Doc, 0, "" );      Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "At[0]" ); Doc_PrintLine( Doc, 1, IntToString( At0 ) );
      Doc_PrintLine( Doc, 0, "" );      Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "At[1]" ); Doc_PrintLine( Doc, 1, IntToString( At1 ) );
      Doc_PrintLine( Doc, 0, "" );      Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "At[2]" ); Doc_PrintLine( Doc, 1, IntToString( At2 ) );
      Doc_Show( Doc );
    };
    
    instance HeroAtVector( C_Item )
    {
      Name        = "Hero’s AtVector";
      MainFlag    = ITEM_KAT_NONE;
      Visual      = "ItWr_Book_02_04.3ds";
      Material    = MAT_LEATHER;
      ScemeName   = "MAP";	
      Description = Name;
      On_State[0] = ShowHeroAtVector;
    };
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (13.07.2009 um 14:03 Uhr)

  10. Homepage besuchen Beiträge anzeigen #10 Zitieren
    General Avatar von Nodrog
    Registriert seit
    May 2005
    Ort
    Dresden
    Beiträge
    3.145
     
    Nodrog ist offline
    Was die Floating Arrays betrifft:
    Ist das "nur" eine Schwachstelle des Übersetztens in den Binärcode der Gothic.dat? Oder kommt die Engine allgemein nicht damit klar, auch wenn der Compiler es richtig übersetzt?
    Ich kann mir nicht vorstellen, dass nur der Parser als Komponente des Compilers damit Schwierigkeiten hat.

    Also mein unwissendes Wirrwar übersetzt: Würde es das Problem beheben, wenn ein es einen Compiler gäbe, der richtig übersetzt?
    In dem Fall würde dein anderer Thread mit der Auflistung von Tokens ja sehr helfen.

    Edit: Was außerdem interessant wäre: Hat man auch Zugriff auf Objekte, die an Bones geheftet sind? zB Helme, Waffen oder Bierkrüge?
    Und was noch interessant wäre, wäre Zugriff auf AniOverlays. Die Objektliste muss ja auch irgendwo am Npc vermerkt sein.
    Geändert von Nodrog (14.07.2009 um 13:36 Uhr)

  11. Beiträge anzeigen #11 Zitieren
    Ehrengarde Avatar von HolyWater
    Registriert seit
    Aug 2007
    Beiträge
    2.214
     
    HolyWater ist offline
    Zitat Zitat von NicoDE Beitrag anzeigen
    Für den Kompass könnte man den AtVector aus der Object-To-World-Transformation auslesen. Das Problem ist "nur", dass der Daedalus-Parser von Gothic keine float-Arrays mag. Man müsste es als int-Array deklarieren (muss man ohnehin, da man mit den Fließkommazahlen normalerweise in Daedalus nicht viel machen kann).
    Code:
    func void ShowHeroAtVector()
    {
      var zCVob Vob; Vob = Hlp_GetNpc( Hlp_GetInstanceId( hero ) );
      var int At0; At0 = Vob.trafoObjToWorld[2];   // 4 * 0 + 2
      var int At1; At1 = Vob.trafoObjToWorld[6];   // 4 * 1 + 2
      var int At2; At2 = Vob.trafoObjToWorld[10];  // 4 * 2 + 2
      var int Doc; Doc = Doc_Create();
      Doc_SetPages( Doc, 2 );
      Doc_SetPage( Doc, 0, "Book_Red_L.tga", 0 );
      Doc_SetPage( Doc, 1, "Book_Red_R.tga", 0 );
      Doc_SetMargins( Doc, 0, 275, 20, 30, 20, TRUE );
      Doc_SetMargins( Doc, 1, 30, 20, 275, 20, TRUE );
      Doc_SetFont( Doc, -1, "Font_15_Book.tga" );
      Doc_PrintLine( Doc, 0, "" );                   Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "Hero.GetAtVector()" ); Doc_PrintLine( Doc, 1, "" );
      Doc_SetFont( Doc, -1, "Font_10_Book.tga" );
      Doc_PrintLine( Doc, 0, "" );      Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "At[0]" ); Doc_PrintLine( Doc, 1, IntToString( At0 ) );
      Doc_PrintLine( Doc, 0, "" );      Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "At[1]" ); Doc_PrintLine( Doc, 1, IntToString( At1 ) );
      Doc_PrintLine( Doc, 0, "" );      Doc_PrintLine( Doc, 1, "" );
      Doc_PrintLine( Doc, 0, "At[2]" ); Doc_PrintLine( Doc, 1, IntToString( At2 ) );
      Doc_Show( Doc );
    };
    
    instance HeroAtVector( C_Item )
    {
      Name        = "Hero’s AtVector";
      MainFlag    = ITEM_KAT_NONE;
      Visual      = "ItWr_Book_02_04.3ds";
      Material    = MAT_LEATHER;
      ScemeName   = "MAP";	
      Description = Name;
      On_State[0] = ShowHeroAtVector;
    };
    ich hätte gedacht der vektor is vom typ zVEC3 und nich zMATRIX4?!
    ♥ HolyWater ♥ YAY xD

  12. Beiträge anzeigen #12 Zitieren
    Deus Avatar von Oparilames
    Registriert seit
    May 2004
    Ort
    ex contrariis
    Beiträge
    11.014
     
    Oparilames ist offline
    Zitat Zitat von NicoDE Beitrag anzeigen
    Für den Kompass könnte man den AtVector aus der Object-To-World-Transformation auslesen. Das Problem ist "nur", dass der Daedalus-Parser von Gothic keine float-Arrays mag. Man müsste es als int-Array deklarieren (muss man ohnehin, da man mit den Fließkommazahlen normalerweise in Daedalus nicht viel machen kann).
    Code:
    [...]
    Hallo NicoDE!
    Erstmal danke für dieses tolle Projekt.
    Leider muss ich gestehen, dass deine Kompassmethode nicht funktioniert.
    Was auch immer ich probiere: Fehler über Fehler. (Ziemlicht oft falscher Datentyp).

    Ich habe auch schon versucht Sektenspinners Float-Script zu verwenden, aber auch das hilft nicht.
    Hast du das Script auch bei dir ausprobiert gehabt?
    Außerdem ist mir schleierhaft, warum du beim Kompass zCVob und nicht oCNpc verwendet hast.

    Hier sind inetwa alle Versuche, die ich unternommen habe (zu großen Teilen auskommentiert.)
    Code:
    func void ShowHeroAtVector()
    {
      var oCNpc Npc; Npc = Hlp_GetNpc( Hlp_GetInstanceId( hero ) );
      var zCVob Vob; Vob = Hlp_GetNpc( Hlp_GetInstanceId( hero ) );
      var int MOD_pi; MOD_pi = 31415926535;//897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885867869956909257107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900994657640789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427741559918559252459539594310499725246808459872736446958486538367362226260991246080512438843904512441365497627807977156914359977001296160894416948685558484063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015033086169286809208747609178249385890097149096759852613655497818931297848216829989487226588048575640142704775551323796414515237462343645428584447952658678210511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196634287544406437451237181921799983910159195618146751426912397489409071864942319615679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396380952572010654858632788659361533818279682303019520353018529689957736225994;/*138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009567945208095146550225231603881930142093762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002132434088190710486331734649651453905796268561005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007230558763176359421873125147120532928191826186125867321579198414848829164470609575270695722091756711672291098169091528017350671274858322287183520935396572512108357915136988209144421006751033467110314126711136990865851639831501970165151168517143765761835155650884909989859982387345528331635507647918535893226185489632132933089857064204675259070915481416549859461637180270981994309924488957571282890592323326097299712084433573265489382391193259746366730583604142813883032038249037589852437441702913276561809377344403070746921120191302033038019762110110044929321516084244485963766983895228684783123552658213144957685726243344189303968642624341077322697802807318915441101044682325271620105265227211166039638095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900956794520809514655022523160388193014209376213785595663893778708303906979207734672218256259966150142150306803844773454920260541466592520149744285073251866600213243408819071048633173464965145390579626856100550810665879699816357473638405257145910289706414011097120628043903975951567715770042033786993600723055876317635942187312514712053292819182618612586732157919841484882916447060957527069572209175671167229109816909152801735067127485832228718352093539657251210835791513698820914442100675103346711031412671113699086585163983150197016515116851714376576183515565088490998985998238734552833163550764791853589322618548963213293308985706420467525907091548141654985946163718027098199430992448895757128289059232332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170291327656180937734440307074692112019130203303801976211011004492932151608424448596376698389522868478312355265821314495768572624334418930396864262434107732269780280731891544110104468232527162010526522721116603963809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590095679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009567945208095146550225231603881930142093762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002132434088190710486331734649651453905796268561005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007230558763176359421873125147120532928191826186125867321579198414848829164470609575270695722091756711672291098169091528017350671274858322287183520935396572512108357915136988209144421006751033467110314126711136990865851639831501970165151168517143765761835155650884909989859982387345528331635507647918535893226185489632132933089857064204675259070915481416549859461637180270981994309924488957571282890592323326097299712084433573265489382391193259746366730583604142813883032038249037589852437441702913276561809377344403070746921120191302033038019762110110044929321516084244485963766983895228684783123552658213144957685726243344189303968642624341077322697802807318915441101044682325271620105265227211166039638095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900956794520809514655022523160388193014209376213785595663893778708303906979207734672218256259966150142150306803844773454920260541466592520149744285073251866600213243408819071048633173464965145390579626856100550810665879699816357473638405257145910289706414011097120628043903975951567715770042033786993600723055876317635942187312514712053292819182618612586732157919841484882916447060957527069572209175671167229109816909152801735067127485832228718352093539657251210835791513698820914442100675103346711031412671113699086585163983150197016515116851714376576183515565088490998985998238734552833163550764791853589322618548963213293308985706420467525907091548141654985946163718027098199430992448895757128289059232332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170291327656180937734440307074692112019130203303801976211011004492932151608424448596376698389522868478312355265821314495768572624334418930396864262434107732269780280731891544110104468232527162010526522721116603963809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590095679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009567945208095146550225231603881930142093762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002132434088190710486331734649651453905796268561005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007230558763176359421873125147120532928191826186125867321579198414848829164470609575270695722091756711672291098169091528017350671274858322287183520935396572512108357915136988209144421006751033467110314126711136990865851639831501970165151168517143765761835155650884909989859982387345528331635507647918535893226185489632132933089857064204675259070915481416549859461637180270981994309924488957571282890592323326097299712084433573265489382391193259746366730583604142813883032038249037589852437441702913276561809377344403070746921120191302033038019762110110044929321516084244485963766983895228684783123552658213144957685726243344189303968642624341077322697802807318915441101044682325271620105265227211166039638095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900956794520809514655022523160388193014209376213785595663893778708303906979207734672218256259966150142150306803844773454920260541466592520149744285073251866600213243408819071048633173464965145390579626856100550810665879699816357473638405257145910289706414011097120628043903975951567715770042033786993600723055876317635942187312514712053292819182618612586732157919841484882916447060957527069572209175671167229109816909152801735067127485832228718352093539657251210835791513698820914442100675103346711031412671113699086585163983150197016515116851714376576183515565088490998985998238734552833163550764791853589322618548963213293308985706420467525907091548141654985946163718027098199430992448895757128289059232332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170291327656180937734440307074692112019130203303801976211011004492932151608424448596376698389522868478312355265821314495768572624334418930396864262434107732269780280731891544110104468232527162010526522721116603963809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590095679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009567945208095146550225231603881930142093762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002132434088190710486331734649651453905796268561005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007230558763176359421873125147120532928191826186125867321579198414848829164470609575270695722091756711672291098169091528017350671274858322287183520935396572512108357915136988209144421006751033467110314126711136990865851639831501970165151168517143765761835155650884909989859982387345528331635507647918535893226185489632132933089857064204675259070915481416549859461637180270981994309924488957571282890592323326097299712084433573265489382391193259746366730583604142813883032038249037589852437441702913276561809377344403070746921120191302033038019762110110044929321516084244485963766983895228684783123552658213144957685726243344189303968642624341077322697802807318915441101044682325271620105265227211166039638095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590093809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900536331942571882619016852091109444623049387276226013009665098018150216116189314991755448664845101939640892424535185862966853588072370252086290396375135442408416767961062540774535439718720220389829258815048817462632144019324591263846776453878214900321873605288401615814676934097243424966959679745512952152475413003838241759677554225154868903498467584610663159419881211797133452509275307014085614263503015271473708797902296635683001787990288084193893922491884489117670080380387588878016977011134533491153480210658508757002551736325688200975955274871225357182551697875315095569086898546483794843035187061492313573402963136527912761526230610431409239565352297493261018023574144940020107575292488958929324580351889348336232266211070472227951789643113533222151331112813026996570565423666607124273606758337678351910125109944370304629076346614964495599673032125852284006812886320601384391535239320911579060473413936297323492759180894233656526093948313364810290643586311830825965878597847150234490787476787995667424852051040103999757103940220630691734742020896991756005288898736759396629367401720982195418337128233932862477317196438625665314551269922236776677708198643496799841526045194640459016395789604927913929104349027568381726840470522981408906713149152625044175452710112357868012989368284933913963833660781422917945543449168097066491318845378120257962155232128839888294830960254154515830155645623132845031741857697997991078955656799608252916553758612233838070069219579639419837426117676769100507357501471041273917783596347944115924160740964918923864162314431509843379999957412386084556879065017966046590401190093106491459764550874416917093615978054671746589930170413753904682544419849306977396303361433004032263704413884245648531960009102403591486043419567188919858561565546577508901443177712861645686219001284594607421607429571045831400462012463901102101932368874623187463906390518460908247466122225868317169890636064025404893508750600193538323584777977777184156692711224004455167705419310730388369438797889046242175900466660910401636227006450671672563298135619169577585613333903982775996522509904038709327898622159549437997063064807096494177080058122705593309162118440046358937856324358641910615400682047879016214044578771739810295260717300099121797113754243334882266618671805934535003597940626101694558948798528738239461925927383005865786236901271929638265926393781959687776344919278138391527346851031712835011677541289696340176336880334761324250065479448355160024231256646080107867025860376099390800451756260090655554130984042735743005006687743313528206170729903389370532225467004205889640465239361428307918540416966678324070955958770942320094156109555343344349138543884086108248624289859619741256571704240067876712368593537227109156704060621943472602;*/
      var int bla;  bla = roundf(mkf(MOD_PI));
    /*  var float xyz; xyz = Vob.trafoObjToWorld[2];
      var float zyx; zyx = Npc._zCVob_trafoObjToWorld[2];*/
      
      //var int At0; At0 = roundf(mkf(Vob.trafoObjToWorld[2]));   // 4 * 0 + 2
      var int At00; At00 = roundf(mkf(Npc._zCVob_trafoObjToWorld[2]));   // 4 * 0 + 2
      /*
      var int At1; At1 = Npc.trafoObjToWorld[6];   // 4 * 1 + 2
      var int At2; At2 = Npc.trafoObjToWorld[10];  // 4 * 2 + 2
      */
    Was in aller Hergottsnamen mache ich denn da falsch?
    Die andere Funktion. die du uns geschrieben hast funktioniert einwandfrei und auch einige Versucher meinerseits funktionieren, nur bei Floats gibt es halt extreme Probleme.

    Welchen Umfang soll das Projekt denn eigentlich letztenendes haben? Alle Klassen von Gothic inklusve der Menüs? Oder "nur" Npcs Items und 1 oder 2 andere Vob-Klassen im Spacer.
    Dass das ganze viel Zeit in Anspruch nehmen wird, also länger dauert ist klar, das hast du ja bereits im Einleitungsbeitrag geschrieben.
    Oparilames nachdem er seinen Gesellenbrief erhalten hat:
    »Das war's mit dir, du Mistvieh!«

  13. Homepage besuchen Beiträge anzeigen #13 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Ohne mir das jetzt genau angeschaut zu haben:
    Da Daedalus keine floats unterstützt sollte trafoObjToWorld syntaktisch als Integer Array deklariert werden, obwohl semantisch floats enthalten sind.
    Nur so ist es möglich überhaupt Informationen aus ihnen herauszubekommen.

    Selbst kannst du dann zwar trotzdem erstmal nichts damit anfangen, aber meine float Implementierung kann das.

    Code:
    var int At00; At00 = roundf(mkf(Npc._zCVob_trafoObjToWorld[2]));
    Das ist so nicht sinnvoll, da Npc._zCVob_trafoObjToWorld[2] ein float ist, mein mkf aber dazu da ist, einen Integer in einen (semantischen) float zu verwandeln. Da kommt nur Datenmüll raus, wenn du einen float einsetzt.
    Stattdessen kannst du Npc._zCVob_trafoObjToWorld[2] direkt in meiner float Implementierung verwenden, falls Gothic das gleiche Floating-Point Format verwendet (was eigentlich garantiert der Fall ist).
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  14. Beiträge anzeigen #14 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Zitat Zitat von HolyWater Beitrag anzeigen
    ich hätte gedacht der vektor is vom typ zVEC3 und nich zMATRIX4?!
    oCNpc::GetAtVector liefert einen zVEC3, dessen Daten aus der zMAT4 extrahiert werden ([0][2], [1][2], [2][2]).

    Zitat Zitat von Oparilames Beitrag anzeigen
    Was in aller Hergottsnamen mache ich denn da falsch?
    Nichts.
    Ich hatte alle "float" in den Klassen bereits in "int" geändert. Deshalb funktioniert das letzte Skript nicht mit den oben angehängten Klassen.
    Da Daedalus das Lesen aus float-Arrays verweigerte, versuchte ich zwei Klassen zu definieren (float/int), um den Wert aus dem Array in einen anderen Wert der Klassen zu kopieren. Aber als ich dann feststellen durfte, dass ich float-Werte an Klassen nicht setzen darf... habe ich alles auf int umgestellt.

    zCVob oder oCNpc ist egal, da oCNpc von zCVob abgeleitet ist und letztere bereits eine V-Table hat. Ich verwende im Beispiel eine External, da der Lexer bei Externals, die ein Instanzobjekt zurückgeben, nicht den Klassentyp prüft.
    Möglicherweise bekommt man dadurch (Direktzugriff + Npc_GetEnemy) Zugriff auf die referenzierten Objekte - das wichtigste zu lösende Problem, da man dann die Listen durchlaufen kann...

    Falls jemand zu viel Zeit hat: FltToString (mit BCDs?) und SoftFloat nach Daedalus portieren :)

    ps: Klassen in Daedalus sind einfache Speicherbeschreibungen. "string" ist eine Ableitung von std::string (MSVC6) mit V-Table (sizeof(zSTRING) == 0x14).
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (15.07.2009 um 22:17 Uhr)

  15. Beiträge anzeigen #15 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline

    Post thread linking

    Zitat Zitat von NicoDE Beitrag anzeigen
    FltToString (mit BCDs?)
    Gibt es inzwischen hier.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor

  16. Beiträge anzeigen #16 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Ich habe die beiden Scripte im ersten Beitrag aktualisiert (wie vorher bereits angesprochen), weil man mit var float (jetzt var int) und var string name[n] (jetzt var string name; var string name_<1,n-1>) in Daedalus nicht vernünftig arbeiten kann.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor

  17. Beiträge anzeigen #17 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Auf Anfrage, Nachtrag zu trafoObjToWorld:
    Code:
       +   |       0       |      1     |      2      |       3       |
    -------+---------------+------------+-------------+---------------+
     0 * 4 | RightVector X | UpVector X | OutVector X | Translation X |
    -------+---------------+------------+-------------+---------------+
     1 * 4 | RightVector Y | UpVector Y | OutVector Y | Translation Y |
    -------+---------------+------------+-------------+---------------+
     2 * 4 | RightVector Z | UpVector Z | OutVector Z | Translation Z |
    -------+---------------+------------+-------------+---------------+
     3 * 4 |               |            |             |               |
    -------+---------------+------------+-------------+---------------+
    OutVector (AtVector) ist die "Blickrichtung" und Translation ist die "Position".

    Rotation matrix (or direction cosine matrix, DCM)
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (25.01.2010 um 13:28 Uhr)

  18. Homepage besuchen Beiträge anzeigen #18 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline

    Speicher beliebig auslesen

    Es ist möglich eine beliebige Stelle im Speicher zu lesen.

    Die Kurzfassung:
    Code:
    func int MemReadInt (var int address) {
    	/* other = address - MEM_NpcID_Offset */
    	MEM_Helper.enemy = address - MEM_NpcID_Offset;
    	Npc_GetTarget (MEM_Helper);
    	
    	/* res = *(other + oCNpc_idx_offset) */
    	return other.id;
    };
    Die Langfassung:
    Code:
    //######################################################
    //
    //	Elementare Read-Write Operationen
    //
    //######################################################
    
    var oCNpc MEM_Helper;
    var C_NPC MEM_oldOth; //other hier zwischenspeichern
    const int MEM_NpcID_Offset = 288; //0x120
    const int MEM_NpcName_Offset = 292; //0x124
    
    func void MemReadOpen() {
    	MEM_Helper = Hlp_GetNpc (MEM_HELPER_INST);
    	
    	if (!Hlp_IsValidNpc (MEM_Helper)) {
    		//self zwischenspeichern
    		MEM_oldOth = Hlp_GetNpc (self);
    		Wld_InsertNpc (MEM_HELPER_INST, MEM_FARFARAWAY);
    		MEM_Helper = Hlp_GetNpc (self);
    		self = Hlp_GetNpc (MEM_oldOth);
    	};
    	
    	MEM_oldOth = Hlp_GetNpc (other);
    };
    
    func int MemReadInt (var int address) {
    	/* other = address - MEM_NpcID_Offset */
    	MEM_Helper.enemy = address - MEM_NpcID_Offset;
    	Npc_GetTarget (MEM_Helper);
    	
    	/* res = *(other + oCNpc_idx_offset) */
    	return other.id;
    };
    
    func string MemReadString (var int address) {
    	/* other = address - MEM_NpcID_Offset */
    	MEM_Helper.enemy = address - MEM_NpcName_Offset;
    	Npc_GetTarget (MEM_Helper);
    	
    	/* res = *(other + oCNpc_idx_offset) */
    	return other.name;
    };
    
    func void MemWriteInt (var int address, var int val) {
    	/* other = address - MEM_NpcID_Offset */
    	MEM_Helper.enemy = address - MEM_NpcID_Offset;
    	Npc_GetTarget (MEM_Helper);
    	
    	/* *(other + oCNpc_idx_offset) = val */
    	other.id = val;
    };
    
    func void MemWriteString (var int address, var string val) {
    	/* other = address - MEM_NpcID_Offset */
    	MEM_Helper.enemy = address - MEM_NpcName_Offset;
    	Npc_GetTarget (MEM_Helper);
    	
    	/* *(other + oCNpc_idx_offset) = val */
    	other.name = val;
    };
    
    func void MemReadClose() {
    	/* Alte Werte wiederherstellen, sonst Absturz! */
    	MEM_Helper.enemy = 0;
    	other = Hlp_GetNpc (MEM_oldOth);
    };
    
    //######################################################
    //
    //	Einzelzugriffe, mit ReadOpen geöffnet und ReadClose beendet.
    //
    //######################################################
    
    func int GetIntAt (var int address) {
    	var int res;
    	MemReadOpen();
    	res = MemReadInt (address);
    	MemReadClose();
    	return res;
    };
    
    func void SetIntAt (var int address, var int val) {
    	MemReadOpen();
    	MemWriteInt (address, val);
    	MemReadClose();
    };
    
    func string GetStringAt (var int address) {
    	var string res;
    	MemReadOpen();
    	res = MemReadString (address);
    	MemReadClose();
    	return res;
    };
    
    func void SetStringAt (var int address, var string val) {
    	MemReadOpen();
    	MemWriteString (address, val);
    	MemReadClose();
    };
    Ich werde jetzt erstmal Klausur schreiben gehen, und dann im Laufe der Woche das etwas aufarbeiten und ein paar Adressen raussuchen.

    Im Prinzip kann man jetzt ALLES lesen und schreiben. In Xardas Worten:
    Zitat Zitat von Xardas
    Ich beginne gerade erst zu begreifen, welche Möglichkeiten sich mir eröffnen!
    Vermutlich kommt man an den Objektbaum von Gothic heran und kann mit beliebigen Vobs beliebiges machen. Vermutlich kriegt man zum Beispiel hin (total aus der Luft gegriffene Beispiele):
    • Truheninhalte bearbeiten und Truhen auf und abschließen
    • Menü <-> Content Kommunikation
    • pfxe zur Laufzeit bearbeiten
    • Vobs sichtbar und unsichtbar machen
    • uvm


    Was super wäre, was ich aber nicht weiß, ob man es hinkriegt:
    • Beliebige Engine Funktionen aufrufen
    • Schnelle Dynamische Arrays, die beim Weltenwechsel erhalten bleiben.
    • Schnelle Schleifen durch Manipulation des Parser Stacks
    • Neue Objekte erzeugten und Objekte entfernen.
    • Erhöhung der Alpha-Vob Zahl


    Weitere Ideen und Lösungsvorschläge oder gar gleich der Code für ein Feature sind sehr willkommen.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts
    Geändert von Sektenspinner (01.03.2010 um 11:52 Uhr)

  19. Beiträge anzeigen #19 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Neuer/geänderter ausführbarer Code wird schwierig, da man durch die Datenausführungsverhinderung (Data Execution Prevention, DEP) standardmäßig keinen Schreibzugriff auf die ausführbaren Speicherbereiche hat. Das kann man zwar mit VirtualProtect anpassen - aber dann besteht immer noch das Problem, diese native Funktion aus den Skripten aufzurufen.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor

  20. Homepage besuchen Beiträge anzeigen #20 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Zum Ausführen von Funktionen: Ohne mir alles ganz genau angeschaut zu haben:
    Für mich sieht das aus, als könnte man zPAR_TOK_CALLEXTERN sowie einen manipulierten Symbolindex auf den Stack schieben und dann DoStack den Rest erledigen lassen.

    Ist die Frage, wie bindend der Typ "Funktion mit boolschem Rückgabewert und ohne Parameter" ist, der beim Cast gefordert ist. Ob man es auch hinbekommt Enginefunktionen ohne Rückgabewert oder mit Parametern aufzurufen?

    Scriptintern hin und her springen sollte auch gehen. "Einfach" eine zum Aufrufen bestimmte Funktion als INSTANCE deklarieren und dann zPAR_TOK_CALL und die StackPosition der Instanz auf den Stack schieben.

    Wie "auf den Stack schieben" geht, wenn man gerade auf dem Stack arbeitet muss ich mir noch überlegen.
    Vielleicht kann man auch eine lange sinnlose Funktion deklarieren und diese gemütlich von außen überschreiben und dann ganz normal aufrufen.

    Edit: Irgendwie hab ich das Gefühl, der Code Stack ist gar kein Stack. Von daher ist der als letztes genannte Ansatz wohl der einzig mögliche.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts
    Geändert von Sektenspinner (01.03.2010 um 13:43 Uhr)

Seite 1 von 4 1234 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