[Tutorial] Effekte (FX) erstellen

Private Grob
Habe jetzt unter vielen FX Anleitungen die erste funktionierende gefunden. Funktioniert mit meiner deutschen Version. Woher das Tutorial kommt kann ich leider nicht mehr sagen, habe mir so viele gesaugt und den Überblick verloren.....

1. Erstelle eine "mp_yourmapname_fx.gsc" mit diesem Inhalt (x y und z euren Koordinaten anpassen):



Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
main() {
	level._effect["fx_sand_blowing_lg_w"] = loadfx("env/dirt/fx_sand_blowing_lg_w");

	createFX("oneshotfx", (x, y, z), (270, 0, 0), level._effect["fx_sand_blowing_lg_w"], 0.1);
}

createFX(type, origin, angles, FXid, delay) {
	FX_ent = spawnstruct();
	FX_ent.v["origin"] = origin;
	FX_ent.v["angles"] = angles;
	FX_ent.v["up"] = anglestoup(FX_ent.v["angles"]);
	FX_ent.v["forward"] = anglestoforward(FX_ent.v["angles"]);
	FX_ent.v["FXid"] = FXid;
	FX_ent.v["delay"] = delay;
	FX_ent.v["type"] = type;
	if (FX_ent.v["type"] == "loopfx") {
		FX_ent thread loopfxthread();
	}
	if (FX_ent.v["type"] == "oneshotfx") {
		FX_ent thread oneshotfxthread();
	}
}

loopfxthread() {
	PlayLoopedFX(self.v["FXid"], self.v["delay"], self.v["origin"]);
}

oneshotfxthread() {
	self.looper = spawnFx(self.v["FXid"], self.v["origin"]);
	triggerFx(self.looper, self.v["delay"]);
}





Speichern unter (Meine Pfade):
D:\Programme\Activision\Call of Duty - World at War\raw\maps\mp


2. Update "zone_source" mit diesem Inhalt (Pfad bei mir D:\Programme\Activision\Call of Duty - World at War\zone_source):

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
rawfile,maps/mp/mp_yourmapname_fx.gsc
fx,env/dirt/fx_sand_blowing_lg_w




3. Update "mp_yourmapname.gsc" (Pfad bei mir D:\Programme\Activision\Call of Duty - World at War\raw\maps\mp) ÜBER(!!!) dem Eintrag (maps/mp/_load::main();) mit:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
maps\mp\mp_yourmapname_fx::main();




Was soll ich sagen, bei mir funktioniert es. Es ist ein Sandsturm zu sehen. Werde mal weitere Effekte testen.

Ich hoffe das hilft euch auch weiter!


Grüße
Private Grob
Private Grob
Und weiter geht es. Habe den Sandsturm mit 2 Koordinaten getestet. Funktioniert! Dann habe ich noch zusätzlich einen Feuer Effekt getestet. Funktioniert auch!

Hier das Bild, der Sandsturm links ist schwer zu erkennen, das Feuer rechts dürfte keine Nachfrage ergeben.....




Hier der Code der "mp_yourmapname_fx.gsc" (bei mir unter "D:\Programme\Activision\Call of Duty - World at War\raw\maps\mp") (x,y,z) wieder anpassen):

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
main() {
	level._effect["fx_sand_blowing_lg_w"] = loadfx("env/dirt/fx_sand_blowing_lg_w");
	createFX("oneshotfx", (x,y,z), (270, 0, 0), level._effect["fx_sand_blowing_lg_w"], 0.1);

	level._effect["fx_sand_blowing_lg_w"] = loadfx("env/dirt/fx_sand_blowing_lg_w");
	createFX("oneshotfx", (x,y,z), (270, 0, 0), level._effect["fx_sand_blowing_lg_w"], 0.1);

	level._effect["fx_fire_oil_lg"] = loadfx("env/fire/fx_fire_oil_lg");
	createFX("oneshotfx", (x,y,z), (270, 0, 0), level._effect["fx_fire_oil_lg"], 0.1);

}

createFX(type, origin, angles, FXid, delay) {
	FX_ent = spawnstruct();
	FX_ent.v["origin"] = origin;
	FX_ent.v["angles"] = angles;
	FX_ent.v["up"] = anglestoup(FX_ent.v["angles"]);
	FX_ent.v["forward"] = anglestoforward(FX_ent.v["angles"]);
	FX_ent.v["FXid"] = FXid;
	FX_ent.v["delay"] = delay;
	FX_ent.v["type"] = type;
	if (FX_ent.v["type"] == "loopfx") {
		FX_ent thread loopfxthread();
	}
	if (FX_ent.v["type"] == "oneshotfx") {
		FX_ent thread oneshotfxthread();
	}
}

loopfxthread() {
	PlayLoopedFX(self.v["FXid"], self.v["delay"], self.v["origin"]);
}

oneshotfxthread() {
	self.looper = spawnFx(self.v["FXid"], self.v["origin"]);
	triggerFx(self.looper, self.v["delay"]);
}

 






Grüße
Private Grob
BadMan
Dank dir kanns betätigen läuft.
Ich nutze die englische Version, das mit den script_strukt hatte nicht gefunst das hier schon.

@Private Grob
Hast du das auch schon mal mit Sound probiert? Bei mir will das noch nicht, habe aber auch keine Ahnung wieso. Fehler kommen nicht habe es bislang auch nur mit Sounds aus dem Spiel versucht.

Hier mal das Skript

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
main() 
{

	level._effect["fx_fire_oil_lg"] = loadfx("env/fire/fx_fire_oil_lg");


	
	createFX("oneshotfx", (x, y, z), (270, 0, 0), level._effect["fx_fire_oil_lg"], 0.1, "glass_pane_break");

}

createFX(type, origin, angles, FXid, delay, soundalias) {
	FX_ent = spawnstruct();
	FX_ent.v["origin"] = origin;
	FX_ent.v["angles"] = angles;
	FX_ent.v["up"] = anglestoup(FX_ent.v["angles"]);
	FX_ent.v["forward"] = anglestoforward(FX_ent.v["angles"]);
	FX_ent.v["FXid"] = FXid;
	FX_ent.v["delay"] = delay;
	FX_ent.v["type"] = type;
	if (FX_ent.v["type"] == "loopfx") {
		FX_ent thread loopfxthread();
	}
	if (FX_ent.v["type"] == "oneshotfx") {
		FX_ent thread oneshotfxthread();
	}
	if ( isdefined( soundalias ) )
	{
		FX_ent.v[ "soundalias" ] = soundalias;
	}
}

loopfxthread() {
	PlayLoopedFX(self.v["FXid"], self.v["delay"], self.v["origin"]);
}

oneshotfxthread() {
	self.looper = spawnFx(self.v["FXid"], self.v["origin"]);
	triggerFx(self.looper, self.v["delay"]);
}





Da ist jetzt allerdings ein Sound von zerbrechendem Glass drinnen, Ich habe auch schon andere getestet bei dem bin ich mir aber sicher das er läuft und zum Testen isses ja eh Wurscht was fürn Sound kommt. grosses Grinsen
Private Grob
Mit Sounds habe ich auch noch kein Glück gehabt. Das ist aber jetzt die nächste Sache, die ich versuchen werde ans laufen zu bekommen...

Grüße
Private Grob
Verni@hter
Jetzt funktioniert die Methode bei mir nicht. Augenzwinkern

Folgender Fehler kommt:



Koordinaten mit Infonull ermittelt und stimmen auch. Frag mich was der jetzt mit z hat.


OK, Fehler meinerseits hab etwas vorschnell geschrieben wer lesen kann ist klar im Vorteil. Augen rollen
Private Grob
"Infonull" nehme ich auch immer zur Ermittlung der Koordinaten grosses Grinsen

Aber schön das es bei dir jetzt auch klappt.



Grüße
Private Grob
Verni@hter
Tachchen,

wieviele fx habt ihr denn bis jetzt schon verbaut?

in meiner csv steht bisher nur das:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
// NOTE: If you add a comment, put a space after the double forward slash or you will get issues
col_map_mp,maps/mp/mp_fx.d3dbsp
rawfile,maps/mp/mp_fx.gsc
rawfile,maps/mp/_interactive_objects.gsc
rawfile,vision/mp_fx.vision
rawfile,sun/mp_fx.sun
rawfile,maps/mp/mp_fx_fx.gsc

fx,destructibles/fx_barrelexp_mp
fx,destructibles/fx_barrel_ignite
fx,destructibles/fx_barrel_fire_top

//Fire
fx,env/fire/fx_fire_barrel_small
fx,env/fire/fx_fire_barrel_pm
fx,env/fire/fx_fire_barrel_small
fx,env/fire/fx_fire_bookshelf_wide
fx,env/smoke/fx_battlefield_smokebank_ling_sm_w
fx,env/smoke/fx_smk_column_lg_blk
fx,env/smoke/fx_smoke_crater

xmodel,skybox_oki2
xmodel,exploding_barrel_test_d
include,mptypes_german


material,sun
material,sun_flare

impactfx,mp_fx

sound,common,mp_fx,!all_mp
sound,generic,mp_fx,!all_mp
sound,voiceovers,mp_fx,!all_mp
sound,multiplayer,mp_fx,!all_mp
sound,vehicles,veh_mp,all_mp




Meine mp_mapname_fx.gsc schaut so aus:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
main() {
	level._effect["fx_smk_column_lg_blk"] = loadfx("env/smoke/fx_smk_column_lg_blk");
      level._effect["fx_fire_bookshelf_wide"] = loadfx("env/fire/fx_fire_bookshelf_wide");
      level._effect["fx_smoke_crater"] = loadfx("env/smoke/fx_smoke_crater");

	createFX("oneshotfx", (1424, -2576, 787), (-90, 0, 0), level._effect["fx_smk_column_lg_blk"], 0.1);
      createFX("oneshotfx", (-795.757, -4075.94, 209.153), (-90, 0, 0), level._effect["fx_smk_column_lg_blk"], 0.1);
      createFX("oneshotfx", (-795.757, -4075.94, 209.153), (-90, 0, 0), level._effect["fx_fire_bookshelf_wide"], 0.1);
      createFX("oneshotfx", (3919.5, -7798, 723.528), (-90, 0, 0), level._effect["fx_smk_column_lg_blk"], 0.1);
      createFX("oneshotfx", (-2418, -2203, -15), (-90, 0, 0), level._effect["fx_smoke_crater"], 0.1);
}

createFX(type, origin, angles, FXid, delay) {
	FX_ent = spawnstruct();
	FX_ent.v["origin"] = origin;
	FX_ent.v["angles"] = angles;
	FX_ent.v["up"] = anglestoup(FX_ent.v["angles"]);
	FX_ent.v["forward"] = anglestoforward(FX_ent.v["angles"]);
	FX_ent.v["FXid"] = FXid;
	FX_ent.v["delay"] = delay;
	FX_ent.v["type"] = type;
	if (FX_ent.v["type"] == "loopfx") {
		FX_ent thread loopfxthread();
	}
	if (FX_ent.v["type"] == "oneshotfx") {
		FX_ent thread oneshotfxthread();
	}
}

loopfxthread() {
	PlayLoopedFX(self.v["FXid"], self.v["delay"], self.v["origin"]);
}

oneshotfxthread() {
	self.looper = spawnFx(self.v["FXid"], self.v["origin"]);
	triggerFx(self.looper, self.v["delay"]);
}




Bis hierher funktioniert alles!

So, nun wollt ich einen Wasserfall einbauen und bekomme beim starten der Map eine Meldung: Exceeded Limits of 400 assets oder so ähnlich. Wie schauts bei euch aus?
Sven71
Der 400 fx error wird von einem Eintrag in Deiner Zone Datei verursacht:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
impactfx,mp_fx



Lösch diese Zeile ersatzlos und kompiliere die Map erneut. Sollte dann funktionieren. Ansonsten schick mir bitte eine Rückmeldung.
Verni@hter
Very Nice! Freu

Funktioniert. Danke

PS: hab dir auch was bei ModsOnline geschrieben^^
MrDunlop4
Hey
Erstmals danke für das Tut. Funktioniert das Ganze auch für Custom Zombies?

- MrDunlop4