1 registered members (AndrewAMD),
1,403
guests, and 6
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: o!Blut Effekte
[Re: littlejacky]
#304183
01/05/10 17:06
01/05/10 17:06
|
Joined: Nov 2008
Posts: 946
the_clown
User
|
User
Joined: Nov 2008
Posts: 946
|
c_trace für die Partikel selbst zu nutzen wäre nicht gut - das führt innerhalb einiger Sekunden zum Framdrop-Overkill. Die Kunst ist vielmehr korrektes Timing: Wenn du einen Charakter mmit c_trace triffst (deine normale Schussfunktion), musst du in der Event - Funktion einen weiteren Trace in Schussrichtung starten, mit dem du dann die Blutflecken platzierst. Wird in alphas Code wahrscheinlich zu sehen sein.
|
|
|
Re: o!Blut Effekte
[Re: the_clown]
#304186
01/05/10 17:11
01/05/10 17:11
|
Joined: Mar 2007
Posts: 1,852
alpha_strike
Serious User
|
Serious User
Joined: Mar 2007
Posts: 1,852
|
Brauche gar keinen code zu schreiben... unter Ent_decal stehen in der Anleitung die besten Beispiele...#
BMAP* bmMark = "blood.dds"; SOUND* sndShot = "bullet.wav";
// control a decal-placing gun with the camera function use_decal_gun() { while (1) { // calculate the target vector VECTOR trace_target; vec_set(trace_target,vector(5000,0,0)); // the weapon has a firing range of 5000 quants vec_rotate(trace_target, camera.pan); vec_add(trace_target, camera.x); // display a red spot at the target position if (c_trace(camera.x,trace_target, IGNORE_PASSABLE | USE_POLYGON| SCAN_TEXTURE) > 0) // hit something? draw_point3d(hit.x,vector(50,50,255),100,3);
// fire and then place a decal at the hit position if (key_ctrl) // fire { if (HIT_TARGET) // target hit? { PARTICLE* p = ent_decal(you,bmMark,7+random(3),random(360)); // place a random sized decal at the hit entity p->lifespan = 1600; // remove decal after 100 seconds } snd_play (sndShot,100,0); // play the shot sound at a volume of 100 wait(-0.5); // reload } wait(1); } }
|
|
|
Re: o!Blut Effekte
[Re: littlejacky]
#304194
01/05/10 17:36
01/05/10 17:36
|
Joined: Nov 2008
Posts: 946
the_clown
User
|
User
Joined: Nov 2008
Posts: 946
|
Nehmen wir an, dein Gegner hat eine Aktion: action enemy() { //// .... /// Hier das Event: my.emask |= ENABLE_SHOOT; my.event = enemyEvent; } Dann ist die Funktion enemyEvent das Event. Klar? Also, das sähe dann so aus:
function enemyEvent()
{
if(event_type == EVENT_SHOOT)
{
// tue folgendes bei Beschuss:
VECTOR trace_to;
vec_set(trace_to,vector(100,0,0));
vec_rotate(trace_to,you.pan);
vec_add(trace_to,target);
c_trace(target.x,trace_to,IGNORE_ME | IGNORE_PASSABLE);
if (HIT_TARGET) // target hit?
{
PARTICLE* p = ent_decal(you,bmMark,7+random(3),random(360)); // place a random sized decal at the hit entity
p->lifespan = 1600; // remove decal after 100 seconds
}
}
}
Das würde beim Anschießen einen Blutfleck an der Wand hinter dem Gegner erstellen. Mit ein paar wait() Anweisungen und etwas mehr traces zu mehr Orten kann man so, schön getimt, viele viele Flecken an viele viele Wände und Decken machen... Bei Unklarheiten, frag noch mal nach.
Last edited by the_clown; 01/05/10 17:39.
|
|
|
|