Gamestudio Links
Zorro Links
Newest Posts
rMomentum always returns 0 when checking for peak/valley
by jcl
Today at 17:38
a little help here?
by 3run
Today at 16:38
How to set a pair trading order right
by jcl
Today at 11:46
Dual Momentum Algorithm - The way Zorro would have done it
by Hredot
Today at 05:21
HIgh FRequency Trading Script -- Highly Profitable
by Yosh
Yesterday at 19:27
Linear Regression in objective function
by jcl
11/22/17 15:40
MT4 vs Zorro
by pascalx
11/22/17 14:00
AUM Magazine
Latest Screens
RPG PARTY
Triton Wing now available on Steam
AckCon'17: Lotter vs The World
Triton Wing
Who's Online
14 registered (Lobo, Hredot, painkiller, 3run, alibaba, Kartoffel, FLD, RealSerious3D, Jerome8911, 1 invisible), 169 Guests and 4 Spiders online.
Key: Admin, Global Mod, Mod
Newest Members
ech87, Lobo, Andy60, AzzoCorp, franzz
17813 Registered Users
Topic Options
Rate This Topic
#468864 - 10/24/17 04:26 Non-Passable Bounding Box Needed
Ruben Offline
User

Registered: 06/11/10
Posts: 555
Loc: California
I am trying to make the bounding box (manually set collision hull) surrounding an NPC to not allow the player to enter the bounding box. I successfully created a bounding box, as I can tell by pressing the F11 key twice and seeing it. However, the player is continually able to pass into the NPC's bounding box when I do not want it to.

I thought I knew how to do this in the past, but it has been awhile since I have done it, and I forgot. I thought I did everything I needed to do to make the bounding box non-passable, as follows:

Code:
function playerAdvance()
{
   c_move(me, move_vec, vector(0, 0, my.GRAVITY_VAR), 
      USE_POLYGON | IGNORE_PASSABLE | IGNORE_PUSH | GLIDE);
}

action player_function()
{
   ...
	
   player = me;
   my.push = 10;
	
   ...
   
   my.eflags |= FAT | NARROW; 

   ...
   
   c_setminmax(me);  
   set(my, POLYGON);
  
   ...

   while (player_health > 0)
   {
      ...
			
      playerAdvance(); 

      ...

      wait(1);
   }

   ...
}

action villain_action()
{
   ...
	
   my.eflags |= FAT | NARROW;
		
   ...

   villain = me;
	
   ...
	
   my.push = 10;
   set(my, POLYGON);

   ...

   while (my.status != villain_dead)
   {
      ...

      wait(1);
   }

   ...
}	

void createVillain()
{
   villain = ent_create("villain.mdl",
      vector(-64,146,-111), villain_action );
   
   ...
	
   c_setminmax(villain);

   // set bounding box to individual values
   vec_set(villain.min_x,vector(30,20,80)); 
   vec_set(villain.max_x,vector(-20,-20,0));
}

function newGameButton()
{
   ...

   level_load ("gameWorld.wmb");

   ...
   
   hero = ent_create ( "player.mdl", vector(8,-606,-111),
      player_function ); 

   ...
}


I tried setting c_setminmax() before manually creating the bounding box. I also set the push value of the NPC to the same push value as the player. The model of the NPC itself is creating collision (Un-passable), but not the bounding box surrounding the NPC. I tried getting rid of c_setminmax(), but the same thing happens.

Any advice would be greatly appreciated in helping me to make the collision hull un-passable. Thank you.


Edited by Ruben (10/24/17 04:30)

Top
#468865 - 10/24/17 07:15 Re: Non-Passable Bounding Box Needed [Re: Ruben]
Superku Online
Senior Expert

Registered: 09/13/03
Posts: 6612
Loc: Kiel (Germany)
You cannot let the entity collide with another entity's bounding box (which is an ellipsoid, not a box) when you set POLYGON on the target or USE_POLYGON in c_move.
_________________________
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Superku side-scroller: ~98.5% (??????!??)

Steam® Store Page ("Coming Soon"): http://store.steampowered.com/app/407570 Wowowowow!

Top
#468879 - 10/25/17 04:23 Re: Non-Passable Bounding Box Needed [Re: Superku]
Ruben Offline
User

Registered: 06/11/10
Posts: 555
Loc: California
I commented out every instance of:

Code:
set(my, POLYGON);



...in the previous code. I also changed the c_move function to this:

Code:
c_move(me, move_vec, vector(0, 0, my.GRAVITY_VAR), IGNORE_PASSABLE | 
   IGNORE_PUSH | GLIDE);



Now what happens is that the player is still passing through the bounding box of the villain, and also passing through the villain's body itself. Before, collision would at least occur with the body of the villain itself, even though the bounding box was not offering collision. Now neither the villain's body nor the bounding box are causing collision.


Edited by Ruben (10/25/17 04:25)

Top
#468880 - 10/25/17 04:32 Re: Non-Passable Bounding Box Needed [Re: Ruben]
Ruben Offline
User

Registered: 06/11/10
Posts: 555
Loc: California
The push values do not seem to be working. I set the player push value to 1, and the villain's push value to 100, and the player is still able to pass through the villain's bounding box.

Top
#468886 - 10/25/17 19:29 Re: Non-Passable Bounding Box Needed [Re: Ruben]
Ruben Offline
User

Registered: 06/11/10
Posts: 555
Loc: California
Am I missing something in making the bounding box unpassable? I thought I remembered this being a lot easier to do, back when I knew how to do it.

Top
#468887 - 10/25/17 20:57 Re: Non-Passable Bounding Box Needed [Re: Ruben]
DriftWood Offline
Newbie

Registered: 07/03/14
Posts: 46
Reading...
http://www.conitec.net/beta/ac_move.htm
http://www.conitec.net/beta/c_ignore.htm
http://www.conitec.net/beta/collision.htm
http://www.conitec.net/beta/aentity-fat.htm

Give this a try... Also, makes sure you don't have a c_ignore setup wrong somewhere....
Code:
function playerAdvance()
{
   c_move(me, move_vec, vector(0, 0, my.GRAVITY_VAR), 
      | IGNORE_PASSABLE | GLIDE);
// testing beeping means contact
    if (HIT_TARGET)
{
    if (you == villain)
     beep();
}

}

action player_function()
{
   ...
	
   player = me;
  
	
   ...
   
   my.eflags |= FAT | NARROW; 
//  c_setminmax(me);   // set my bounding box to my real size
// Don't need both, use one or the other

   ...
   
  
   ...

   while (player_health > 0)
   {
      ...
			
      playerAdvance(); 

      ...

      wait(1);
   }

   ...
}

action villain_action()
{

   villain = me;
	wait(1);
   ...

   ...
	
   my.eflags |= FAT | NARROW;
//// ARE The Values correct
	 // set bounding box to individual values
   vec_set(villain.min_x,vector(30,20,80)); 
   vec_set(villain.max_x,vector(-20,-20,0));	
   ...

	
  

   ...

   while (my.status != villain_dead)
   {
      ...

      wait(1);
   }

   ...
}

void createVillain()
{
   villain = ent_create("villain.mdl",
      vector(-64,146,-111), villain_action );
   
   ...
	
  // Don't set a value on the object, outside the object. 
  // Villains action should control the BBOX - just good object-based thinking
  
}



Final notes. BBox's should penetrate each other a bit. As Super notes it's not really a box.

Edit - The example in http://www.conitec.net/beta/aentity-fat.htm shows the negative numbers under min_x not max_x. Is this a possible cause for your BBox not working
Code:
my.eflags |= FAT | NARROW;
//// ARE The Values correct
	 // set bounding box to individual values
   vec_set(villain.min_x,vector(-20,-20,0)); 
   vec_set(villain.max_x,vector(30,20,80));


http://www.conitec.net/beta/aentity-min_x.htm


Edited by DriftWood (10/26/17 05:10)

Top
#468957 - 10/30/17 01:44 Re: Non-Passable Bounding Box Needed [Re: DriftWood]
Ruben Offline
User

Registered: 06/11/10
Posts: 555
Loc: California
Thank you DriftWood! Your solution worked! The wait(1) after the me = villain code seemed to be the finishing touch, and it appears you were right about the negative values being in the wrong place for the vec_set min/max. Thanks again.


Edited by Ruben (10/30/17 01:45)

Top
#469056 - 11/04/17 20:47 Re: Non-Passable Bounding Box Needed [Re: Ruben]
DriftWood Offline
Newbie

Registered: 07/03/14
Posts: 46
You're Welcome


Edited by DriftWood (11/04/17 21:54)

Top



Gamestudio download | chip programmers | Zorro platform | shop | resources | magazine | manual | support faq | bugs

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) 3dgamestudio.net