diff --git a/docs/sdk/script/ScriptPlayers.xml b/docs/sdk/script/ScriptPlayers.xml index 128f0931b..1d12631d4 100644 --- a/docs/sdk/script/ScriptPlayers.xml +++ b/docs/sdk/script/ScriptPlayers.xml @@ -43,7 +43,7 @@ protected func InitializePlayer(int iPlr) protected func FxInt_EAITimer(object pCrew, int iEffNum, int iEffTime) { // Nächsten Gegner angreifen - var pEnemy = FindObject2(Find_Hostile(GetOwner(pCrew)), Find_OCF(OCF_Alive), Sort_Distance()); + var pEnemy = FindObject(Find_Hostile(GetOwner(pCrew)), Find_OCF(OCF_Alive), Sort_Distance()); if (pEnemy) SetCommand(pCrew, "Attack", pEnemy); return FX_OK; } @@ -108,7 +108,7 @@ protected func InitializeScriptPlayer(int iPlr, int idTeam) protected func FxInt_EAITimer(object pCrew, int iEffNum, int iEffTime) { // Nächsten Gegner angreifen - var pEnemy = FindObject2(Find_Hostile(GetOwner(pCrew)), Find_OCF(OCF_Alive), Sort_Distance()); + var pEnemy = FindObject(Find_Hostile(GetOwner(pCrew)), Find_OCF(OCF_Alive), Sort_Distance()); if (pEnemy) SetCommand(pCrew, "Attack", pEnemy); return FX_OK; } diff --git a/docs/sdk/script/fn/AnyContainer.xml b/docs/sdk/script/fn/AnyContainer.xml index 79ce8ed1d..f4ec70968 100644 --- a/docs/sdk/script/fn/AnyContainer.xml +++ b/docs/sdk/script/fn/AnyContainer.xml @@ -20,7 +20,6 @@ Find_AnyContainer FindObject - FindObjectOwner jwkApril 2002 diff --git a/docs/sdk/script/fn/COMD_Right.xml b/docs/sdk/script/fn/COMD_Right.xml index a6f1cbbc0..08eb0ce41 100644 --- a/docs/sdk/script/fn/COMD_Right.xml +++ b/docs/sdk/script/fn/COMD_Right.xml @@ -13,7 +13,7 @@ Dieser Wert ist als Engine-Konstante definiert. Die Funktionsklammern können daher optional weggelassen werden. - SetComDir(COMD_Right, FindObject2(Find_ID(BLMP))); + SetComDir(COMD_Right, FindObject(Find_ID(BLMP))); Ändert die Flugrichtung eines Luftschiffes. diff --git a/docs/sdk/script/fn/CastObjects.xml b/docs/sdk/script/fn/CastObjects.xml index 441287c06..18dd92607 100644 --- a/docs/sdk/script/fn/CastObjects.xml +++ b/docs/sdk/script/fn/CastObjects.xml @@ -5,7 +5,7 @@ CastObjects ObjekteErzeugung - 4.6.5.0 CP + 4.6.5.0 CP4.10.0.0 OC int @@ -14,6 +14,8 @@ int iLevelGeschwindigkeit der verschleuderten Objekte int iXX-Ausgangsposition. Offset zum aufrufenden Objekt bei lokalem Aufruf. int iYY-Ausgangsposition. Offset zum aufrufenden Objekt bei lokalem Aufruf. + int iAngleWinkel in den die Objekte verschleudert werden. + int iAngleVarianceMaximale Abweichung von diesem Winkel. Wenn nicht angegeben werden Objekte in alle Richtungen verschleudert. Verschleudert iNumber Objekte an angegebener Position mit einer Geschwindigkeit von iLevel. Bei einem lokalen Aufruf haben die erzeugten Objekte den selben Besitzer wie das aufrufende Objekt. @@ -30,4 +32,5 @@ CastObjects(SPRK,1,20,GetVertex(num, 0) - - - - - FindObject - ObjekteSuche - 4.6.5.0 CP4.9.1.0 GWE - - - object - - ididDefObjekttyp - intiXSuchposition bzw. linker Rand des Suchrechtecks. Bei lokalem Aufruf Offset zum aufrufenden Objekt. - intiYSuchposition bzw. oberer Rand des Suchrechtecks. Bei lokalem Aufruf Offset zum aufrufenden Objekt. - intiWdtBreite des Suchrechtecks. Siehe auch Hinweis unten. - intiHgtHöhe des Suchrechtecks. Siehe auch Hinweis unten. - intdwOCFBitmaske von Objektattributen. Es werden alle Objekte gefunden, die mindestens eines der übergebenen Objektattribute besitzen. 0 findet alle Objekte. - stringszActionAktivität des zu findenden Objekts. - objectpActionTargetAktivitätsziel des zu findenden Objekts. Siehe dazu auch SetAction, GetActionTarget - anypContainerBehälter des zu findenden Objekts. Wenn angegeben, wird nur dieser Behälter durchsucht. Möglich sind auch NoContainer für Objekte, die sich im Freien befinden und AnyContainer für alle Objekte. - objectpFindNextObjekt, nach dem die Suche begonnen wird. Über diesen Parameter können in einer Schleife nacheinander alle Objekte gefunden werden, die den Suchkriterien entsprechen. - - - Liefert das erste gefundene Objekt, das den angegebenen Suchkriterien entspricht. Sind iWdt und iHgt beide -1, so wird das nächstliegende Objekt gefunden. Sind sie beide 0, wird nur am Punkt iX/iY gesucht. Sind iX, iY, iWdt und iHgt alle 0, gilt als Suchrechteck die gesamte Karte (auch bei lokalen Aufrufen). Es müssen stets die Bedingungen aller Parameter erfüllt sein, die angegeben und nicht 0 sind. - Bei objektlokalem Aufruf findet sich das aufrufende Objekt nicht selber. - Wird ein vollständiges Suchrechteck angegeben, so werden Objekte gefunden, deren Mittelpunkt sich innerhalb dieses Rechtecks befindet. Sind alle vier Werte des Suchrechtecks (iX, iY, iWdt, iHgt) gleich 0 oder wurden nicht angegeben, so wird immer die gesamte Spielfläche durchsucht. Sind Breite und Höhe des Suchrechtecks (iWdt, iHgt) gleich 0, so gelten die Koordinaten (iX, iY) als Suchpunkt und es werden nur Objekte gefunden, die diesen Suchpunkt überlappen. Sind Breite und Höhe des Suchrechtecks beide gleich -1, so wird vom Suchpunkt ausgehend das jeweils nächstliegende Objekt gefunden. - Die Funktion ist veraltet. Es wird empfohlen, FindObjects bzw. FindObject2 zu verwenden, da diese Funktionen mehr Suchparameter unterstützen und für viele Fälle besser optimiert sind. - - -var obj; -if (FindObject(0, LandscapeWidth()-100, 0, 100,LandscapeHeight(), OCF_CrewMember())) - Message (Format ("<%s>|Hier gehts nicht weiter.", obj, GetName (obj)"); - Lässt den Clonk realisieren, dass die Landschaft am rechten Rand endlich ist. - - - Incinerate(FindObject(CLNK, 0,0, -1,-1)); - Entzündet den nächstliegenden Clonk. - - - Explode(100, FindObject(0, 100, 100, 0, 0, OCF_Living(), "Jump")); - Lässt einen Clonk explodieren, der sich an Position 100/100 befindet, und springt. - - - -var obj; -while (obj=FindObject(WIPF, 0,0,0,0, 0, 0,0, NoContainer(), obj)) Incinerate(obj); - - Entzündet alle Wipfe, die nirgends enthalten sind. - - - - NoContainer - AnyContainer - FindObjects - FindObject2 - FindObjectOwner - - - Sven2November 2001 - matthesJuni 2004 - diff --git a/docs/sdk/script/fn/FindObject2.xml b/docs/sdk/script/fn/FindObject2.xml index 7854785a0..7ec5d6d87 100644 --- a/docs/sdk/script/fn/FindObject2.xml +++ b/docs/sdk/script/fn/FindObject2.xml @@ -3,9 +3,9 @@ - FindObject2 + FindObject ObjekteSuche - 4.9.6.0 CR + 4.10.0.0 OC object @@ -14,11 +14,11 @@ Gibt ein Objekt zurück, das die angegebenen Suchkriterien erfüllt. Die Suchkriterien werden mittels speziellen Kriteriums-Funktionen der Form "Find_*" angegeben. - Anders als bei FindObject findet sich bei objektlokalen Aufrufen von FindObject2 das aufrufende Objekt selbst. Dies kann durch Find_Exclude() verhindert werden. - Die Kriterien werden genau so angegeben wie bei FindObjects und ObjectCount2. Siehe FindObjects für weitere Kriterium-Beispiele. + Das aufrufende Objekt findet sich in FindObject auch selbst. Dies kann durch Find_Exclude() verhindert werden. + Die Kriterien werden genau so angegeben wie bei FindObjects und ObjectCount. Siehe FindObjects für weitere Kriterium-Beispiele. -if(FindObject2(Find_Distance(10), Find_OCF(OCF_CrewMember), Find_Hostile(GetOwner())) +if(FindObject(Find_Distance(10), Find_OCF(OCF_CrewMember), Find_Hostile(GetOwner())) Explode(20); Wenn sich ein feindlicher Clonk näher als 10 Pixel an das Objekt heranwagt, explodiert dieses. @@ -45,8 +45,7 @@ Find_Owner FindObject FindObjects - FindObjectOwner - ObjectCount2 + ObjectCount ClonkonautJuli 2006 diff --git a/docs/sdk/script/fn/FindObjectOwner.xml b/docs/sdk/script/fn/FindObjectOwner.xml deleted file mode 100644 index 913a1fcd1..000000000 --- a/docs/sdk/script/fn/FindObjectOwner.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - FindObjectOwner - ObjekteSuche - 4.9.1.0 GWE - - object - - ididDefObjekttyp - intiOwnerBesitzer, den das gefundene Objekt haben soll - intiXLinke Kante der Position. Bei lokalem Aufruf Offset zum aufrufenden Objekt. - intiYObere Kante der Position. Bei lokalem Aufruf Offset zum aufrufenden Objekt. - intiWdtSuchrechteck Breite - intiHgtSuchrechteck Höhe - intdwOCFObjektattribute. Es werden nur Objekte gefunden, die alle angegebenen Objektattribute besitzen. 0 findet alle Objekte. - stringszActionAktivität des zu findenden Objekts - objectpActionTargetAktivitätsziel, das das Objekt besitzen muss. Siehe dazu auch SetAction, GetActionTarget - objectpFindNextObjekt, hinter dem die Suche begonnen wird. Über diesen Parameter können in einer Schleife alle Objekte gefunden werden, die den Suchkriterien entsprechen. - - - Sucht Objekte nach ihrem Besitzer und anderen Kriterien, analog zu FindObject. - - - RemoveObject(FindObjectOwner(FLAG, 0)); - Entfernt die Flagge des ersten Spielers. - - - - FindObject - FindObject2 - FindObjects - GetOwner - SetOwner - - - Sven2November 2001 - \ No newline at end of file diff --git a/docs/sdk/script/fn/FindObjects.xml b/docs/sdk/script/fn/FindObjects.xml index 794f68e58..4568c026f 100644 --- a/docs/sdk/script/fn/FindObjects.xml +++ b/docs/sdk/script/fn/FindObjects.xml @@ -15,7 +15,7 @@ Erstellt eine Liste von Objekten, auf die alle angegeben Suchkriterien zutreffen. Die Suchkriterien werden mittels speziellen Kriteriums-Funktionen der Form "Find_*" angegeben. Anders als bei FindObject findet sich bei objektlokalen Aufrufen von FindObjects das aufrufende Objekt selbst. Dies kann durch Find_Exclude() verhindert werden. - Die Kriterien werden genau so angegeben wie bei FindObject2 und ObjectCount2. + Die Kriterien werden genau so angegeben wie bei FindObject und ObjectCount. for(var pVehicle in FindObjects (Find_Owner(1), Find_Category(C4D_Vehicle))) @@ -57,10 +57,8 @@ Find_OCF Find_Or Find_Owner - FindObject2 - ObjectCount2 FindObject - FindObjectOwner + ObjectCount ClonkonautJuli 2006 diff --git a/docs/sdk/script/fn/Find_OCF.xml b/docs/sdk/script/fn/Find_OCF.xml index 64db16764..6c7b8f677 100644 --- a/docs/sdk/script/fn/Find_OCF.xml +++ b/docs/sdk/script/fn/Find_OCF.xml @@ -16,11 +16,11 @@ Für weitere Informationen und Beispiele zur Benutzung dieser Funktion sehe FindObjects. - ObjectCount2(Find_OCF(OCF_InLiquid | OCF_InSolid)) + ObjectCount(Find_OCF(OCF_InLiquid | OCF_InSolid)) Gibt die Anzahl der Objekte zurück, die sich in Flüssigkeit befinden oder im Boden stecken. - FindObject2(Find_OCF(OCF_Alive), Find_OCF(OCF_OnFire)) + FindObject(Find_OCF(OCF_Alive), Find_OCF(OCF_OnFire)) Gibt das erstbeste brennende Lebewesen zurück, falls ein solches existiert. diff --git a/docs/sdk/script/fn/GetMaterialColor.xml b/docs/sdk/script/fn/GetMaterialColor.xml deleted file mode 100644 index 77cba10fc..000000000 --- a/docs/sdk/script/fn/GetMaterialColor.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - GetMaterialColor - Landschaft - Material - 4.9.1.0 GWE - - int - - intiMatIndex des Materials, von dem eine Farbe ermittelt wird - intiNumberMaterialfarbnummer (0-2) - intiChannelChannel. 0=Rot; 1=Grün; 2=Blau - - - Ermittelt die Farbe eines Materials. - Dieser Wert ist nicht synchronisationssicher! - - - -var bgmat=GetMaterial(GetX(GetCursor(0)), GetY(GetCursor(0))+12)); -SetSkyFade(GetMaterialColor(bgmat,0,0),GetMaterialColor(bgmat,0,1),GetMaterialColor(bgmat,0,2),GetMaterialColor(bgmat,1,0),GetMaterialColor(bgmat,1,1),GetMaterialColor(bgmat,1,2)); - - - Setzt die Himmelsfarben nach dem Material, auf dem der geraude ausgewählte Clonks des ersten Spielers steht. - - - - SetMaterialColor - Material - - - Sven2November 2001 - \ No newline at end of file diff --git a/docs/sdk/script/fn/NO_OWNER.xml b/docs/sdk/script/fn/NO_OWNER.xml index 38f16ca1d..be750037c 100644 --- a/docs/sdk/script/fn/NO_OWNER.xml +++ b/docs/sdk/script/fn/NO_OWNER.xml @@ -9,7 +9,7 @@ int - Spielernummer: Kein Spieler. Diese Konstante kann als Besitzerangabe für diverse Funktionen wie CreateObject oder FindObjectOwner verwendet werden, um einen neutralen Spieler anzugeben. + Spielernummer: Kein Spieler. Diese Konstante kann als Besitzerangabe für diverse Funktionen wie CreateObject verwendet werden, um einen neutralen Spieler anzugeben. Dieser Wert ist als Engine-Konstante definiert. Die Funktionsklammern können daher optional weggelassen werden. diff --git a/docs/sdk/script/fn/ObjectCount.xml b/docs/sdk/script/fn/ObjectCount.xml deleted file mode 100644 index e8454f1db..000000000 --- a/docs/sdk/script/fn/ObjectCount.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - ObjectCount - ObjekteSuche - 4.6.5.0 CP - - int - - ididDefObjekttyp - intiXLinke Kante der Position. Bei lokalem Aufruf Offset zum aufrufenden Objekt. - intiYObere Kante der Position. Bei lokalem Aufruf Offset zum aufrufenden Objekt. - intiWdtSuchrechteck Breite - intiHgtSuchrechteck Höhe - intdwOCFObjektattribute. Es werden nur Objekte gefunden, die alle angegebenen Objektattribute besitzen. 0 findet alle Objekte. - stringszActionAktivität des zu findenden Objekts - objectpActionTargetAktivitätsziel, das das Objekt besitzen muss. Siehe dazu auch SetAction, GetActionTarget - anypContainerContainerobjekt. Wenn angegeben, wird nur dieser Behälter durchsucht. Möglich sind auch NoContainer (Objekt befindet sich im Freien), und AnyContainer (Objekt ist in einem beliebigen Behälter enthalten). - intiOwnerBesitzer, den die gefundenen Objekte haben sollen. - - - Sucht Objekte, und gibt deren Anzahl zurück. Sind iWdt und iHgt beide -1, so wird das nächstliegende Objekt gefunden. Sind sie beide 0, wird nur am Punkt iX/iY gesucht. Sind iX, iY, iWdt und iHgt alle 0, gilt als Suchrechteck die gesamte Karte (auch bei lokalen Aufrufen). Es müssen stets die Bedingungen aller Parameter erfüllt sein, die angegeben und nicht 0 sind. - - FindObject - NoContainer - AnyContainer - FindObjectOwner - ObjectCount2 - - - jwkAugust 2002 - diff --git a/docs/sdk/script/fn/ObjectCount2.xml b/docs/sdk/script/fn/ObjectCount2.xml index eed48a141..c4cadd3de 100644 --- a/docs/sdk/script/fn/ObjectCount2.xml +++ b/docs/sdk/script/fn/ObjectCount2.xml @@ -3,9 +3,9 @@ - ObjectCount2 + ObjectCount ObjekteSuche - 4.9.6.0 CR + 4.10.0.0 CR int @@ -14,10 +14,10 @@ Gibt die Anzahl der Objekte zurück, die das angegebenen Suchkriterien erfüllen. Die Suchkriterien werden mittels speziellen Kriteriums-Funktionen der Form "Find_*" angegeben. - Die Kriterien werden genau so angegeben wie bei FindObjects und FindObject2. Siehe FindObjects für weitere Kriterium-Beispiele. + Die Kriterien werden genau so angegeben wie bei FindObjects und FindObject. Siehe FindObjects für weitere Kriterium-Beispiele. - Message( "Noch %d feindliche Clonks!", ObjectCount2(Find_OCF(OCF_CrewMember), Find_Hostile(GetOwner()) ); + Message( "Noch %d feindliche Clonks!", ObjectCount(Find_OCF(OCF_CrewMember), Find_Hostile(GetOwner()) ); Informiert über die Stärke der Feinde. @@ -41,7 +41,7 @@ Find_OCF Find_Or Find_Owner - FindObject2 + FindObject FindObjects ObjectCount diff --git a/docs/sdk/script/fn/SetCommand.xml b/docs/sdk/script/fn/SetCommand.xml index 5d4ad1426..56f43f88c 100644 --- a/docs/sdk/script/fn/SetCommand.xml +++ b/docs/sdk/script/fn/SetCommand.xml @@ -120,7 +120,7 @@ - SetCommand(this(), "Attack", FindObjectOwner(CLNK, 1, 0, 0, -1, -1), 0, 0, 0, 0, 10); + SetCommand(this(), "Attack", FindObject(Find_ID(CLNK),Sort_Distance(0,0)), 0, 0, 0, 0, 10); Dieser Script gibt dem ausführenden Clonk den Befehl, den nächstgelegenen Clonk von Spieler 1 zu attackieren. Dabei soll er nicht so schnell aufgeben und (wenn er z.B. daran scheitert, den Weg zum Feind zu finden) es 10 Mal zu versuchen, bis er sein Ziel erreicht hat oder abbricht. diff --git a/engine/src/C4Script.cpp b/engine/src/C4Script.cpp index 92c938bae..9e247a680 100644 --- a/engine/src/C4Script.cpp +++ b/engine/src/C4Script.cpp @@ -2089,7 +2089,7 @@ C4FindObject *CreateCriterionsFromPars(C4Value *pPars, C4FindObject **pFOs, C4So return pFO; } -static C4Value FnObjectCount2(C4AulContext *cthr, C4Value *pPars) +static C4Value FnObjectCount(C4AulContext *cthr, C4Value *pPars) { // Create FindObject-structure C4FindObject *pFOs[C4AUL_MAX_Par]; @@ -2105,7 +2105,7 @@ static C4Value FnObjectCount2(C4AulContext *cthr, C4Value *pPars) return C4VInt(iCnt); } -static C4Value FnFindObject2(C4AulContext *cthr, C4Value *pPars) +static C4Value FnFindObject(C4AulContext *cthr, C4Value *pPars) { // Create FindObject-structure C4FindObject *pFOs[C4AUL_MAX_Par]; @@ -2139,107 +2139,6 @@ static C4Value FnFindObjects(C4AulContext *cthr, C4Value *pPars) return C4VArray(pResult); } -static C4Value FnObjectCount(C4AulContext *cthr, C4Value *pPars) - { - // Got an array? Use the new-style function. - if(pPars->getArray()) - return FnObjectCount2(cthr, pPars); - // Get paramters - PAR(id, id); - PAR(int, x); PAR(int, y); PAR(int, wdt); PAR(int, hgt); - PAR(int, dwOCF); - PAR(string, szAction); - PAR(object, pActionTarget); - PAR(any, vContainer); - PAR(int, iOwner); - // Local call adjust coordinates - if (cthr->Obj) - if (x || y || wdt || hgt) // if not default full range - { x+=cthr->Obj->GetX(); y+=cthr->Obj->GetY(); } - // Adjust default ocf - if (dwOCF==0) dwOCF = OCF_All; - // Adjust default owner - if (iOwner==0) iOwner = ANY_OWNER; // imcomplete useless implementation - // NO_CONTAINER/ANY_CONTAINER - C4Object * pContainer = vContainer.getObj(); - if(vContainer.getInt() == NO_CONTAINER) - pContainer = reinterpret_cast(NO_CONTAINER); - if(vContainer.getInt() == ANY_CONTAINER) - pContainer = reinterpret_cast(ANY_CONTAINER); - // Find object - return C4VInt(Game.ObjectCount(id,x,y,wdt,hgt,dwOCF, - FnStringPar(szAction),pActionTarget, - cthr->Obj, // Local calls exclude self - pContainer, - iOwner)); - } - - -static C4Value FnFindObject(C4AulContext *cthr, C4Value *pPars) - { - // Got an array? Use the new-style function. - if(pPars->getArray()) - return FnFindObject2(cthr, pPars); - // Get parameters - PAR(id, id); - PAR(int, x); PAR(int, y); PAR(int, wdt); PAR(int, hgt); - PAR(int, dwOCF); - PAR(string, szAction); - PAR(object, pActionTarget); - PAR(any, vContainer); - PAR(object, pFindNext); - // Local call adjust coordinates - if (cthr->Obj) - if (x || y || wdt || hgt) // if not default full range - { x+=cthr->Obj->GetX(); y+=cthr->Obj->GetY(); } - // Adjust default ocf - if (dwOCF==0) dwOCF = OCF_All; - // NO_CONTAINER/ANY_CONTAINER - C4Object * pContainer = vContainer.getObj(); - if(vContainer.getInt() == NO_CONTAINER) - pContainer = reinterpret_cast(NO_CONTAINER); - if(vContainer.getInt() == ANY_CONTAINER) - pContainer = reinterpret_cast(ANY_CONTAINER); - // Find object - return C4Value(Game.FindObject(id,x,y,wdt,hgt,dwOCF, - FnStringPar(szAction),pActionTarget, - cthr->Obj, // Local calls exclude self - pContainer, - ANY_OWNER, - pFindNext)); - } - -static C4Object *FnFindObjectOwner(C4AulContext *cthr, - C4ID id, - long iOwner, - long x, long y, long wdt, long hgt, - long dwOCF, - C4String *szAction, C4Object *pActionTarget, - C4Object *pFindNext) - { - // invalid owner? - if (!ValidPlr(iOwner) && iOwner != NO_OWNER) return NULL; - // Local call adjust coordinates - if (cthr->Obj) - if (x || y || wdt || hgt) // if not default full range - { x+=cthr->Obj->GetX(); y+=cthr->Obj->GetY(); } - // Adjust default ocf - if (dwOCF==0) dwOCF = OCF_All; - // Find object - return Game.FindObject(id,x,y,wdt,hgt,dwOCF, - FnStringPar(szAction),pActionTarget, - cthr->Obj, // Local calls exclude self - NULL, - iOwner, - pFindNext); - } - -static bool FnMakeCrewMember(C4AulContext *cthr, C4Object *pObj, long iPlayer) - { - if (!ValidPlr(iPlayer)) return false; - return !!::Players.Get(iPlayer)->MakeCrewMember(pObj); - } - static bool FnGrabObjectInfo(C4AulContext *cthr, C4Object *pFrom, C4Object *pTo) { // local call, safety @@ -2568,20 +2467,6 @@ static bool FnScriptGo(C4AulContext *cthr, bool go) return TRUE; } -static bool FnCastPXS(C4AulContext *cthr, C4String *mat_name, long amt, long level, long tx, long ty) - { - if (cthr->Obj) { tx+=cthr->Obj->GetX(); ty+=cthr->Obj->GetY(); } - ::PXS.Cast(::MaterialMap.Get(FnStringPar(mat_name)),amt,tx,ty,level); - return TRUE; - } - -static bool FnCastObjects(C4AulContext *cthr, C4ID id, long amt, long level, long tx, long ty) - { - if (cthr->Obj) { tx+=cthr->Obj->GetX(); ty+=cthr->Obj->GetY(); } - Game.CastObjects(id,cthr->Obj,amt,level,tx,ty, cthr->Obj ? cthr->Obj->Owner : NO_OWNER, cthr->Obj ? cthr->Obj->Controller : NO_OWNER); - return TRUE; - } - static long FnMaterial(C4AulContext *cthr, C4String *mat_name) { return ::MaterialMap.Get(FnStringPar(mat_name)); @@ -3135,40 +3020,6 @@ static long FnGetClimate(C4AulContext *cthr) return ::Weather.GetClimate(); } -static bool FnSetSkyFade(C4AulContext *cthr, long iFromRed, long iFromGreen, long iFromBlue, long iToRed, long iToGreen, long iToBlue) - { - // newgfx: set modulation - DWORD dwBack,dwMod=GetClrModulation(::Landscape.Sky.FadeClr1, C4RGB(iFromRed, iFromGreen, iFromBlue), dwBack); - ::Landscape.Sky.SetModulation(dwMod,dwBack); - return TRUE; - } - -static bool FnSetSkyColor(C4AulContext *cthr, long iIndex, long iRed, long iGreen, long iBlue) - { - // set first index only - if (iIndex) return TRUE; - // get color difference - DWORD dwBack,dwMod=GetClrModulation(::Landscape.Sky.FadeClr1, C4RGB(iRed, iGreen, iBlue), dwBack); - ::Landscape.Sky.SetModulation(dwMod,dwBack); - // success - return TRUE; - } - -static long FnGetSkyColor(C4AulContext *cthr, long iIndex, long iRGB) - { - // relict from OldGfx - if (iIndex || !Inside(iRGB,0,2)) return 0; - DWORD dwClr=::Landscape.Sky.FadeClr1; - BltAlpha(dwClr, ::Landscape.Sky.FadeClr2 | ((iIndex*0xff/19)<<24)); - switch (iRGB) - { - case 0: return (dwClr>>16)&0xff; - case 1: return (dwClr>>8)&0xff; - case 2: return dwClr&0xff; - default: return 0; - } - } - static long FnLandscapeWidth(C4AulContext *cthr) { return GBackWdt; @@ -3256,78 +3107,16 @@ static long FnSetTransferZone(C4AulContext *cthr, long iX, long iY, long iWdt, l return Game.TransferZones.Set(iX,iY,iWdt,iHgt,pObj); } -static bool FnNot(C4AulContext *cthr, bool fCondition) - { - return !fCondition; - } - -static bool FnOr(C4AulContext *cthr, bool fCon1, bool fCon2, bool fCon3, bool fCon4, bool fCon5) - { - return (fCon1 || fCon2 || fCon3 || fCon4 || fCon5); - } - -static bool FnAnd(C4AulContext *cthr, bool fCon1, bool fCon2) - { - return (fCon1 && fCon2); - } - -static long FnBitAnd(C4AulContext *cthr, long iVal1, long iVal2) - { - return (iVal1 & iVal2); - } - static C4Value FnEqual_C4V(C4AulContext *cthr, C4Value * Val1, C4Value * Val2) { return C4VBool(Val1->GetData()==Val2->GetData()); } -static long FnLessThan(C4AulContext *cthr, long iVal1, long iVal2) - { - return (iVal1iVal2); - } - -static long FnSum(C4AulContext *cthr, long iVal1, long iVal2, long iVal3, long iVal4) - { - return (iVal1+iVal2+iVal3+iVal4); - } - -static long FnSub(C4AulContext *cthr, long iVal1, long iVal2, long iVal3, long iVal4) - { - return (iVal1-iVal2-iVal3-iVal4); - } - static long FnAbs(C4AulContext *cthr, long iVal) { return Abs(iVal); } -static long FnMul(C4AulContext *cthr, long iVal1, long iVal2) - { - return (iVal1*iVal2); - } - -static long FnDiv(C4AulContext *cthr, long iVal1, long iVal2) - { - if (!iVal2) return 0; - return (iVal1/iVal2); - } - -static long FnMod(C4AulContext *cthr, long iVal1, long iVal2) - { - if (!iVal2) return 0; - return (iVal1%iVal2); - } - -static long FnPow(C4AulContext *cthr, long iVal1, long iVal2) - { - return Pow(iVal1, iVal2); - } - static long FnSin(C4AulContext *cthr, long iAngle, long iRadius, long iPrec) { if(!iPrec) iPrec = 1; @@ -3453,12 +3242,6 @@ static bool FnInside(C4AulContext *cthr, long iVal, long iRange1, long iRange2) return Inside(iVal,iRange1,iRange2); } -static long FnSEqual(C4AulContext *cthr, C4String *szString1, C4String *szString2) - { - if(szString1 == szString2) return TRUE; - return SEqual(FnStringPar(szString1),FnStringPar(szString2)); - } - static long FnRandom(C4AulContext *cthr, long iRange) { return Random(iRange); @@ -4598,30 +4381,6 @@ static long FnGetDefBottom(C4AulContext* cthr, C4Object *pObj) return pObj->GetY()+pObj->Def->Shape.y+pObj->Def->Shape.Hgt; } -static bool FnSetMaterialColor(C4AulContext* cthr, long iMat, long iClr1R, long iClr1G, long iClr1B, long iClr2R, long iClr2G, long iClr2B, long iClr3R, long iClr3G, long iClr3B) - { - // get mat - if (!MatValid(iMat)) return FALSE; - C4Material *pMat = &::MaterialMap.Map[iMat]; - // newgfx: emulate by landscape modulation - enlightment not allowed... - DWORD dwBack, dwMod=GetClrModulation(C4RGB(pMat->Color[0], pMat->Color[1], pMat->Color[2]), C4RGB(iClr1R, iClr1G, iClr1B), dwBack); - dwMod&=0xffffff; - if (!dwMod) dwMod=1; - if (dwMod==0xffffff) dwMod=0; - ::Landscape.SetModulation(dwMod); - // done - return TRUE; - } - -static long FnGetMaterialColor(C4AulContext* cthr, long iMat, long iNum, long iChannel) - { - // get mat - if (!MatValid(iMat)) return FALSE; - C4Material *pMat = &::MaterialMap.Map[iMat]; - // get color - return pMat->Color[iNum*3+iChannel]; - } - static C4String *FnMaterialName(C4AulContext* cthr, long iMat) { // mat valid? @@ -5222,8 +4981,6 @@ static bool FnClearParticles(C4AulContext *cthr, C4String *szName, C4Object *pOb return TRUE; } -static bool FnIsNewgfx(C4AulContext*) { return TRUE; } - #define SkyPar_KEEP -163764 static bool FnSetSkyParallax(C4AulContext* ctx, long iMode, long iParX, long iParY, long iXDir, long iYDir, long iX, long iY) @@ -6477,29 +6234,16 @@ void InitFunctionMap(C4AulScriptEngine *pEngine) for (C4ScriptFnDef *pDef = &C4ScriptFnMap[0]; pDef->Identifier; pDef++) pEngine->AddFunc(pDef->Identifier, pDef); // AddFunc(pEngine, "SetSaturation", FnSetSaturation); //public: 0 - AddFunc(pEngine, "Or", FnOr, false); - AddFunc(pEngine, "Not", FnNot, false); - AddFunc(pEngine, "And", FnAnd, false); - AddFunc(pEngine, "BitAnd", FnBitAnd, false); - AddFunc(pEngine, "Sum", FnSum, false); - AddFunc(pEngine, "Sub", FnSub, false); AddFunc(pEngine, "Abs", FnAbs); AddFunc(pEngine, "Min", FnMin); AddFunc(pEngine, "Max", FnMax); - AddFunc(pEngine, "Mul", FnMul, false); - AddFunc(pEngine, "Div", FnDiv, false); - AddFunc(pEngine, "Mod", FnMod, false); - AddFunc(pEngine, "Pow", FnPow, false); AddFunc(pEngine, "Sin", FnSin); AddFunc(pEngine, "Cos", FnCos); AddFunc(pEngine, "Sqrt", FnSqrt); AddFunc(pEngine, "ArcSin", FnArcSin); AddFunc(pEngine, "ArcCos", FnArcCos); - AddFunc(pEngine, "LessThan", FnLessThan, false); - AddFunc(pEngine, "GreaterThan", FnGreaterThan, false); AddFunc(pEngine, "BoundBy", FnBoundBy); AddFunc(pEngine, "Inside", FnInside); - AddFunc(pEngine, "SEqual", FnSEqual, false); AddFunc(pEngine, "Random", FnRandom); AddFunc(pEngine, "AsyncRandom", FnAsyncRandom); AddFunc(pEngine, "DoCon", FnDoCon); @@ -6597,7 +6341,6 @@ void InitFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "MusicLevel", FnMusicLevel); AddFunc(pEngine, "SetPlayList", FnSetPlayList); AddFunc(pEngine, "SoundLevel", FnSoundLevel, false); - AddFunc(pEngine, "FindObjectOwner", FnFindObjectOwner); AddFunc(pEngine, "RemoveObject", FnRemoveObject); AddFunc(pEngine, "GetActionTarget", FnGetActionTarget); AddFunc(pEngine, "SetActionTargets", FnSetActionTargets); @@ -6621,9 +6364,6 @@ void InitFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "SetPlrShowCommand", FnSetPlrShowCommand); AddFunc(pEngine, "GetWind", FnGetWind); AddFunc(pEngine, "SetWind", FnSetWind); - AddFunc(pEngine, "SetSkyFade", FnSetSkyFade); - AddFunc(pEngine, "SetSkyColor", FnSetSkyColor); - AddFunc(pEngine, "GetSkyColor", FnGetSkyColor); AddFunc(pEngine, "GetTemperature", FnGetTemperature); AddFunc(pEngine, "SetTemperature", FnSetTemperature); AddFunc(pEngine, "LaunchLightning", FnLaunchLightning); @@ -6634,8 +6374,6 @@ void InitFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "DigFree", FnDigFree); AddFunc(pEngine, "FreeRect", FnFreeRect); AddFunc(pEngine, "DigFreeRect", FnDigFreeRect); - AddFunc(pEngine, "CastPXS", FnCastPXS); - AddFunc(pEngine, "CastObjects", FnCastObjects); AddFunc(pEngine, "Hostile", FnHostile); AddFunc(pEngine, "SetHostility", FnSetHostility); AddFunc(pEngine, "PlaceVegetation", FnPlaceVegetation); @@ -6736,8 +6474,6 @@ void InitFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "ResortObjects", FnResortObjects); AddFunc(pEngine, "ResortObject", FnResortObject); AddFunc(pEngine, "GetDefBottom", FnGetDefBottom); - AddFunc(pEngine, "SetMaterialColor", FnSetMaterialColor); - AddFunc(pEngine, "GetMaterialColor", FnGetMaterialColor); AddFunc(pEngine, "MaterialName", FnMaterialName); AddFunc(pEngine, "SetMenuSize", FnSetMenuSize); AddFunc(pEngine, "GetNeededMatStr", FnGetNeededMatStr); @@ -6752,7 +6488,6 @@ void InitFunctionMap(C4AulScriptEngine *pEngine) AddFunc(pEngine, "CastBackParticles", FnCastBackParticles); AddFunc(pEngine, "PushParticles", FnPushParticles); AddFunc(pEngine, "ClearParticles", FnClearParticles); - AddFunc(pEngine, "IsNewgfx", FnIsNewgfx, false); AddFunc(pEngine, "SetSkyAdjust", FnSetSkyAdjust); AddFunc(pEngine, "SetMatAdjust", FnSetMatAdjust); AddFunc(pEngine, "GetSkyAdjust", FnGetSkyAdjust); @@ -7206,11 +6941,9 @@ C4ScriptFnDef C4ScriptFnMap[]={ //{ "FindConstructionSite", 0 ,C4V_Bool ,{ C4V_C4ID ,C4V_Int ,C4V_Int ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,MkFnC4V FnFindConstructionSite , 0 }, { "PathFree2", 1 ,C4V_Bool ,{ C4V_pC4Value,C4V_pC4Value,C4V_Int ,C4V_Int ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,MkFnC4V FnPathFree2_C4V , 0 }, { "DeathAnnounce", 1 ,C4V_Bool ,{ C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,0 , FnDeathAnnounce }, - { "FindObject", 1 ,C4V_C4Object ,{ C4V_C4ID ,C4V_Int ,C4V_Int ,C4V_Int ,C4V_Int ,C4V_Int ,C4V_String ,C4V_C4Object,C4V_Any ,C4V_C4Object} ,0 , FnFindObject }, - { "FindObject2", 1 ,C4V_C4Object ,{ C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array},0 , FnFindObject2 }, + { "FindObject", 1 ,C4V_C4Object ,{ C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array},0 , FnFindObject }, { "FindObjects", 1 ,C4V_Array ,{ C4V_Array ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,0 , FnFindObjects }, - { "ObjectCount", 1 ,C4V_Int ,{ C4V_C4ID ,C4V_Int ,C4V_Int ,C4V_Int ,C4V_Int ,C4V_Int ,C4V_String ,C4V_C4Object,C4V_Any ,C4V_Int},0 , FnObjectCount }, - { "ObjectCount2", 1 ,C4V_Int ,{ C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array},0 , FnObjectCount2 }, + { "ObjectCount", 1 ,C4V_Int ,{ C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array ,C4V_Array},0 , FnObjectCount }, { "ObjectCall", 1 ,C4V_Any ,{ C4V_C4Object,C4V_String,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,MkFnC4V FnObjectCall_C4V , 0 }, { "ProtectedCall", 1 ,C4V_Any ,{ C4V_C4Object,C4V_String,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,MkFnC4V FnProtectedCall_C4V , 0 }, { "PrivateCall", 1 ,C4V_Any ,{ C4V_C4Object,C4V_String,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any ,C4V_Any} ,MkFnC4V FnPrivateCall_C4V , 0 }, diff --git a/planet/Objects.c4d/Clonk.c4d/Script.c b/planet/Objects.c4d/Clonk.c4d/Script.c index c6684b449..11492e231 100644 --- a/planet/Objects.c4d/Clonk.c4d/Script.c +++ b/planet/Objects.c4d/Clonk.c4d/Script.c @@ -57,17 +57,17 @@ public func AtTreeToChop() { return !Contained() && FindTree() && GetPhysical("C public func FindConstructionSite() { - return FindObject2(Find_AtRect(-1,-16,2,32), Find_OCF(OCF_Construct), Find_Layer(GetObjectLayer())); + return FindObject(Find_AtRect(-1,-16,2,32), Find_OCF(OCF_Construct), Find_Layer(GetObjectLayer())); } public func FindEnergySite() { - return FindObject2(Find_AtPoint(), Find_OCF(OCF_PowerConsumer), Find_NoContainer(), Find_Layer(GetObjectLayer()), Find_Func("NeedsEnergy")); + return FindObject(Find_AtPoint(), Find_OCF(OCF_PowerConsumer), Find_NoContainer(), Find_Layer(GetObjectLayer()), Find_Func("NeedsEnergy")); } public func FindTree() { - return FindObject2(Find_AtPoint(), Find_OCF(OCF_Chop), Find_Layer(GetObjectLayer())); + return FindObject(Find_AtPoint(), Find_OCF(OCF_Chop), Find_Layer(GetObjectLayer())); } /* Steuerung */ @@ -748,7 +748,7 @@ public func FxIntNotAvailableTimer(target, number) public func GetProducerOf(def) { - return FindObject2(Find_InRect(-500,-250,1000,500), Find_Func("IsProducerOf", this, def), Sort_Distance()); + return FindObject(Find_InRect(-500,-250,1000,500), Find_Func("IsProducerOf", this, def), Sort_Distance()); } /* Trinken */ diff --git a/planet/System.c4g/C4.c b/planet/System.c4g/C4.c index ee5f0bba2..58041a16d 100644 --- a/planet/System.c4g/C4.c +++ b/planet/System.c4g/C4.c @@ -30,14 +30,6 @@ global func GetActMapVal(string strEntry, string strAction, id idDef, int iEntry return GetProperty(strEntry, GetProperty(strAction, idDef)); } -global func CastC4ID(x) { return x; } - -// Abgelöst durch SetPosition -global func ForcePosition(object obj, int x, int y) { return SetPosition(x, y, obj); } - -// Abgelöst durch RemoveObject -global func AssignRemoval(object obj) { return RemoveObject(obj); } - // Für Szenarien ohne Objects.c4d... global func EmptyBarrelID() { return BARL; } @@ -98,26 +90,6 @@ global func ShowNeededMaterial(object pOfObject) return 1; } -global func SetOnlyVisibleToOwner(bool fVisible, object pObj) -{ - var oldVal=GetOnlyVisibleToOwner(pObj); - if (fVisible) - SetVisibility(VIS_Owner | VIS_God, pObj); - else - SetVisibility(VIS_All, pObj); - return oldVal; -} - -global func GetOnlyVisibleToOwner(object pObj) -{ - return (GetVisibility(pObj) == VIS_Owner | VIS_God); -} - -global func MessageBoard(string msg, par0, par1, par2, par3, par4, par5, par6, par7, par8) -{ - return Log(msg, par0, par1, par2, par3, par4, par5, par6, par7, par8); -} - // Fasskonfiguration // Kann z.B. durch eine Spielregel überladen werden (Shamino) // Bit 0 (1): Wasserfässer sind auch im Verkauf 8 Clunker wert diff --git a/planet/System.c4g/Commits.c b/planet/System.c4g/Commits.c index 23e3277b3..89c527fdd 100644 --- a/planet/System.c4g/Commits.c +++ b/planet/System.c4g/Commits.c @@ -3,20 +3,10 @@ /*-- flgr --*/ // Liefert das Offset zur gewünschten Landscape-X-Position zurück -global func AbsX(int x) { - return x - GetX(); -} +global func AbsX(int x) { return x - GetX(); } // Liefert das Offset zur gewünschten Landscape-Y-Position zurück -global func AbsY(int y) { - return y - GetY(); -} - -// Liefert 1 zurück wenn keine der angegeben Konditionen wahr ist -// sollte nicht mehr benutzt werden! -global func Nor(bool con1, bool con2, bool con3, bool con4, bool con5) { - return !(con1 || con2 || con3 || con4 || con5); -} +global func AbsY(int y) { return y - GetY(); } // Erzeugt ein Objekt mit der angegeben ID in iMaterial. iRetries ist die Anzahl der Versuche. global func PlaceInMaterial(id def, int material, int _retries) { // C4ID id, int iMaterial, [int iRetries] @@ -116,145 +106,14 @@ global func Concat() { /*-- Joern --*/ -//Objekt hüpft mit der angegebenen Kraft. -global func Bounce(int iPower) -{ - if(!GBackSolid(0,-2)) SetYDir(-Random(iPower)); - if(GBackSolid(0,-2)) SetYDir(Random(10)); - if(GBackSolid(-2,0)) SetXDir(-GetXDir()); - if(GBackSolid(2,0)) SetXDir(-GetXDir()); - return 1; -} - //Fügt zum Konto des genannten Spielers iValue Gold hinzu global func DoWealth(int iPlayer, int iValue) { return SetWealth(iPlayer, iValue + GetWealth(iPlayer)); } - -//Erstellt für iPlayer ein Crewmember mit der genannten ID zufällig an einer begehbaren Stelle (an Land, nicht im Wasser). -global func RndMakeCrewMember(int iPlayer, id ID) -{ - var anim=PlaceAnimal(WIPF),crw; - MakeCrewMember(crw=CreateObject( ID,GetX(anim),GetY(anim),iPlayer ), iPlayer); - RemoveObject(anim); - return crw; -} -//Objekt Explodiert mehrmals. -global func SemiExplode(int iLevel, int incidence) -{ - for(var i = 0; i < incidence; i++) - Explode(iLevel,CreateObject(ROCK, 0, 0, GetOwner())); - RemoveObject(); - return 1; -} - /*-- Tyron --*/ -// Wandelt einen DWORD in RGB werte um -// select 0: a, select 1: R, select 2: G, select 3: B -global func GetRGBaValue(val,sel) { - return (val>>((3-sel)*8)&255); -} - -// Abwärtskompatibilität -global func GetRGBValue(val,sel) { - return (GetRGBaValue(val,sel)); -} - -// Hiermit lässt sich eine Farbe eines RGB Wertes setzen -// select 0: a, select 1: R, select 2: G, select 3: B -global func SetRGBaValue(int val, int newval, int sel) { - // Alte Farbe 'löschen' - val = val&~(255<<((3-sel)*8)); - // Neue hinzufügen - return (val|newval<<((3-sel)*8)); -} - -// Diese Funktion verändert die angegeben Farbe eines RGB Wertes -// select 0: a, select 1: R, select 2: G, select 3: B -global func DoRGBaValue(int val, int chng, int sel) { - return (val + (chng<<((3-sel)*8))); -} - -global func SplitRGBaValue(rgb, &red, &green, &blue, &alpha) { - red=GetRGBaValue(rgb,1); - green=GetRGBaValue(rgb,2); - blue=GetRGBaValue(rgb,3); - alpha=GetRGBaValue(rgb,0); -} - -global func HSL2RGB(hsl) { - var hue=GetRGBaValue(hsl,1), sat=GetRGBaValue(hsl,2),lightness=GetRGBaValue(hsl,3); - var red, green, blue; - var var1, var2; - - //Log("hue: %d sat: %d lightness: %d",hue,sat, lightness); - - if(sat==0) { - red = green = blue = lightness; - } else { - if(lightness<128) var2 = (lightness*(255 + sat))/255; - else var2 = lightness+sat-lightness*sat/255; - - var1 = 2*lightness-var2; - - red = Hue_2_RGB( var1, var2, hue+85); - green= Hue_2_RGB( var1, var2, hue ); - blue = Hue_2_RGB( var1, var2, hue-85); - } - - //Log("red: %d green: %d blue: %d",red, green, blue); - - return RGB(red, green, blue); -} - -global func Hue_2_RGB(var1, var2, hue) { - if(hue<0) hue+=255; - if(hue>255) hue-=255; - if(6*hue<255) return ( var1 + ((var2 - var1) * 6 * hue)/255); - if(2*hue<255) return ( var2 ); - if(3*hue<510) return ( var1 + ((var2 - var1)*( 510 / 3 - hue )*6)/255); - return (var1); -} - -global func RGB2HSL(rgb) { - var red=GetRGBaValue(rgb,1), green=GetRGBaValue(rgb,2),blue=GetRGBaValue(rgb,3); - var min_val = Min(red, Min(green, blue)), max_val = Max(red, Max(green, blue)); - var diff_val = max_val - min_val; - var lightness = (max_val + min_val)/2; - var hue, sat, diff_red, diff_green, diff_blue; - - //Log("red: %d green: %d blue: %d",red, green, blue); - //Log("max_val: %d, min_val: %d",max_val, min_val); - - if (diff_val==0) { - hue=0; - sat=0; - } else { - //Log("%d/%d",255*diff_val,510-(max_val+min_val)); - if(lightness<128) sat=(255*diff_val)/(max_val+min_val); - else sat=(255*diff_val)/(510-(max_val+min_val)); - - diff_red = ((255*(max_val-red ))/6 + (255*diff_val)/2)/diff_val; - diff_green= ((255*(max_val-green))/6 + (255*diff_val)/2)/diff_val; - diff_blue = ((255*(max_val-blue ))/6 + (255*diff_val)/2)/diff_val; - - if (red ==max_val) hue=diff_blue-diff_green; - else if (green==max_val) hue=255/3+diff_red-diff_blue; - else if (blue ==max_val) hue=510/3+diff_green-diff_red; - - if (hue<0) hue+=255; - if (hue>255) hue-=255; - } - - //Log("hue: %d",hue); - //Log("sat: %d",sat); - //Log("lightness: %d",lightness); - - return (RGB(hue,sat,lightness)); -} // Prüft ob die angegebene Definition vorhanden ist global func FindDefinition(id idDef) { @@ -343,40 +202,32 @@ global func LaunchVolcano(int x, int y, int strength, string mat) { return 1; } -// Gleich wie CastObjects nur dass man hier Schleuderwinkel verändern kann -global func CastObjectsX(iddef,am,lev,x,y,angs,angw,callback) { - var ang, obj, xdir; - for(var i=0;iSetR(Random(360)); + obj->SetXDir(xdir); + obj->SetYDir(Sin(ang,lev) + RandomX(-3,3)); + obj->SetRDir((10+Random(21))*xdir/Abs(xdir)); } } - -// Gleich wie CastPXS nur dass man hier Schleuderwinkel verändern kann -global func CastPXSX(string mat,int am,int lev,int x,int y,int angs,int angw) { - var ang; + +global func CastPXS(string mat,int am,int lev,int x,int y,int angs,int angw) { + if(!angw) angw = 180; for(var i=0;i