Gamestudio Links
Zorro Links
Newest Posts
Can't go to FALSEGOTO:DOUBLE?
by Turrican
Today at 00:34
Chamferbox Lucky Pack, once a year chance, 90% OFF limited deals
by Chamferbox
Yesterday at 21:10
How detect 200 bars after trade was opened?
by Tuguldur717
Yesterday at 13:58
Data quality and accuracy of test results
by brax
Yesterday at 13:44
Can be changed the header in Zorro?
by tomaslolo
Yesterday at 12:12
Price difference between last tick and previous.
by JRA
Yesterday at 11:47
Zorro on Linux
by alb
02/21/18 20:47
AUM Magazine
Latest Screens
Forgotten Tales - Demo version
RPG PARTY
Triton Wing now available on Steam
AckCon'17: Lotter vs The World
Who's Online
17 registered (dmac, Hredot, Cheulmen, BlackJack, MatPed, Kartoffel, alibaba, AndrewAMD, 3 invisible), 475 Guests and 9 Spiders online.
Key: Admin, Global Mod, Mod
Newest Members
tomaslolo, dmac, alb, may, piddle61
17896 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: 568
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 Offline
Senior Expert

Registered: 09/13/03
Posts: 6635
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 The Game

Severely outdated footage: http://store.steampowered.com/app/407570

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

Registered: 06/11/10
Posts: 568
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: 568
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: 568
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
Junior Member

Registered: 07/03/14
Posts: 66
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: 568
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
Junior Member

Registered: 07/03/14
Posts: 66
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