Gamestudio Links
Zorro Links
Newest Posts
What are you working on?
by NeoDumont
Today at 04:24
New Aum and few things
by George
Yesterday at 20:47
Transfer free license to different device?
by AndrewAMD
Yesterday at 20:14
read MT4 tradehistory html to create tradereport in Zorro
by GHMC
Yesterday at 13:45
Oanda - Darwinex data syncronisation
by MatPed
06/16/18 17:13
Genetic Algorithm
by AndrewAMD
06/16/18 06:09
Sponsorship
by Firoball
06/15/18 21:55
AUM Magazine
Latest Screens
Evonet Beta v1.0 : Online Project Development Template
Lake scene
Forgotten Tales - Demo version
RPG PARTY
Who's Online
7 registered (mk_1, jenGs, Superku, alibaba, AndrewAMD, 20BN, 1 invisible), 475 Guests and 3 Spiders online.
Key: Admin, Global Mod, Mod
Newest Members
Raisinbran, Grodt, drack, Paul_der_Zweite, madeinquant
17981 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: 586
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: 6707
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: 586
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: 586
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: 586
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: 69
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: 586
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: 69
You're Welcome


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

Top



Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de