Private Variable Picking Problem

For questions about using Classic.

Post » Sun Oct 02, 2011 7:24 pm

So I'm working on some enemy AI. I'm trying to streamline a lot of the movement so that I can cut back on events by using families, and using containers to pair up a collider/AI object with my graphic/Stat object so my enemies can have proper collision detection when navigating the environment.

Enemy is in Family "Enemy"
AI is in Family "Red"



The above is basically the template I plan on using to make my enemies perform various actions, up to deciding when to attack the player. The Enemies find their AI just fine, which is great. They stick to their coords and all that jazz.

Unfortunately, nothing gets detected after that. Any action with a PV checking condition doesn't perform at all. It's not just with Family PV checking; checking the specific objects' PVs yield the same result.

Moving the movement action outside to "Always" or "At Startup" does cause the enemy to move. Also moving the "Is moving" conditions and animation actions out of the PV check allows the enemy to animate.

I've tried using "Pick by comparison" to evaluate the PVs, but it ends up picking every enemy who's State is set to "Idle", causing the enemies to try to change animations between their own movement states. It also eventually causes the game to crash when opening a layout with the enemies in it, with no other solution than to delete all events associated with the "Enemy" and "Red" Families. Really bizarre.

I also tried to pick by adding an additional PV that would pair up the Enemy and the AI rather than using a container, but that didn't work either and just ran the actions for all instances as long as one instance fit the bill.

A bit frustrating, to be sure.
B
58
S
20
G
7
Posts: 305
Reputation: 8,804

Post » Sun Oct 02, 2011 8:19 pm


Perhaps it would help to think of families as groups of different objects rather than a bunch of instances.
Image Image
B
161
S
48
G
91
Posts: 7,359
Reputation: 67,273

Post » Sun Oct 02, 2011 8:42 pm

Well it's not an issue with the Families, but with PV picking. Like I said, even if I replaced the "Red" PV checking with the actual object, the results are the same.
B
58
S
20
G
7
Posts: 305
Reputation: 8,804

Post » Sun Oct 02, 2011 9:33 pm

Well families have always had issues using variables, but if instance's variables are not picking that would be something to do with getting the correct value.
Might try something like value is greater than 0.
Otherwise upload a cap, and someone can take a look at it.
Image Image
B
161
S
48
G
91
Posts: 7,359
Reputation: 67,273

Post » Sun Oct 02, 2011 10:14 pm

Well, here's the cap:
http://dl.dropbox.com/u/20459682/eclipse.cap

The events in question are in the event sheet "Game Systems", they're the last group of events, so they should be easy to find. That's the only spot in the game where Enemies and AI are referenced.

When you test it for the first time it should jump to fullscreen, which is inconvenient for debugging. You can go to options and mess with the screen settings and set it to Windowed mode. It'll save a config file after you select save settings and then refer to that to restore settings so you only have to set it to windowed once. Clicking and dragging on the screen will let you move it; it's a bit clumsy as I haven't finished that feature yet, but it works fine. You select menu options with the Action key, default mapping is Left Ctrl.

When you get to the actual map just take a right and you'll see the enemies in question, and their corresponding AI objects (I have them visible for debugging purposes).

I also highly recommend you "Debug All" rather than "Debug Layout". The game will not work properly otherwise, as it requires a number of arrays and objects and configurations created on startup.

Hope someone can figure something out!TL222011-10-02 22:15:13
B
58
S
20
G
7
Posts: 305
Reputation: 8,804

Post » Sun Oct 02, 2011 11:52 pm

When using families a container will only pick the paired object type, the family the paired object belongs to won't be picked.

Here's a solution:

1. Add a variable to the enemy family and call it 'pair'.
2. Add an action to "always" or "start of layout" to set Enemy('pair') to Red.UID.
3. Then for all the events that need to pick the enemy paired with Red add these two conditions.
+ For each Red
+ Enemy 'pair' equal to Red.UID
B
79
S
24
G
54
Posts: 4,754
Reputation: 40,771

Post » Mon Oct 03, 2011 1:04 am

Well, that at least solved the issue of animating them separately, so cheers for that.

I think what it might be is the PVs not being correctly evaluated. I just remembered a bug way back where testing out PVs on Families wasn't working right because the order in the object wasn't the same as in the Family? I thought that bug was squashed though.

I found that once I put the "Set Red.Value('Timer') to Red.Value('Timer') - 1 * TimeDelta" into the "Always" position, it was modifying Red's "EnID" value, not "Timer".

I did another attempt at "Pick by comparison" and input the values manually, and the checking worked. The setting of the PV didn't, but one workaround at a time, I guess.
B
58
S
20
G
7
Posts: 305
Reputation: 8,804

Post » Mon Oct 03, 2011 7:01 am

So good news! I've solved it, for now.

I opted to remove the Family completely, then reorder the AI object's PVs into alphabetical order. After that, when I re-added the family "Red" to the AI, when it put in the PVs it ended up in alphabetical order as well, and then they started matching up. It's a bit of a hackaround, but at least I've got it working now.

Thanks for all the help lately, guys! I appreciate it!
B
58
S
20
G
7
Posts: 305
Reputation: 8,804


Return to Help & Support using Construct Classic

Who is online

Users browsing this forum: No registered users and 6 guests