Inside3D!
     

Weird Spikes Question

 
Post new topic   Reply to topic    Inside3d Forums Forum Index -> QuakeC Programming
View previous topic :: View next topic  
Author Message
smd



Joined: 23 Sep 2007
Posts: 23

PostPosted: Fri Sep 28, 2007 6:17 pm    Post subject: Weird Spikes Question Reply with quote

hi!
i've tried out this nice tutorial from pastor and it worked great, thx!!

my only question: is it possible that the nails dont stuck so deep in the wall?

i want them that they stuck about half so deep!

maybe someone know whats to change here !? Cool

Code:
void() spike_touch =
{
local float rand;
        if (other == self.owner)
                return;

        if (other.solid == SOLID_TRIGGER)
                return; // trigger field, do nothing

        if (pointcontents(self.origin) == CONTENT_SKY)
        {
                remove(self);
                return;
        }
       
// hit something that bleeds
        if (other.takedamage)
        {
                spawn_touchblood (9);
                T_Damage (other, self, self.owner, 9);
               
                remove(self);   //add this so they don't float...
                return;         //add this to avoid errors
        }
        else
        {
                WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
               
                if (self.classname == "wizspike")
                        WriteByte (MSG_BROADCAST, TE_WIZSPIKE);
                else if (self.classname == "knightspike")
                        WriteByte (MSG_BROADCAST, TE_KNIGHTSPIKE);
                else
                        WriteByte (MSG_BROADCAST, TE_SPIKE);
                WriteCoord (MSG_BROADCAST, self.origin_x);
                WriteCoord (MSG_BROADCAST, self.origin_y);
                WriteCoord (MSG_BROADCAST, self.origin_z);
        }

        self.velocity = '0 0 0';        //add this, it makes the nail stop

        self.nextthink = time + 10;     //add this, to prevent packet overflows
        self.think = SUB_Remove;        //add this for same reason as above

};
Back to top
View user's profile Send private message
Sajt



Joined: 16 Oct 2004
Posts: 1026

PostPosted: Fri Sep 28, 2007 6:42 pm    Post subject: Reply with quote

Change this:

Code:
...

self.velocity = '0 0 0';

...


To this ((I added some extra stuff too which should be there):

Code:
...

self.solid = SOLID_NOT;
self.movetype = MOVETYPE_NONE;

setorigin (self, self.origin - normalize(self.velocity) * 3);
self.velocity = '0 0 0';

...

_________________
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Back to top
View user's profile Send private message
smd



Joined: 23 Sep 2007
Posts: 23

PostPosted: Fri Sep 28, 2007 10:03 pm    Post subject: Reply with quote

thank u, workssss Cool

the only problem now is that if i shoot an enemy and he falls down a few spikes always stuck in the air.

also when spikes are on a door, when the door opens, the spikes are also stucking in the air.
Back to top
View user's profile Send private message
Sajt



Joined: 16 Oct 2004
Posts: 1026

PostPosted: Fri Sep 28, 2007 10:13 pm    Post subject: Reply with quote

After ...
Code:
if (other.solid == SOLID_TRIGGER)
    return; // trigger field, do nothing


add...

Code:
if (other.solid != SOLID_BSP || other.movetype == MOVETYPE_PUSH)
{
    remove(self);
    return;
}


This will make them just disappear when they hit doors or dying monsters.
_________________
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Back to top
View user's profile Send private message
smd



Joined: 23 Sep 2007
Posts: 23

PostPosted: Fri Sep 28, 2007 10:42 pm    Post subject: Reply with quote

hmm..

now with this new piece of code my spikes fly through all enemys, walls...

i cant kill with spikes now

maybe i have put your code at the wrong place?

Code:
.float hit_z;
void() spike_touch =
{
local float rand;
        if (other == self.owner)
                return;

        if (other.solid == SOLID_TRIGGER)
                return; // trigger field, do nothing

     if (other.solid != SOLID_BSP || other.movetype == MOVETYPE_PUSH)
     {
                remove(self);
                return;
     }

        if (pointcontents(self.origin) == CONTENT_SKY)
        {
                remove(self);
                return;
        }
       
// hit something that bleeds
        if (other.takedamage)
        {
                spawn_touchblood (9);
                T_Damage (other, self, self.owner, 9);
               
                remove(self);   //add this so they don't float...
                return;         //add this to avoid errors
        }
        else
        {
                WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
               
                if (self.classname == "wizspike")
                        WriteByte (MSG_BROADCAST, TE_WIZSPIKE);
                else if (self.classname == "knightspike")
                        WriteByte (MSG_BROADCAST, TE_KNIGHTSPIKE);
                else
                        WriteByte (MSG_BROADCAST, TE_SPIKE);
                WriteCoord (MSG_BROADCAST, self.origin_x);
                WriteCoord (MSG_BROADCAST, self.origin_y);
                WriteCoord (MSG_BROADCAST, self.origin_z);
        }

        self.solid = SOLID_NOT;
     self.movetype = MOVETYPE_NONE;

     setorigin (self, self.origin - normalize(self.velocity) * 3);
     self.velocity = '0 0 0';         //add this, it makes the nail stop

        self.nextthink = time + 10;     //add this, to prevent packet overflows
        self.think = SUB_Remove;        //add this for same reason as above

};
Back to top
View user's profile Send private message
Sajt



Joined: 16 Oct 2004
Posts: 1026

PostPosted: Sat Sep 29, 2007 8:13 am    Post subject: Reply with quote

Sorry. I think some dyslexic kid got on my inside3d account somehow and posted that. It's utter lies and untruths.

Code:
.float hit_z;
void() spike_touch =
{
local float rand;
        if (other == self.owner)
                return;

        if (other.solid == SOLID_TRIGGER)
                return; // trigger field, do nothing

        if (pointcontents(self.origin) == CONTENT_SKY)
        {
                remove(self);
                return;
        }
       
// hit something that bleeds
        if (other.takedamage)
        {
                spawn_touchblood (9);
                T_Damage (other, self, self.owner, 9);
               
                remove(self);   //add this so they don't float...
                return;         //add this to avoid errors
        }

        if (other.solid != SOLID_BSP || other.movetype == MOVETYPE_PUSH)
        {
                remove(self);
                return;
        }

        WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
               
        if (self.classname == "wizspike")
                WriteByte (MSG_BROADCAST, TE_WIZSPIKE);
        else if (self.classname == "knightspike")
                WriteByte (MSG_BROADCAST, TE_KNIGHTSPIKE);
        else
                WriteByte (MSG_BROADCAST, TE_SPIKE);
        WriteCoord (MSG_BROADCAST, self.origin_x);
        WriteCoord (MSG_BROADCAST, self.origin_y);
        WriteCoord (MSG_BROADCAST, self.origin_z);

        self.solid = SOLID_NOT;
        self.movetype = MOVETYPE_NONE;

        setorigin (self, self.origin - normalize(self.velocity) * 3);
        self.velocity = '0 0 0';         //add this, it makes the nail stop

        self.nextthink = time + 10;     //add this, to prevent packet overflows
        self.think = SUB_Remove;        //add this for same reason as above

};

_________________
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Back to top
View user's profile Send private message
smd



Joined: 23 Sep 2007
Posts: 23

PostPosted: Sat Sep 29, 2007 12:55 pm    Post subject: Reply with quote

fsss....Sad

this also doesnt work

now i can kill enemys, but there are no spikes visible
Back to top
View user's profile Send private message
Sajt



Joined: 16 Oct 2004
Posts: 1026

PostPosted: Sat Sep 29, 2007 2:54 pm    Post subject: Reply with quote

So worldspawn is MOVETYPE_PUSH now? They keep changing that one on me.

Just change:
Code:
if (other.solid != SOLID_BSP || other.movetype == MOVETYPE_PUSH)
to:
Code:
if (other != world)


I've never been good at coughing up code without testing it.
_________________
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Back to top
View user's profile Send private message
smd



Joined: 23 Sep 2007
Posts: 23

PostPosted: Sat Sep 29, 2007 4:21 pm    Post subject: Reply with quote

now everything looks nice,thx. except a little problem that when i shoot on doors or elevators there is nothing to see.
no spikes and no impact fx.

maybe you can fix this last little problem also Cool
Back to top
View user's profile Send private message
Sajt



Joined: 16 Oct 2004
Posts: 1026

PostPosted: Sat Sep 29, 2007 7:24 pm    Post subject: Reply with quote

Sigh...

Code:
void() spike_stuck_think =
{
   if (self.aflag <= time)
   {
      remove (self);
      return;
   }

   setorigin(self, self.pos1 + self.owner.origin - self.pos2);

   self.nextthink = time;
};

void() spike_touch =
{
local float rand;
        if (other == self.owner)
                return;

        if (other.solid == SOLID_TRIGGER)
                return; // trigger field, do nothing

        if (pointcontents(self.origin) == CONTENT_SKY)
        {
                remove(self);
                return;
        }
       
// hit something that bleeds
        if (other.takedamage)
        {
                spawn_touchblood (9);
                T_Damage (other, self, self.owner, 9, DTYPE_SHOT);
               
                remove(self);   //add this so they don't float...
                return;         //add this to avoid errors
        }

        else if (other.solid != SOLID_BSP)
        {
                remove(self);
                return;
        }

        WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
               
        if (self.classname == "wizspike")
                WriteByte (MSG_BROADCAST, TE_WIZSPIKE);
        else if (self.classname == "knightspike")
                WriteByte (MSG_BROADCAST, TE_KNIGHTSPIKE);
        else
                WriteByte (MSG_BROADCAST, TE_SPIKE);
        WriteCoord (MSG_BROADCAST, self.origin_x);
        WriteCoord (MSG_BROADCAST, self.origin_y);
        WriteCoord (MSG_BROADCAST, self.origin_z);

        self.solid = SOLID_NOT;
        self.movetype = MOVETYPE_NONE;

        setorigin (self, self.origin - normalize(self.velocity) * 3);
        self.velocity = '0 0 0';         //add this, it makes the nail stop

      if (other.solid == SOLID_BSP && other != world)
      {
         self.owner = other;
         self.pos1 = self.origin;
         self.pos2 = other.origin;
         self.aflag = time + 10;
         self.think = spike_stuck_think;
         self.nextthink = time;
      }
      else
      {
         self.nextthink = time + 10;     //add this, to prevent packet overflows
         self.think = SUB_Remove;        //add this for same reason as above
      }
};


If the nails lag a frame behind the movers........... play with a higher framerate.
_________________
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Back to top
View user's profile Send private message
smd



Joined: 23 Sep 2007
Posts: 23

PostPosted: Sat Sep 29, 2007 8:23 pm    Post subject: Reply with quote

wooow Laughing

now it works perfect!!!


thank u soooooooo much Wink
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Inside3d Forums Forum Index -> QuakeC Programming All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2004 phpBB Group