Inhaltsverzeichnis

Grafikeffekte

Grafikeffekte sind, teilweise von Sounds begleitete, Animationen, die auf dem Bildschirm dargestellt werden. Die Effekte selber beeinflussen das Spielgeschehen nicht, sie werden nur für den Spieler angezeigt, haben aber keine Auswirkung auf die Spielwelt.
Mit diesen Effekten kann man Zwischensequenzen oder anderen Aktionen im Spiel noch mehr Effekt verleihen :-)

Anwendung

Möglich sind beispielsweise Explosionen, Staubwolken, Blitze oder Feuer.
Einige Effekte halten nur wenige Sekunden, andere hingegen bis sie beendet werden.

Diese Zeile erzeugt eine einfache Explosion an X=500 und Y=700. Die SpielerID ist 1.

Logic.CreateEffect( GGL_Effects.FXExplosion, 500, 700, 1 );

Die SpielerID ist meisstens egal. In einigen Fällen wird jedoch dem Effekt darüber eine Farbe zugeordnet, wie in diesem Beispiel:

local pos = GetPosition( "roter_strahl" );
Logic.CreateEffect( GGL_Effects.FXDie, pos.X, pos.Y, 2 );

Hier wird an der Position „roter_strahl“ eben jener Effekt erzeugt, der normalerweise angezeigt wird, wenn eine Einheit von Spieler 2 stirbt.

Diese Zeile erzeugt ein Feuer. Es bleibt bestehen, bis es beendet wird. Daher muss man sich, wie beispielsweise bei Jobs oder Tributen auch, die ID merken.

effectID = Logic.CreateEffect( GGL_Effects.FXFire, 1000, 1000, 2 );

Später kann man dann den Effekt (ruckartig) mit dieser Zeile wieder entfernen:

Logic.DestroyEffect( effectID );

Achtung: Nicht alle Effekte sind für die Verwendung durch Scripte vorgesehen. Somit verursachen einige einen Absturz des Spiels.

Eine weitere Liste findet ihr in der Referenz.

Grafische Übersicht

Die Sichtbaren Effekte sind hier grafisch dargestellt. Es handelt sich um Animationen, daher sollen diese Screenshots nur eine grobe Übersicht geben:

GGL_Effects.FXLightning
Sonderfall: Bildschirm flackert
schwarz auf

Auflistung aller Effekte

Hier als Code in einem Table mit String wie ich die Effekte grafisch gezogen habe per Screenshot.
Im Code ausgeklammerte Effekte führen zum Absturz des Spiels!

TableGGL_Effects = {	{GGL_Effects.FXArrow	,'FXArrow'},
			--{GGL_Effects.FXBalistaTowerArrow	,'FXBalistaTowerArrow'},
			{GGL_Effects.FXBuildingSmoke	,'FXBuildingSmoke'},
			{GGL_Effects.FXBuildingSmokeLarge	,'FXBuildingSmokeLarge'},
			{GGL_Effects.FXBuildingSmokeMedium	,'FXBuildingSmokeMedium'},
			{GGL_Effects.FXBulletRifleman	,'FXBulletRifleman'},
			--{GGL_Effects.FXCannonBall	,'FXCannonBall'},
			--{GGL_Effects.FXCannonBallShrapnel	,'FXCannonBallShrapnel'},
			{GGL_Effects.FXCannonFire	,'FXCannonFire'},
			--{GGL_Effects.FXCannonTowerBall	,'FXCannonTowerBall'},
			{GGL_Effects.FXCavalryArrow	,'FXCavalryArrow'},
			{GGL_Effects.FXChopTree	,'FXChopTree'},
			{GGL_Effects.FXChopTreeDead	,'FXChopTreeDead'},
			{GGL_Effects.FXChopTreeInWinter	,'FXChopTreeInWinter'},
			{GGL_Effects.FXCrossBowArrow	,'FXCrossBowArrow'},
			{GGL_Effects.FXCrossBowCavalryArrow	,'FXCrossBowCavalryArrow'},
			{GGL_Effects.FXCrushBuilding	,'FXCrushBuilding'},
			{GGL_Effects.FXDarioFear	,'FXDarioFear'},
			{GGL_Effects.FXDestroyTree	,'FXDestroyTree'},
			{GGL_Effects.FXDie	,'FXDie'},
			{GGL_Effects.FXDieHero	,'FXDieHero'},
			{GGL_Effects.FXExplosion	,'FXExplosion'},
			{GGL_Effects.FXExplosionPilgrim	,'FXExplosionPilgrim'},
			{GGL_Effects.FXExplosionShrapnel	,'FXExplosionShrapnel'},
			{GGL_Effects.FXExtractStone	,'FXExtractStone'},
			{GGL_Effects.FXFire	,'FXFire'},
			{GGL_Effects.FXFireLo	,'FXFireLo'},
			{GGL_Effects.FXFireMedium	,'FXFireMedium'},
			{GGL_Effects.FXFireSmall	,'FXFireSmall'},
			{GGL_Effects.FXKalaArrow	,'FXKalaArrow'},
			{GGL_Effects.FXKalaPoison	,'FXKalaPoison'},
			{GGL_Effects.FXKerberosFear	,'FXKerberosFear'},
			{GGL_Effects.FXLightning	,'FXLightning'},
			{GGL_Effects.FXMaryDemoralize	,'FXMaryDemoralize'},
			{GGL_Effects.FXMaryPoison	,'FXMaryPoison'},
			{GGL_Effects.FXNephilimFlowerDestroy	,'FXNephilimFlowerDestroy'},
			{GGL_Effects.FXRain	,'FXRain'},
			{GGL_Effects.FXSalimHeal	,'FXSalimHeal'},
			--{GGL_Effects.FXShotRifleman	,'FXShotRifleman'},
			{GGL_Effects.FXSnow	,'FXSnow'},
			{GGL_Effects.FXTemplarAltarEffect	,'FXTemplarAltarEffect'},
			{GGL_Effects.FXTerrainPointer	,'FXTerrainPointer'},
			{GGL_Effects.FXWeathermachineFakeFX	,'FXWeathermachineFakeFX'},
			{GGL_Effects.FXYukiFireworksFear	,'FXYukiFireworksFear'},
			{GGL_Effects.FXYukiFireworksJoy	,'FXYukiFireworksJoy'},
			{GGL_Effects.FXYukiShuriken	,'FXYukiShuriken'}
			}

Comfort

Wer möchte, kann sich das Erstellen von Effekten erleichtern. Dazu wird dieser Code benötigt:

function CreateEffect( _player, _type, _position )
	assert(type(_player) == "number" and _player >= 1 and _player <= 8 and type(_type) == "number", "fatal error: wrong input: _player or _type (function CreateEffect())");
	assert((type(_position) == "table" and type(_position.X) == "number" and type(_position.Y) == "number") or type(_position) == "number" or type(_position) == "string", "fatal error: wrong input: _position (function CreateEffect())");
 
	if type(_position) == "table" then
		assert(_position.X >= 0 and _position.Y >= 0 and _position.X < Logic.WorldGetSize() and _position.Y < Logic.WorldGetSize(), "error: wrong position-statement (function CreateEffect())" );
		local effect = Logic.CreateEffect(_type, _position.X, _position.Y, _player);
		return effect;
	elseif type(_position) == "string" then
		local id = GetEntityId(_position);
		assert(IsExisting(id), "error: entity is dead or not existing (function CreateEffect())");
		local position = GetPosition(id);
		local effect = Logic.CreateEffect(_type, position.X, position.Y, _player);
		return effect;
	else
		assert(IsExisting(_position), "error: entity is dead or not existing (function CreateEffect())");
		local position = GetPosition(_position);
		local effect = Logic.CreateEffect(_type, position.X, position.Y, _player);
		return effect;
	end
end
function DestroyEffect( _effect )
	assert(type(_effect) == "number", "fatal error: wrong input: _effect (function DestroyEffect()");
	Logic.DestroyEffect( _effect );
end

Hier finden viele Fehler-Prüfungen statt.

Außerdem übernehmen die Funktionen viele Dinge für einen. So lautet der oben genannte Aufruf

local pos = GetPosition( "roter_strahl" );
Logic.CreateEffect( GGL_Effects.FXDie, pos.X, pos.Y, 2 );

jetzt nur noch

CreateEffect(2, GGL_Effects.FXDie, "roter_strahl");



Zur Tutorial-Übersicht