Efekty specjalne 33496 8

O temacie

Autor inż. Avallach

Zaczęty 14.06.2012 roku

Wyświetleń 33496

Odpowiedzi 8

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Efekty specjalne
2012-06-14, 13:41(Ostatnia zmiana: 2013-06-04, 22:07)
zEngin jest wyposażony w kilka efektów specjalnych, które mogą być wywoływane z poziomu VisualFX'ów. Są dość mało znane, niektóre nigdy nie użyte i do znalezienia tylko przeszukując kod silnika, dlatego może ten tutorial komuś się przyda. Sposób ich użycia jest dość prosty: tworząc nowy VFX (klasa CFx_Base) w visName_S podajemy po kropce kod efektu (eqk, fow, ltn, scx, slw, tga, trl) i za pomocą userString'ów podajemy ewentualne parametry. Przy ich tworzeniu korzystamy nadal ze standardowych parametrów vfx'ów, np czas trwania określamy za pomocą emFXLifeSpan (-1: permanentny).

Kilka efektów zostało wprowadzonych dopiero w wersji 2.6, dlatego w G1 są niedostępne.

1. Migotanie ekranu (screenblend/zCVobScreenFX) (g1 częściowo)
visName_S: *.scx (standardowo "screenblend.scx", danie w nazwie _reverse odtwarza animację od tyłu)
userString[0]: czas trwania pętli (np 100000000000)
userString[1]: kolor (RGBA) (np 0 0 0 100)
userString[2]: czas zanikania (np 0.5)
userString[3]: tekstura (tylko g2nk) (np ScreenFX_Dem_a0)
userString[4]: fps animacji tekstury (tylko g2nk) (np 8)

2. Spowolnienie czasu (slowmotion) (tylko g2nk)
visName_S: *.slw (standardowo "time.slw")
userString[0]: skala upływu czasu dla gracza (np 0.5)
userString[1]: skala upływu czasu dla świata (np 1.0)

3. Deformacja ekranu (fov morph) (tylko g2nk)
visName_S: *.fov (standardowo "morph.fov")
userString[0]: siła efektu (np 0.8)
userString[1]: szybkość (np 1.0)
userString[2]: bazowa szerokość (puste: wartość domyślna) (np 120)
userString[3]: bazowa wysokość (puste: wartość domyślna) (np 90)

4. Wstrząsy kamery (earthquake/zCEarthquake)
visName_S: *.eqk (standardowo "earthquake.eqk")
userString[0]: ? (np 1000)
userString[1]: ? (np 5)
userString[2]: ? (np 5 5 5)

5. Nieskończonej długości pas tekstury obrócony w kierunku kamery (lighting?)
visName_S: nazwa_tekstury.ltn (np Lightning_Single.ltn = pas tekstury Lightning_Single.tga)

6. Decal
visName_S: nazwa_tekstury.tga (najprostszy z efektów, chyba nie trzeba tłumaczyć)

7. Elastyczna rozwijająca się wstęga tekstury (nigdy nie zastosowane, znalazłem w silniku g1, być może odpowiada też za ślady za bronią) (polystrip/zCPolyStrip)
visName_S: nazwa_tekstury.trl (standardowe polystrip.trl = pas tekstury polystrip.tga)
userString[0]: ?
userString[1]: ?
userString[2]: ?
userString[3]: ?
userString[4]: ?
(eksperymentowałem z różnymi, np jak przyczepiłem do dłoni bohatera, to zostawiała taką dość szeroką, długaśną wstęgę która lekko się kołysała i stopniowo zanikała od końca)

Znaleźć to że teksturę można podawać za pomocą nazwy pomógł znaleźć Monk :D

MarkosBoss

MarkosBoss

RaveN Studio
posty119
Propsy186
Profesjabrak
  • RaveN Studio
5. Nieskończonej długości pas tekstury obrócony w kierunku kamery
Co to znaczy?

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič
5. Nieskończonej długości pas tekstury obrócony w kierunku kamery
Co to znaczy?
najlatwiej to vyprobovac... ale myszle ze taky pseudo fog ...
 


inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Efekty specjalne
#3 2012-06-19, 17:53(Ostatnia zmiana: 2012-06-19, 17:58)
Najkrócej mówiąc - to co jest w czarze który powoduje walnięcie piorunem z nieba w dany obiekt. Piorun jest nieskończonej długości, a jakby nie przemieszczać kamery, zawsze jest osiowo obrócony w jej stronę (spellFX_Lightning, czar błyskawica).

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Efekty specjalne
#4 2012-07-02, 20:21(Ostatnia zmiana: 2012-07-21, 22:29)
Jakby kogoś jeszcze interesował ostatni efekt (opis jest dość niejasny), znalazłem moje stare screeny z dość losowej konfiguracji.

Emitter był w dłoni bezimiennego, w miarę biegu i skakania zostawiała za sobą taką trójwymiarową wstęgę wiszącą w powietrzu, przy obracaniu kamery jakby subtelnie falującą. Jestem prawie pewien że w podobny sposób powstają ślady przy wymachiwaniu bronią czy strzelaniu.
Kiedy jeszcze tworzyłem moda, rozważałem przynajmniej kilka zastosowań - mogłyby to być np jakieś świetliste ogony dla błędnych ogników.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh

Toworish

Efekty specjalne
#5 2013-05-28, 15:03(Ostatnia zmiana: 2013-05-28, 15:04)
Hmm, chyba warto tutaj też dodać że INSTANCE efektu powinno być z dużej litery np:

INSTANCE SPOWOLNIONY_CZAS(CFx_Base_Proto)
instance spowolniony_czas(CFx_Base_Proto)

gdzie czerwony kolor znaczy że źle, nie wiem czym to było spowodowane aczkolwiek gdy instance moich efektów były napisane z małej litery wtedy się włączały lecz nie dało się ich wyłączyć, męczyłem wtedy forumowiczów i w swoim temacie i na gg xD
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
No, that is wrong, they don't need to be in upper case, because they will become upper case anyway (that's the way the parser works). If you reference such an instance in a string however, you'll always need to use upper case.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Dzięki asyście @V0IDa udało mi się zdobyć z silnika gry konkretne informacja na temat tego jak te efekty są konfigurowane :D
Typ efektu w konfigurowanym oCVisualFX zależy od tego co podamy w visName_S. Tak jak pisałem kilka lat temu, jest kilka możliwości zależnie od tego co jest po kropce:
 - jeśli nazwa nie zawiera kropki, używany jest "tradycyjnie" zCParticleFX
 - ".TGA" - zCDecal (użyte parametry: visSize[], visAlpha, visTexAniFPS, visTexAniIsLooping)
 - ".3DS" lub ".MDS" - zCProgMeshProto (użyte parametry: visAlphaBlendFunc_S, visTexAniFPS, visTexAniIsLooping, visAlpha)
 - ".TRL" - zCPolyStrip, (używane parametry: userString[0] to alphaFadeSpeed, visAlphaBlendFunc_S, visName_S aż do kropki i z doklejonym ".TGA" to nazwa tekstury, visTexAniFPS, visTexAniIsLooping, visAlpha)
 - ".LTN" - klasa i parametry te same co w ".TRL, różnica jest tylko ta że jest camAlign ustawione na POLY a nie STRIP, ma też parametr "lightning = true" (LOL)
 - ".EQK" - zCEarthquake (używane parametry to wszystkie wektory 3d: userString[0] to radius3, userString[1] to timeSec3, userString[2] to amp3
 - ".FOV" - bez parametrów
 - ".SCX" - zCVobScreenFX (używane parametry: jeśli visName_S zawiera "REVERSE", to jest ustawiane screenFXDir)
 - ".MMS" - zCMorphMesh (używane parametry: visAlphaBlendFunc_S, visTexAniFPS, visTexAniIsLooping, visAlpha)
 - ".SLW" - (używane parametry: userString[0] to timeScaleGlobal, userString[1] to timeScaleLocal)

Splash

Splash

Moderator
posty4207
Propsy3409
ProfesjaNierób
  • Moderator
Nie wiem czy się przyda, ale wrzucam tu pełną klasę oCVisualFX w Daedalusie.
Spoiler
class oCVisualFX
{
        var string                    m_sVisName;                //zSTRING
        var string                    m_sVisSize;                //zSTRING
        var float                    m_fVisAlpha;            //float
        var string                    m_sVisAlphaBlendFunc;    //zSTRING
        var float                    m_fVisTexAniFPS;        //float
        var int                    m_bVisTexAniIsLooping;    //zBOOL
        var string                    m_sEmTrjMode;            //zSTRING
        var string                    m_sEmTrjOriginNode;        //zSTRING
        var string                    m_sEmTrjTargetNode;        //zSTRING
        var float                    m_fEmTrjTargetRange;    //float
        var float                    m_fEmTrjTargetAzi;        //float
        var float                    m_fEmTrjTargetElev;        //float
        var int                        m_nEmTrjNumKeys;        //int
        var int                        m_nEmTrjNumKeysVar;        //int
        var float                    m_fEmTrjAngleElevVar;    //float
        var float                    m_fEmTrjAngleHeadVar;    //float
        var float                    m_fEmTrjKeyDistVar;        //float
        var string                    m_sEmTrjLoopMode;        //zSTRING
        var string                    m_sEmTrjEaseFunc;        //zSTRING
        var float                    m_fEmTrjEaseVel;        //float
        var float                    m_fEmTrjDynUpdateDelay;    //float
        var int                    m_bEmTrjDynUpdateTargetOnly;    //zBOOL
        var string                    m_sEmFXCreate;            //zSTRING
        var string                    m_sEmFXInvestOrigin;    //zSTRING
        var string                    m_sEmFXInvestTarget;    //zSTRING
        var float                    m_fEmFXTriggerDelay;    //float
        var int                    m_bEmFXCreatedOwnTrj;    //zBOOL
        var string                    m_sEmActionCollDyn;        //zSTRING
        var string                    m_sEmActionCollStat;    //zSTRING
        var string                    m_sEmFXCollStat;        //zSTRING
        var string                    m_sEmFXCollDyn;            //zSTRING
        var string                    m_sEmFXCollStatAlign;    //zSTRING
        var string                    m_sEmFXCollDynAlign;    //zSTRING
        var float                    m_fEmFXLifeSpan;        //float
        var int                    m_bEmCheckCollision;    //zBOOL
        var int                    m_bEmAdjustShpToOrigin;    //zBOOL
        var float                    m_fEmInvestNextKeyDuration;        //float
        var float                    m_fEmFlyGravity;        //float
        var string                    m_sEmSelfRotVel;        //zSTRING
        var string                    m_sUserString[3];        //zSTRING
        var string                    m_sLightPresetName;        //zSTRING
        var string                    m_sSfxID;                //zSTRING
        var int                    m_bSfxIsAmbient;        //zBOOL
        var int                    m_bSendAssessMagic;        //zBOOL
        var float                    m_fSecsPerDamage;        //float
    //---------------------------------------------------------    end
        var int                        us32C;            //int
        var int                    m_vDecalDim;            //zVEC3
        var int                    m_TrjMode;                //DWORD
        var int                    m_EmActionCollDyn;        //DWORD
        var int                    m_EmActionCollStat;        //DWORD
        var int                    m_vEmSelfRotVel;        //zVEC3
        var int            m_EmTrjEaseFunc;        //zSTrjEaseFunc
        var int            m_EmTrjLoopMode;        //zSTrjLoopMode
        var int                        m_nKeyStage;            //int
        var int                m_pOwnerVisFX;            //oCVisualFX*
        var int                m_pOwnerTrjVisFX;        //oCVisualFX*
        var int                m_pOriginInvestFX;        //oCVisualFX*
        var int                m_pTargetInvestFX;        //oCVisualFX*
        var int            m_pVisFXAI;                //oCVisualFXAI*
        var int                    m_bInitOriginInvest;    //zBOOL
        var int                    m_bInitTargetInvest;    //zBOOL
        var int                    m_bStopInvest;            //zBOOL
        var int    m_arrChildTrjFX;        //zCArray<oCVisualFX*>
        var int    m_arrChildFX;            //zCArray<oCVisualFX*>
        var int    m_arrEmKeys;            //zCArray<oCEmitterKey*>
        var int            m_arrTargetVobs;        //zCArray<zCVob*>
        var int            m_arrCreateOnceVobs;    //zCArray<zCVob*>
        var int            m_arrCollCandidates;    //zCArray<zCVob*>
        var int            m_arrCollidedVobs;        //zCArray<zCVob*>
        var int    m_arrCollReport;        //zCArray<zSVisualFXColl>
        var int            m_Trajectory;            //oCTrajectory
        var int            m_pEarthQuake;            //zCEarthquake*
        var int            m_pScreenFX;            //zCVobScreenFX*
        var float                    m_fTimerBlendEffect;    //float
        var int                    m_bReverseBlend;        //zBOOL
        var int        m_pEmTrjOriginNode;        //zCModelNodeInst*
        var int        m_pEmTrjTargetNode;        //zCModelNodeInst*
        var int                m_pSetVisual;            //zCVisual*
        var int                    m_pOriginVob;            //zCVob*
        var int                    m_pInflictorVob;        //zCVob*
        var int                    m_pTargetVob;            //zCVob*
        var int                m_pLightVob;            //zCVobLight*
        var float                    m_fLightRange;            //float
        var int                m_pSndFX;                //zCSoundFX*
        var int                        m_nHandleSndFX;            //int
        var string                    m_sScriptName;            //zSTRING
        var int            m_pInvestKey;            //oCEmitterKey*
        var int            m_pUpdatedKey;            //oCEmitterKey*
        var int            m_pActiveKey;            //oCEmitterKey*
        var int                        m_nInvestLevel;            //int
        var int                    m_bCollision;            //zBOOL
        var int                        m_nContinousColl;        //int
        var int                    m_bShowVisual;            //zBOOL
        var int                    m_bChildFX;                //zBOOL
        var int                    m_bFinished;            //zBOOL
        var int                    m_bInitEffect;            //zBOOL
        var int                    m_bCanDeleted;            //zBOOL
        var int                    m_bPolyStrip;            //zBOOL
        var int                        m_nEffectLevel;            //int
        var float                    m_fTick;                //float
        var int                        us4C0;                //int (?)
        var float                    m_fDisposeTimer;        //float
        var float                    m_fDamagePerSecTimer;    //float
        var int                    m_vTargetPos;            //zVEC3
        var int                    m_vTrjPos;                //zVEC3
        var int                    m_vBaseVisSize;            //zVEC3
        var int                    m_vVisSize;                //zVEC3
        var int                    m_vActVisSize;            //zVEC3
        var float                    m_fInvestNextKeyTimer;    //float
        var float                    m_fGravityAngle;        //float
        var float                    m_fEmTriggerTimer;        //float
        var float                    m_fEmTrjDynUpdateTimer;    //float
        var float                    m_fNextTrjDistance;        //float
        var float                    m_fTrjDirection;        //float
        var float                    m_fTrjDuration;            //float
        var float                    m_fLifeSpanTimer;        //float
        var float                    m_fDamage;                //float
        var int                        m_nDamageType;            //int
        var int                        m_nSpellType;            //int
        var int                        m_nTargetType;            //int
        var float                    m_fPpsValue;            //float
        var int                    m_vVisSizeStart;        //zVEC2
        var int                    m_vFollowPos[10];        //zVEC3
        var int                        m_nFollowIndex;            //int
        var int                    m_bFollowIntersect;        //zBOOL
        var int                    m_bProjectile;            //zBOOL
};
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie


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