Ikarus (Pakiet skryptów) 413495 1020

O temacie

Autor orcwarrior

Zaczęty 11.06.2010 roku

Wyświetleń 413495

Odpowiedzi 1020

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Nie lepiej by było dzielić tekst na dwie linie, jeśli jest on za długi?
Przykład:

if (textLengh) > 15
{
   szukasz pierwszej spacji, która występuje po linii 15
   dzielisz text
   dodajesz do lini
}
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Ależ owszem :F przecież po else jest opcja drugiego dzielenia gdy tekst jest za długi. Jednak przyda się też to \n ponieważ ciężko będzie dostosować ilość liter gdzie ten print ma zastąpić prawie wszystkie poprzednie :/
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Jak podasz cały ten skrypt dzielenia to będzie łatwiej.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
A no ucięło mi stałe i zmienne :I
//IKARUS
func int STR_Search (var string str, var string pattern) {
    var zString zStr; var zString patt;
    var int patt1stChar;
    var int i; var int j;
    MEM_AssignInst (zStr, STRINT_GetStringAddress(str));
    MEM_AssignInst (patt, STRINT_GetStringAddress(pattern));
   
    if (zStr.len < 1) || (patt.len > zStr.len) {
        MEM_Warn ("STR_Search: Reading out of bounds! returning -1.");
        return -1;
    };
   
    patt1stChar = MEM_ReadInt (patt.ptr) & 255;
    i = 0;
   
    var int loopStart; loopStart = MEM_StackPos.position;
   
    if(MEM_ReadInt(zStr.ptr+i)&255 == patt1stChar)
    {
    var int subLoopStart;
    j = 1;
    subLoopStart = MEM_StackPos.position;
    if(MEM_ReadInt(zStr.ptr+i+j)&255 == MEM_ReadInt(patt.ptr+j)&255)
{
if(j==patt.len)
{
return i;//returns the begging pos of searched pattern in string
};
j+=1;
MEM_StackPos.position=subLoopStart;
};   
}
    else if(i<zStr.len-patt.len)//1st char don't match, but there is more characters to check...
    {
  i+=1;
  MEM_StackPos.position = loopStart;
    };
   
    return -1;//pattern not found
};
//UI_MsgBox_Func
func void UIMsg_FormatAndPrintText(var string text,var int color)
{
/*Zmienne i Stałe  */
const int xStartOfWindow = 5;
var int yStartOf1Line; yStartOf1Line = 1584 - CalcPixelPosY(8)/2;
var int yStartOf2Line; yStartOf2Line = 3850 - CalcPixelPosY(8)/2;
var int yStartOfOneLine; yStartOfOneLine = 2800 - CalcPixelPosY(8)/2;//4096 = 100%
const int maxCharsInline =20;
var int secondLine; var int splitPos;
var string Line1;var string Line2;
var int label;
secondLine = false;
Line1 = ""; Line2 = "";
/*Zmienne i Stałe   */

var string test;//zmienna .-.
test = ConcatStrings(text,"");//odniesienie do tekstu, trza zrobić aby podpinało się pod hndl
var int newLineCharPos; newLineCharPos = STR_Search(text,"\n");//Wyszukiwanie \n czyli dzielenia na pół,
//wszystkie text zamienić trzeba na podpinanie hndl, lub do klasy

if(newLineCharPos!=-1)//sprawdza czy jest /n
{
secondLine = true;//aktywuje drugą linie
splitPos = newLineCharPos;//podmienia inta na chars
Line1 = STR_SubStr (text,0,splitPos);//dzieli tekst
Line2 = STR_SubStr (text,splitPos+2,Str_Len(text)); //także tylko że z pominieciem "\n"
}
else if(Str_Len(text)>=maxCharsInline)//jezeli jest więcej niż x znaków
{
//split string
secondLine = true;//tak samo aktywuje drugą linie
//find first space at left
splitPos = maxCharsInline; //sprawdza inta z 20, maxCharsInline=20
//loop
MEM_InitLabels ();
label = MEM_StackPos.position;
if(Hlp_StrCmp(STR_SubStr(text,splitPos,1)," "))
{
}
else if(splitPos>0)//jeżeli charsów jest >0, zawraca tu
{
splitPos-=1;//zżera o -1
MEM_StackPos.position = label;
};
//end loop
if(splitPos==0)//if no space fouded, divide at last char
{
splitPos=maxCharsInline;//porównuje int'a
};    
Line1 = STR_SubStr (text,0,splitPos);//dzieli tekst
Line2 = STR_SubStr (text,splitPos+1,Str_Len(text));//dzieli tekst
};

//One Line:
if(!secondLine)
{
Print_Ext(415,yStartOfOneLine,text,PF_Font,Color,-1);// do poprawki
}
else//Zamiast create text, add line?
{
Print_Ext(415,yStartOf1Line,Line1,PF_Font,Color,-1);
Print_Ext(415,yStartOf1Line+170/*PF_Font height*/,Line2,PF_Font,Color,-1);
Print(IntToString(splitPos));
};
};
To chyba starczy.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
A czy aby na pewno nie powinieneś użyć STR_SplitCount() zamiast Search?
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Jak użyłem STR_SplitCount to wywaliło error a potem normalnie pojawił się tekst, tylko że uyebało 3 pierwsze litery.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Z funkcją z G1 nic nie zdziałasz. Nie działa ona w G2. Sprawdź jaki error Ci daje, po czym sprawdź co masz źle i to napraw...
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota

Siemekk
Złote Wrota

Ikarus (Pakiet skryptów)
#507 2016-06-11, 22:01(Ostatnia zmiana: 2016-06-15, 19:21)
Problem rozwiązany :F wpadłem na pomysł aby w princie podawać dodatkowy parametr (chars) i wszystko działa.
Tutaj daje świetną wg. mnie funkcję. Liczy ona współrzędne tak aby zapisywały się zawsze w taki sam sposób na różnych rozdzielczościach!
// Orginalną funkcję napisał OrcWarrior
func int GetScreenSizeX() { Print_GetScreenSize(); return Print_Screen[PS_X]; };
func int GetScreenSizeY() { Print_GetScreenSize(); return Print_Screen[PS_Y]; };
func int CalcPixelPosX(var int x)//mnozenie 8* nasz x
{
var int pos; pos = fracf(8196,GetScreenSizeX());
pos = mulf(pos,mkf(x));
return truncf(pos);
};
func int CalcPixelPosY(var int y)//mnozenie 11* nasz Y
{
var int pos; pos = fracf(8196,GetScreenSizeY()); pos = mulf(pos,mkf(y));
return truncf(pos);
};
Zapewne jest inny sposób, ale dla mnie ta funkcja jest prosta i nie muszę zbytnio myśleć :D Efekt bym pokazał, ale nie mam już starej wersji :P
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy

Lehona

Ikarus (Pakiet skryptów)
#508 2016-06-20, 14:57(Ostatnia zmiana: 2016-06-20, 15:05)
Hey, why don't you simply use Print_ToVirtual()? It should do exacty the same, i.e. instead "CalcPixelPosX(x)" you simply call "Print_ToVirtual(x, PS_X);".

Also virtual pixels range from 0-8192 (8192 = 2^13), not 8196 ;)

Edit: I also just saw some people noticing the new buffs package - good job, you dirty stalkers :D It's working fine so far (and can already be viewed on the SVN), but I'm not yet ready to release it, because there are currently some limitations to it, e.g. the buff is not removed at the correct time, if the duration is not a proper multiple of the time per tick (instead it's removed at the last valid tick). If there's enough interest I'm sure I can spend some more time on it soon :)
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Leona swojego czasu udostępnił na WoG skrypt zmiany oryginalnej muzyki w grze. Nie jest to całkowita zmiana muzyki, tylko zmiana muzyki z oryginalnej na muzykę walki itp.

const int MUSIC_ORIGINAL = -1;
const int MUSIC_NORMAL = 0;
const int MUSIC_THREAT = 1;
const int MUSIC_FIGHT = 2;

func void SetMusicType(var int type) {
    if (type < MUSIC_ORIGINAL || type > MUSIC_FIGHT) {
        MEM_Error(ConcatStrings("SetMusicType: Invalid Music Type: ", IntToString(type)));
return;
};

    MemoryProtectionOverride(7089424, 6);
    if (type == MUSIC_ORIGINAL) {
MEM_WriteByte(7089424, 161);
MEM_WriteByte(7089425, 132);
MEM_WriteByte(7089426, 38);
MEM_WriteByte(7089427, 171);
MEM_WriteByte(7089428, 0);
MEM_WriteByte(7089429, 86);
    } else {
MEM_WriteByte(7089424, 184);
MEM_WriteByte(7089425, type);
MEM_WriteByte(7089426, 0);
MEM_WriteByte(7089427, 0);
MEM_WriteByte(7089428, 0);
MEM_WriteByte(7089429, 195);
    };
};
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Ostatnio gdy testowałem pogodę natknąłem się na dość dziwne bugi. Mianowicie brakowało tekstur nieba, chmur , mgła była żółta, aż do końca dnia a o godzinach 12:00 i 23:59 tekstury w mgnieniu oka zmieniały się na te z podstawki miast tych z Czasu.
Skrypt:
func void SetSkyState(var int time,
var int polyR,var int polyG, var int polyB,
var int fogR,var int fogG, var int fogB,
var string l0_tex, var int l0_alpha,var int l0_size, var int l0_mspeedx, var int l0_mspeedy,
var string l1_tex, var int l1_alpha,var int l1_size, var int l1_mspeedx, var int l1_mspeedy)
{
// ************************************************************
// all of argumenst are normal integers, later converted to
// zFloat, except *_size *_mspeedx/y
//l;/ ************************************************************
  var int l0_zCTexture_ptr;
var int l1_zCTexture_ptr;
var int ptr; ptr = MEM_ReadInt (MEM_SkyController.stateList_array + time * 4);
    var zCSkyState state; state = MEM_PtrToInst (ptr);

  //Prevent changing SkyStates that are mixing right now:
  if (ptr == DoNotChange_State0)
  {
return;
  }
  else if(ptr == DoNotChange_State1)
  {
//Set rain in zCSkyController_Outdoor:
CustomRainFX_InitRainSkyTime(subf(MEM_ReadInt(ptr),fracf(1,18)),addf(MEM_ReadInt(MEM_ReadInt(MEM_SkyController.stateList_array+time*4+4)),fracf(1,18)),mkf(1),Default_RainTEX,FLAG_INSTANT|FLAG_SKYPRESETRAIN);
//..
return;
  };
 
  //Get *zCTexture Layer0 using internal function
  if(Str_Len(l0_tex))
  {
  CALL_zStringPtrParam(l0_tex);
  CALL__cdecl (zCTexture__SearchName_offset);
  l0_zCTexture_ptr = CALL_RetValAsPtr();
  if(!l0_zCTexture_ptr)//still not loaded? load it now!
  {
CALL_zStringPtrParam(l0_tex);
  CALL__cdecl (zCTexture__LoadSingle_offset);
  l0_zCTexture_ptr = CALL_RetValAsPtr();
  };
};
  //Get *zCTexture Layer1 using internal function
  if(Str_Len(l1_tex))
  {
  CALL_zStringPtrParam(l1_tex);
  CALL__cdecl (zCTexture__SearchName_offset);
  l1_zCTexture_ptr = CALL_RetValAsPtr();
  if(!l1_zCTexture_ptr)//still not loaded? load it now!
  {
CALL_zStringPtrParam(l1_tex);
  CALL__cdecl (zCTexture__LoadSingle_offset);
  l1_zCTexture_ptr = CALL_RetValAsPtr();
  };
};
 
 
 
 

// ************************************************************
// all of argumenst are normal integers, later converted to
// zFloat, except *_size *_mspeedx/y
// ************************************************************

//Get proper zCSkyState:
  //Get *zCTexture Layer0 using internal function
  //TODO: When setting fogcolor middle of day, set it to overridecolor property too.

  //Layer 0:
  state.layer0_texName=l0_tex;
  state.layer0_texAlpha=mkf(l0_alpha);// alpha layer0_texAlpha
  state.layer0_texScale=l0_size; // texscale layer0_texScale
  state.layer0_texSpeed[0]=l0_mspeedx; // move speedx layer0_texSpeed[0]
  state.layer0_texSpeed[1]=l0_mspeedy; // move speedy layer0_texSpeed[1]
  //Layer 1:

  state.layer0_texAlpha=mkf(l1_alpha);// alpha layer0_texAlpha
  state.layer0_texScale=l1_size; // texscale layer0_texScale
  state.layer0_texSpeed[0]=l1_mspeedx; // move speedx layer0_texSpeed[0]
  state.layer0_texSpeed[1]=l1_mspeedy; // move speedy layer0_texSpeed[1]
 
//Outdoor Poly color/Ambient Lightning
    state.polyColor[0] = mkf (polyR);
    state.polyColor[1] = mkf (polyG);
    state.polyColor[2] = mkf (polyB);

  //Outdoor Fog color
    state.fogColor[0] = mkf (fogR);
    state.fogColor[1] = mkf (fogG);
    state.fogColor[2] = mkf (fogB);
};
SetSkyState(TIME_MIDDAY, 150,150,157, 120,120,125,
"SKYDAY_LAYER1_A1.TGA", 255,mkf(1), 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 255,f_foggyskysize, f_foggyspeed, f_foggyspeed);

//Afternoon
SetSkyState(TIME_AFTERNOON, 130,130,137, 120,120,125,
"SKYNIGHT_FOGGY_LAYER0.TGA", 0,f_nightskysize, 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 55,f_foggyskysize, f_foggyspeed, f_foggyspeed);

//Sunset
SetSkyState(TIME_SUNSET, 105,105,120, 90,90,95,
"SKYNIGHT_FOGGY_LAYER0.TGA", 124,f_nightskysize, 0, 0,
"SKYNIGHT_FOGGY_LAYER1.TGA", 0,f_foggyskysize, f_foggyspeed, f_foggyspeed);

//Dusk
SetSkyState(TIME_DUSK, 82,95,102, 20,22,40,
"SKYNIGHT_FOGGY_LAYER0.TGA", 255,f_nightskysize, 0, 0,
"SKYNIGHT_FOGGY_LAYER1.TGA", 205,f_foggyskysize2, f_foggyspeed, f_foggyspeed);

//Midnight
SetSkyState(TIME_MIDNIGHT, 52,81,100, 22,42,45,
"SKYNIGHT_FOGGY_LAYER0.TGA", 255,f_nightskysize, 0, 0,
"SKYNIGHT_FOGGY_LAYER1.TGA", 255,f_foggyskysize2, f_foggyspeed, f_foggyspeed);

//Dawn
SetSkyState(TIME_DAWN, 72,81,100, 32,31,32,
"SKYNIGHT_FOGGY_LAYER0.TGA", 0,f_nightskysize, 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 0,f_foggyskysize, f_foggyspeed, f_foggyspeed);
 
//Sunrise
SetSkyState(TIME_SUNRISE, 102,51,75, 38,35,37,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 0,mkf(1), 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 140,f_foggyskysize, f_foggyspeed, f_foggyspeed);
  //Midday
SetSkyState(TIME_MORNING, 120,120,127, 110,110,115,
"SKYDAY_LAYER1_A1.TGA", 255,mkf(1), 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 255,f_foggyskysize, f_foggyspeed, f_foggyspeed);

I ew. to:
ptr = MEM_ReadInt(SkyController_Ptr+1306);
  MEM_WriteInt(ptr,mkf(105)); //r
  MEM_WriteInt(ptr+4,mkf(105));//g
  MEM_WriteInt(ptr+8,mkf(110));//b
W CZ wszystko gra ale tu się buguje...
Spoiler
Tak pozmieniałem pointery, wiem że gotiki się różnią od siebie :I
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Ty kopiujesz wszystko na pałę. Żeby zmienić kolory nieba, tekstury itp. starczy KRÓCIUTKI skrypcik. Ty skopiowałeś całe skrypty z CZ, w których to trzeba robić wszystko na około.

class zCSkyState
{
    var int time;                //zREAL
    var int polyColor[3];        //zVEC3
    var int fogColor[3];         //zVEC3
    var int domeColor1[3];       //zVEC3
    var int domeColor0[3];       //zVEC3
    var int fogDist;             //zREAL
    var int sunOn;               //zBOOL
    var int cloudShadowOn;       //int
    var int layer0_skyMode;      //zESkyLayerMode
    var int layer0_tex;          //zCTexture*
    var string layer0_texName;   //zSTRING
    var int layer0_texAlpha;     //zREAL
    var int layer0_texScale;     //zREAL
    var int layer0_texSpeed[2];  //zVEC2
    var int layer1_skyMode;      //zESkyLayerMode
    var int layer1_tex;          //zCTexture*
    var string layer1_texName;   //zSTRING
    var int layer1_texAlpha;     //zREAL
    var int layer1_texScale;     //zREAL
    var int layer1_texSpeed[2];  //zVEC2
};

layer0 i layer1 odpowiadają za tekstury.
Zmienne z color zmieniają kolor.

Funkcja Splasha, która zmienia kolory chmur i nieba:

func void SetFogColor (var int day_time, var int R, var int G, var int B)
{
    var int ptr; ptr = MEM_ReadInt (MEM_SkyController.stateList_array + day_time * 4);
    var zCSkyState state; state = MEM_PtrToInst (ptr);
    state.fogColor[0] = mkf (R);
    state.fogColor[1] = mkf (G);
    state.fogColor[2] = mkf (B);
};

func void SetLightningColor (var int day_time, var int R, var int G, var int B)
{
    var int ptr; ptr = MEM_ReadInt (MEM_SkyController.stateList_array + day_time * 4);
    var zCSkyState state; state = MEM_PtrToInst (ptr);
    state.polyColor[0] = mkf (R);
    state.polyColor[1] = mkf (G);
    state.polyColor[2] = mkf (B);
};

// 0 - 12:00
// 1 - 17:00
// 2 - 19:12
// 3 - 20:24
// 4 - 0:00
// 5 - 3:20
// 6 - 4:30
// 7 - 6:00

func void SetSunnyWeatherPreset ()
{
    SetFogColor (0, 82, 109, 198);
    SetLightningColor (0, 255, 255, 255);

    SetFogColor (1, 150, 90, 60);
    SetLightningColor (1, 196, 133, 106);

    SetFogColor (2, 150, 90, 60);
    SetLightningColor (2, 140, 87, 60);

    SetFogColor (3, 10, 11, 18);
    SetLightningColor (3, 65, 65, 100);

    SetFogColor (4, 0, 0, 0);
    SetLightningColor (4, 0, 0, 0);

    SetFogColor (5, 0, 0, 0);
    SetLightningColor (5, 0, 0, 0);

    SetFogColor (6, 26, 36, 85);
    SetLightningColor (6, 120, 79, 55);

    SetFogColor (7, 70, 98, 193);
    SetLightningColor (7, 202, 202, 200);
};

Starczy dodać jeszcze zmienianie tekstur  i gotowe. Zamierzony efekt otrzymany JEDNYM kodem.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Ale tak jest zrobione... tylko funkcja ma w uj argumentów. Sam zobacz:
Mój skrypt:
state.fogColor[0] = mkf (fogR);
    state.fogColor[1] = mkf (fogG);
    state.fogColor[2] = mkf (fogB);
A skrypt orka:
MEM_WriteInt(ptr+16,mkf(fogR));//r
    MEM_WriteInt(ptr+20,mkf(fogG));//g
    MEM_WriteInt(ptr+24,mkf(fogB));//b   
    Więc nie kopiuje wszystkiego tylko czasem logicznie myślę... Ale nawet przy takim zapisie niebo przy zmianie czasu (nie wiem jak to wyjaśnić. Chodzi mi o offsety z tablic[0-12:00 etc.]) wraca na chwilę w swój orginalny stan.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Bo pobierasz złe offsety. MEM_WriteInt/String używasz TYLKO jeśli nie da się czegoś zrobić poprzez normalne skrypty. Zapewniam Cię, że to, co ja mówię działa poprawnie. Jeśli będziesz twierdził, że nie działa, sam sprawdzę (chociaż nawet nie muszę sprawdzać, bo jakimś magicznym sposobem Splash zrobił i używa tę funkcję).
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Miałem dać screena ale ScreenShooter odmówił pomocy :(
https://youtu.be/94_95h9f9dI
Sam możesz zobaczyć co się dzieje z pogodą. Raz jest piękny mglisty dzień, a raz w ogóle nie czyta tekstur i zostawia sam kolor światła.
Wywołanie przez FF_ApplyOnce();
func void ToDay_isFoggy()
 {
  var int ptr;
  var int f_foggyskysize; var int f_foggyspeed;
  var int f_nightskysize; var int f_foggyskysize2;

  f_foggyskysize = mkf(1);
  f_foggyskysize2 = fracf(5,4);
  f_foggyspeed = fracf(1,3);
  f_nightskysize = fracf(5,4);

  //Midday
SetSkyState(TIME_MIDDAY, 150,150,157, 120,120,125,
"SKYDAY_LAYER1_A1.TGA", 255,mkf(1), 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 255,f_foggyskysize, f_foggyspeed, f_foggyspeed);

//Afternoon
SetSkyState(TIME_AFTERNOON, 130,130,137, 120,120,125,
"SKYNIGHT_FOGGY_LAYER0.TGA", 0,f_nightskysize, 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 55,f_foggyskysize, f_foggyspeed, f_foggyspeed);

//Sunset
SetSkyState(TIME_SUNSET, 105,105,120, 90,90,95,
"SKYNIGHT_FOGGY_LAYER0.TGA", 124,f_nightskysize, 0, 0,
"SKYNIGHT_FOGGY_LAYER1.TGA", 0,f_foggyskysize, f_foggyspeed, f_foggyspeed);

//Dusk
SetSkyState(TIME_DUSK, 82,95,102, 20,22,40,
"SKYNIGHT_FOGGY_LAYER0.TGA", 255,f_nightskysize, 0, 0,
"SKYNIGHT_FOGGY_LAYER1.TGA", 205,f_foggyskysize2, f_foggyspeed, f_foggyspeed);

//Midnight
SetSkyState(TIME_MIDNIGHT, 52,81,100, 22,42,45,
"SKYNIGHT_FOGGY_LAYER0.TGA", 255,f_nightskysize, 0, 0,
"SKYNIGHT_FOGGY_LAYER1.TGA", 255,f_foggyskysize2, f_foggyspeed, f_foggyspeed);

//Dawn
SetSkyState(TIME_DAWN, 72,81,100, 32,31,32,
"SKYNIGHT_FOGGY_LAYER0.TGA", 0,f_nightskysize, 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 0,f_foggyskysize, f_foggyspeed, f_foggyspeed);
 
//Sunrise
SetSkyState(TIME_SUNRISE, 102,51,75, 38,35,37,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 0,mkf(1), 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 140,f_foggyskysize, f_foggyspeed, f_foggyspeed);
  //Midday
SetSkyState(TIME_MORNING, 120,120,127, 110,110,115,
"SKYDAY_LAYER1_A1.TGA", 255,mkf(1), 0, 0,
"SKYDAY_FOGGY_LAYER1_NORMAL.TGA", 255,f_foggyskysize, f_foggyspeed, f_foggyspeed);

  //If smooth, this part will be done when setting remaining states (when it will be raining)
  //if(trans == TRANS_SMOOTH)
  //{
// return;
  //};
//Set day fog COLOR [override]
 // ptr = MEM_ReadInt(SkyController_Ptr+1306);
  //MEM_WriteInt(ptr,mkf(105)); //r
  //MEM_WriteInt(ptr+4,mkf(105));//g
  //MEM_WriteInt(ptr+8,mkf(110));//b

  //MEM_WriteInt(SkyController_Ptr+1330,mkf(1900));
  //MEM_WriteInt(SkyController_Ptr+1334,mkf(12500));
 
  //MEM_WriteInt(SkyController_Ptr+1520,mkf(50));//sun alpha
  //MEM_WriteInt(SkyController_Ptr+1508,mkf(200));//sun r
 // MEM_WriteInt(SkyController_Ptr+1512,mkf(200));//sun g
 // MEM_WriteInt(SkyController_Ptr+1516,mkf(200));//sun b
 
 // MEM_WriteInt(SkyController_Ptr+1568,mkf(255));//moon alpha1
 //
// MEM_WriteInt(SkyController_Ptr+1572,mkf(185));//moon r
// MEM_WriteInt(SkyController_Ptr+1576,mkf(255));//moon g
// MEM_WriteInt(SkyController_Ptr+1580,mkf(205));//moon b
//
// MEM_WriteInt(SkyController_Ptr+1584,mkf(155));//moon alpha 2
 // MEM_WriteInt(SkyController_Ptr+1588,mkf(120));//moon size
 };
I funkcja jest wyżej.
Łatwo zauważyć, porównując początek filmiku i środek.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Twoja funkcja jest popsuta. Mówię ostatni raz, użyj skryptu Splasha.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Tak ostatnio wróciłem do filmików Czip'a i przypomniałem sobie czasy gdy "jarał" mnie zwykły vfx na mieczu. Jednak błędem było to, że po wczytaniu gry efekt czasem znikał(tak samo jak zmiana zen'a) I tak mnie ciekawi czy dało by rade napisać nową funkcję nakładania VFX'a na item. Gdzie w tabeli adresów szukać wskaźników (na 100% zcvob, ale nie mam pomysłu gdzie)
Druga sprawa jaka mnie ciekawi to jest system muzyki. Ork w CZ napisał nową bibliotekę i tak to działało. Ale czy da się napisać to bez biblioteki? (Warunek gdy npc. jest w stanie walki, ktoś jest wrogo nastawiony) Oraz jak by to fajnie zrobić by się nie bugowało? Skryptami da się ustalić głośność ?
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Nie da się tego bez biblioteki zrobić. Jak chcesz efekt na broni, żeby nie znikał to jeden z dobrych pomysłów jest nakładanie pfx w mdsie. Na WoG też jest poruszony ten temat, jeszcze go nie rozwiązali (chyba).
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Szmyk

Szmyk

Użytkownicy
posty64
Propsy58
Profesjabrak
  • Użytkownicy
Orc jako podstawę wykorzystał bibliotekę BASS, dodatkowo adresy zmiennych zawierające informację w jakim "statusie" znajduję się hero (czy jest podczas walki czy może podróżuje po świecie) także są znane i wystarczy odpalić sobie IDA Pro i znaleźć ich odpowiedniki w G2NK. Idąc tym tropem, że te adresy są znane i można je wykorzystać może udało by się odtwarzać muzykę jako WAVy spakowane w archiwach VDF? Jednak trzeba by było ogarnąć zmienianie głośności i zatrzymywanie utworów.
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
A taka jeszcze jedna rzecz. Jak mógłbym zrobić auto-grabież? Taką jak w CZ, bo dodałbym ją do MT aby mi się lepiej grało :D Mam taki skrypt, ale wywala błędy o przepełnieniu stosu...
FUNC void B_Remove (var C_NPC _owner, var C_NPC _receiver)
{
var string msg;
var int amount;
var int itmID;
var int i; i = 0;
var int loopStart; loopStart = MEM_StackPos.position;

if (i < INV_CAT_MAX)
{
var int slotNr;    slotNr = 0;
var int inLoop;    inLoop = MEM_StackPos.position;
amount = NPC_GetInvItemBySlot(_owner, i, slotNr);
itmID = Hlp_GetInstanceID(Item);

if (item.mainflag & ITEM_KAT_ARMOR)
{
slotNr += 1;
MEM_StackPos.position = inLoop;
};
msg=ConcatStrings("Otrzymano: ", item.name);
if (amount > 0)
{
CreateInvItems (_receiver, itmID, amount);
Npc_RemoveInvItems (_owner, itmID, amount);
MEM_StackPos.position = inLoop;
};
if(Npc_HasItems(_owner,item)>1)
            {
               msg = ConcatStrings(msg," (");
               msg = ConcatStrings(msg,inttostring(Npc_HasItems(_owner,item)));
               msg = ConcatStrings(msg,")");
            };
i += 1;
MEM_StackPos.position = loopStart;
Prints(msg);
};
};
instance herofocus(C_NPC);


func void Clears_Eq()
{
var oCNpc her; her = Hlp_GetNpc(hero);
if(Hlp_Is_oCNpc(her.focus_vob)) {
var c_npc oth; oth = MEM_PtrToInst(her.focus_vob);
if (Npc_IsInState (oth, ZS_Dead))||(C_BodyStateContains(oth,BS_UNCONSCIOUS))
 {
  B_Remove(oth,hero);
};
};
};

 func void ClearSelfEquipment()
{


 if (MEM_KeyState (KEY_GRAVE) == KEY_PRESSED)
{
 Clears_Eq();
};
};
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.


0 użytkowników i 3 gości przegląda ten wątek.
0 użytkowników
Do góry