Ikarus (Pakiet skryptów) 413543 1020

O temacie

Autor orcwarrior

Zaczęty 11.06.2010 roku

Wyświetleń 413543

Odpowiedzi 1020

Shothic

Shothic

Użytkownicy
posty38
Propsy17
  • Użytkownicy
Ale w tamtych przypadkach nie używasz funkcji z silnika tak jak SetFontColor np
Nie jestem pewien czy to przez to masz ten błąd bo ja jego nie mam i nie mam jak tego
dobrze sprawdzić
 

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy

Lehona

Ikarus (Pakiet skryptów)
#181 2011-06-30, 22:23(Ostatnia zmiana: 2011-07-01, 00:39)
Since RGBA is just messing around with numbers it will work on G1 and G2. You might have to define the constants, but I doubt that because there is a ported version of Ikarus for G1 which should include these constants. Just the Address for the Hook is the wrong one.
You should really try to understand what the hooks are doing before you use them because you seem pretty... uninformed, not to say you suck at programming (okay, that's actually not true, but you have a lot to learn and understand instead of just using things I or others show).

I don't see why Avallach is getting insulted at all, he comes up with a more decent knowledge of programing than you do, that's at least my perception...


I nearly never test my scripts I post if someone has a problem (at least if I don't say so) because I want them to understand so they can do it by themselves (The script is more like a hint than a solution). Of course I post working scripts if I have them on my HDD or somewhere in the forums but otherwise I'm mostly doing them from scratch in the browser since it's easy stuff most of the time.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Jak eto powiedział ja się opieprzam (nie wiem ile w tym prawdy) ale bracia z zachodu nie gdyż stworzyli nowy pakiet skryptów o nazwie LEGO pozwala on na np. trilog (czy jak to się zwie czyli rozmowę trzech osób) i inne bajery.
http://forum.worldofplayers.de/forum/showthread.php?t=1023720
 

Khorne

Khorne

Użytkownicy
posty40
Propsy53
  • Użytkownicy
Ludzie może to głupie pytanie jest, ale czy ma ktoś ikarusa do g2 w wersji polskiej? albo chociaż angielskiej bo mam po niemiecku ale wuj rozumiem z tych podpowiedzi co tam są.. ;p

LeGo jest o obydwu wersji gothica?
 

Księga Czarodzieja Instalka



Spoiler


"Poglądy są jak dupa. Każdy ma jakieś, ale po co od razu pokazywać?"



"Pesymista widzi ciemny tunel. Optymista widzi światełko w tunelu. Realista widzi światło pociągu. A maszynista widzi trzech debili na torach."



"Nie wytrzymałem napięcia - i w końcu wyjąłem palce z kontaktu..." :)



"Bo kto to będzie skryptował jak nie ja? Więc jak ma to być dla mnie niespodzianka?

Zawiążesz mi oczy przy skryptowaniu? "





kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!
LeGo na pewno jest do GII ... czy do GI nie wiem. A Ikarusa nawet tłumaczyć nie musisz... w końcu patrzysz na skrypty a nie dopiski :wink:
 

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
LeGo was designed for and created in G2. You might be able to port it to G1 but not without some serious work.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!

kaczka
RaveN Studio

Ikarus (Pakiet skryptów)
#187 2011-07-18, 10:25(Ostatnia zmiana: 2011-07-18, 10:30)
...just as orcwarrior done with Ikarus. A lot of  hard work ahead of you... Good Luck :ok:
 

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
Well, I'm not going to port it. I'm busy with scripting some kind of memory management for persistent memory and stuff.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

gothic1210
  • Gość
Witam. Też zacząłem troszkę się tym bawić. Na początek chciałbym sobie uaktywnić te skrypty z WOG-a. Zainstalowałem Ikarusa. Sparsowałem i jest ok. Nie wywala błędów. Skopiowałem skrypt:
func void I_TurnOffWarnMessages()
{
                //Adding this function only to release verios is a good idea
                //Even if you don't see warning game still be runing on low
                //framerates when there is to many alpha polys etc.
                //Platform: Gothic 1 1.08k mod
                //Function should be runned at least every time game was inited
                //f.e: Add it to your Init_AllWorlds function

                //alphablendpoly: Too many alphapolys          
                MEM_WriteInt(9608588,1);
                //zCPoligon:ClipToPlane Too many cliped verts!
                MEM_WriteInt(9127248,1);        
                //???: Too many alpha world polys!
                MEM_WriteInt(9234732,1);        
               
};
i chodzi. Teraz chciałbym odpalić skrypt z kolorkami podpisów NPC. I nie za bardzo wiem jak to zrobić.
Mianowicie gdzie wkleić to:
/****************************************************\
 * ENGINEHOOKS                                      *
 * Dieses kleine Paket erlaubt Daedalusfunktionen   *
 * an Enginefunktionen zu hängen und somit Zugriff  *
 * auf bestimmte Vorgänge außerhalb der Scripte zu  *
 * bekommen.                                        *
 * Beispiel: Man könnte einen Hook an die Speicher- *
 * funktion der Engine setzen und damit strings die *
 * regulär nicht gespeichert werden noch schnell in *
 * bspw. den Namen eines zCVob legen um sie zu be-  *
 * halten.                                          *
\****************************************************/

//-------------------
// OPCODES
//-------------------
/* 1 Byte */
const int ASMINT_OP_pusha       = 96;    //0x60
const int ASMINT_OP_popa        = 97;    //0x61
const int ASMINT_OP_movMemToEAX = 161;     //0xA1
/* 2 Byte */
const int ASMINT_OP_movECXtoEAX = 49547; //0xC18B
const int ASMINT_OP_movESPtoEAX = 50315; //0xC48B
const int ASMINT_OP_movEAXtoECX = 49545; //0xC189
const int ASMINT_OP_movEBXtoEAX = 55433; //0xD889
const int ASMINT_OP_movEBPtoEAX = 50571; //0xC58B

//-------------------
// KONSTANTEN
//-------------------
const int parser            = 11223232; //0xAB40C0 zCParser
const int zParser__CallFunc = 7940592;  //0x7929F0 CallFunc(int,int)

//-------------------
// RÜCKGABEVARIABLEN
//-------------------
var int EAX;
func int GetEAX() { return EAX; };
func int EAXAdr() {
    GetEAX();
    MEMINT_StackPopInst();
    MEMINT_StackPushInst(zPAR_TOK_PUSHINT);
};
var int ECX;
func int GetECX() { return ECX; };
func int ECXAdr() {
    GetECX();
    MEMINT_StackPopInst();
    MEMINT_StackPushInst(zPAR_TOK_PUSHINT);
};
var int ESP;
func int GetESP() { return ESP; };
func int ESPAdr() {
    GetESP();
    MEMINT_StackPopInst();
    MEMINT_StackPushInst(zPAR_TOK_PUSHINT);
};

var int EBX;
func int GetEBX() { return EBX; };
func int EBXAdr() {
    GetEBX();
    MEMINT_StackPopInst();
    MEMINT_StackPushInst(zPAR_TOK_PUSHINT);
};    

var int EBP;
func int GetEBP() { return EBP; };
func int EBPAdr() {
    GetEBP();
    MEMINT_StackPopInst();
    MEMINT_StackPushInst(zPAR_TOK_PUSHINT);
};    


/*============================*
/* HOOKENGINE                 *
/*============================*
 - address:       Addresse einer Enginefunktion an die die Funktion angehängt werden soll.
 - oldInstr:      Die Länge in Bytes der Anweisung die an 'address' zu finden ist, mindestens 5 Bytes (Notfalls nächste Zeile noch mitnehmen).
                Kann zB. in IDA nachgesehen werden.
 - function:       Die Daedalusfunktion die aufgerufen werden soll.
*/
func void HookEngine(var int address, var int oldInstr, var string function) {
    var int SymbID;   // Symbolindex von 'function'
    var int ptr;      // Pointer auf den Zwischenspeicher der alten Anweisung
    var int relAdr;   // Relative Addresse zum neuen Assemblercode, ausgehend von 'address'

    // ----- Sicherheitsabfragen -----
    if(oldInstr < 5) {
        PrintDebug("HOOKENGINE: oldInstr ist zu kurz. Es werden mindestens 5 Bytes erwartet.");
        return;
    };

    SymbID = MEM_FindParserSymbol(function);
    if(!SymbID) {
        PrintDebug("HOOKENGINE: Die gegebene Daedalusfunktion kann nicht gefunden werden.");
        return;
    };

    MemoryProtectionOverride (address, oldInstr+3);
    // ----- Eventuell geschützen Speicher behandeln -----

    // ----- Die alte Anweisung sichern -----
    ptr = MEM_Alloc(oldInstr);
    MEM_CopyBytes(address, ptr, oldInstr);

    // ----- Einen neuen Stream für den Assemblercode anlegen -----
    ASM_Open(100 + oldInstr);

    // ----- Jump aus der Enginefunktion in den neuen Code einfügen -----
    relAdr = ASMINT_CurrRun-address-5;
    MEM_WriteInt(address + 0, 233);
    MEM_WriteInt(address + 1, relAdr);

    // ----- Neuen Assemblercode verfassen -----
 
    // Alle Register sichern
   
    // EAX in Daedalus Variable sichern
    ASM_2(ASMINT_OP_movEAXToMem);
    ASM_4(EAXAdr());
    ASM_1(ASMINT_OP_pusha);

    // ECX in Daedalus Variable sichern
    ASM_2(ASMINT_OP_movECXtoEAX);
    ASM_2(ASMINT_OP_movEAXToMem);
    ASM_4(ECXAdr());

    // ESP in Daedalus Variable sichern
    ASM_2(ASMINT_OP_movESPtoEAX);
    ASM_2(ASMINT_OP_movEAXToMem);
    ASM_4(ESPAdr());
   
    // EBX in Daedalus Variable sichern
    ASM_2(ASMINT_OP_movEBXtoEAX);
    ASM_2(ASMINT_OP_movEAXtoMem);
    ASM_4(EBXAdr());

    // EBP in Daedalus Variable sichern
    ASM_2(ASMINT_OP_movEBPtoEAX);
    ASM_2(ASMINT_OP_movEAXtoMem);
    ASM_4(EBPAdr());

    // --- Daedalusfunktion aufrufen ---

    ASM_1(ASMINT_OP_pushIm);
    ASM_4(SymbID);

    ASM_1(ASMINT_OP_pushIm);
    ASM_4(parser);

    ASM_1(ASMINT_OP_call);
    ASM_4(zParser__CallFunc-ASM_Here()-4);

    ASM_2(ASMINT_OP_addImToESP);
    ASM_1(8);

    ASM_1(ASMINT_OP_popa);
   
    ASM_1(ASMINT_OP_movMemToEAX);
    ASM_4(ECXAdr());
    ASM_2(ASMINT_OP_movEAXtoECX);
   
    ASM_1(ASMINT_OP_movMemToEAX);
    ASM_4(EAXAdr());

    // Alte Anweisung wieder einfügen
    MEM_CopyBytes(ptr, ASMINT_Cursor, oldInstr);
    MEM_Free(ptr);

    ASMINT_Cursor += oldInstr;

    // Zur Enginefunktion zurückkehren
    ASM_1(ASMINT_OP_pushIm);
    ASM_4(address + oldInstr);
    ASM_1(ASMINT_OP_retn);
    ASM_Close();
};
i to
Spoiler
//========================================
// Farbhandling
//========================================
/* r      : Roter Farbanteil (0..255)
 * g      : Grüner Farbanteil (0..255)
 * b      : Blauer Farbanteil (0..255)
 * a      : Alpha (0 = unsichtbar, 0..255)
 * return : Fertiger zColor */
func int RGBA(var int r, var int g, var int b, var int a) {
    return ((r&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_RED)
          |((g&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_GREEN)
          |((b&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_BLUE)
          |((a&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_ALPHA);
};
i jeszcze to :
Spoiler
const int oCGame__UpdateStatus_X = 7093113; //0x6C3B79
    HookEngine(oCGame__UpdateStatus_X,           8, "EVT_UPDATESTATUS_FOCUSNAME");
A i z tego co zrozumiałem to orcwarrior tam wprowadził jakieś poprawki. Mógłby ktoś powiedzieć o co dokładnie chodzi. tam chyba trzeba coś dopisać do skryptów Ikarusa.
 

gothic1210
  • Gość

gothic1210
Gość

Ikarus (Pakiet skryptów)
#190 2011-08-03, 18:59(Ostatnia zmiana: 2011-08-03, 19:13)
dziwi mnie ten błąd w HookEngine.d

Dodawałem w Gothic.src pod Ikarus.d.
EDIT: Naprawiłem :D  ale wyskakuje drugi, tego spróbuje sam :D
EDIT2: Nie, nie idzie. Wywala

Czyżbym coś źle parsował.
Spoiler
_INTERN\INTERN.SRC
_INTERN\MAGIC_INTERN.D

_INTERN\Floats32.D
_INTERN\IntToHex.D
_INTERN\ENGINECLASSES\*.D
_INTERN\SET.D
_INTERN\Ikarus_Const_G1.d
_INTERN\IKARUS.D
_INTERN\IKARUS_HLP_FUNCS.D
_INTERN\HOOKENGINE.D
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel

Sawik
Moderator działu

Ikarus (Pakiet skryptów)
#191 2011-08-03, 19:20(Ostatnia zmiana: 2011-08-03, 19:20)
Redefined identifer znaczy że już taki identifikator był więc coś ci się powtarza.

Edit: Nawet wiesz co i gdzie :D
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

gothic1210
  • Gość

gothic1210
Gość

Ikarus (Pakiet skryptów)
#192 2011-08-03, 19:57(Ostatnia zmiana: 2011-08-03, 20:49)
Powtarza się w
 F:\Piranha Bytes\Gothic\_Work\Data\Scripts\Content\_Intern\EngineClasses\Misc.d (1 hits)
i w
F:\Piranha Bytes\Gothic\_Work\Data\Scripts\Content\_Intern\Ikarus_Const_G1.d (1 hits)

usunę z tego drugiego :D
100k errorów później :D
przechodzimy do nast. skryptu :D  ... a to już jutro
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
odnosnie ikarusa i wyśiwetlania nazw postaci w róznych kolorach (czyli chodzi chyba o sent font color)- mam pomysł może dobry tylko w teorii.

czy można zrobić, aby wyświetlać nazwy postaci w rónych kolorach, nie korzystając z ikarusa, a zmieniać same  czcionki?

być może jest to szybsze i skuteczniejsze rozwiązanie.. (różnorodność kolorów, wielkości liter etc.)
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie. Do "decali" ma się dostęp tylko z poziomu silnika, nieważne czy chodzi tylko o zmianę odcienia czy źródłowej bitmapy. Skryptami można jedynie modyfikować zachowania AI, przedmioty, postaci, dialogi, questy, zaklęcia ofensywne oraz okna dialogowe. Nie masz dostępu do interface'u i innych rzeczy które są po prostu zaprogramowane w engine.

kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!
Udostępnili już LeGo2

Temat WoG
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Tak kaczka wiemy :P Ci których pakiet interesuje albo sami sprawdzają albo im edek mówi ;d  (Napisz do mnie w tej sprawie mam dobre wieści)
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Dzięki tej wersji zrobienie nowego paska zajmuje yy 1 minute jak nie mniej :D .
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Demonem wydajności to te skrypty pisane w Ikarusie nie są, wstawki asemblera z narzutem wywołania funkcji parsera, a sam fakt że to wszystko jest wykonalne jest zawdzięczany jakiemuś hakowi na pointer w Hlp_GetNpc... Nie lepiej użyć natywnych rzeczy, choćby g2ext, albo własnej przystosowanej do potrzeb biblioteki? (sam w oparciu o tego PDFa, który leży w dziale "Skrypty" coś takiego piszę :P)
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Dzięki tej wersji zrobienie nowego paska zajmuje yy 1 minute jak nie mniej :D .
Dokładnie jest prototyp wystarczy pisać ile się chce :D  (teraz wszystkie nooby lecą na WoG) i moje 1000 linijek na marne  :[  :[  :pokerface:
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry