Facebook Twitter YouTube Frictional Games | Forum | Privacy Policy | Dev Blog | Dev Wiki | Support | Gametee


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Level Editor Help Monster Path Help
eagledude4 Offline
Member

Posts: 144
Threads: 14
Joined: Dec 2011
Reputation: 0
#1
Monster Path Help

I want a monster to follow a path, and based on which area the player enters, the monster will enter the same area via a path node. I'm having trouble getting it to work.

void EnteredEnemyTriggerArea(string &in asParent, string &in asChild, int alState) {
    SetEntityActive("servant_grunt_1", true);
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_1", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_2", 0, "");
    if(GetEntitiesCollide("Player", "SonRoomArea") == true) {
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_4", 5, "");
    } else if(GetEntitiesCollide("Player", "DadRoomArea") == true) {
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_5", 5, "");
    }
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_3", 0, "");
    
}

pathNodes 1 + 2 help the enemy get up the stairs and into the hallway, pathNodes 4 + 5 are for seperate rooms, and pathNode 3 is at the bottom of the stairs, so the monster retreats after entering one of the rooms.

Its hard to see the truth when you've been blinded by lies.
(This post was last modified: 01-05-2012, 01:11 AM by eagledude4.)
01-02-2012, 03:50 AM
Find
Linus Ågren Offline
Senior Member

Posts: 309
Threads: 58
Joined: Jan 2011
Reputation: 5
#2
RE: Scripting a Monster chase

If you use the ShowEnemyPlayerPosition script, the enemy ignores all PathNodeAreas untill he stops chasing the player. He will return to the nodes after that. (Which one I am unsure, but probably the closest one, or the one after the last one he passed before the chase)

Creator of The Dark Treasure.
01-02-2012, 04:07 AM
Website Find
eagledude4 Offline
Member

Posts: 144
Threads: 14
Joined: Dec 2011
Reputation: 0
#3
RE: Scripting a Monster chase

(01-02-2012, 04:07 AM)junkfood2121 Wrote: If you use the ShowEnemyPlayerPosition script, the enemy ignores all PathNodeAreas untill he stops chasing the player. He will return to the nodes after that. (Which one I am unsure, but probably the closest one, or the one after the last one he passed before the chase)
Thanks.

Its hard to see the truth when you've been blinded by lies.
(This post was last modified: 01-02-2012, 05:35 AM by eagledude4.)
01-02-2012, 04:27 AM
Find
eagledude4 Offline
Member

Posts: 144
Threads: 14
Joined: Dec 2011
Reputation: 0
#4
RE: Scripting a Monster chase

Update the first post, please re-read.

Its hard to see the truth when you've been blinded by lies.
(This post was last modified: 01-03-2012, 12:33 AM by eagledude4.)
01-02-2012, 05:36 AM
Find
eagledude4 Offline
Member

Posts: 144
Threads: 14
Joined: Dec 2011
Reputation: 0
#5
RE: Scripting a Monster chase

Hep please.

Its hard to see the truth when you've been blinded by lies.
01-03-2012, 12:33 AM
Find
Your Computer Offline
SCAN ME!

Posts: 3,456
Threads: 32
Joined: Jul 2011
Reputation: 235
#6
RE: Scripting a Monster chase

Sounds like you have only 5 path nodes and expect the monster to find its way to the path nodes. Path nodes are used to help the monster navigate its way around. You're going to need more than 5 path nodes if you want the monster to move as expected.

Tutorials: From Noob to Pro
01-03-2012, 09:40 PM
Website Find
eagledude4 Offline
Member

Posts: 144
Threads: 14
Joined: Dec 2011
Reputation: 0
#7
Solved - Please remove

(01-03-2012, 09:40 PM)Your Computer Wrote: Sounds like you have only 5 path nodes and expect the monster to find its way to the path nodes. Path nodes are used to help the monster navigate its way around. You're going to need more than 5 path nodes if you want the monster to move as expected.

Is this better?

[Image: pic3.png]

There are now 31 PathNodes instead of 5. The enemy still isn't following the paths correctly though.

void EnteredEnemyTriggerArea(string &in asParent, string &in asChild, int alState) {
    SetEntityActive("servant_grunt_1", true);
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_1", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_2", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_3", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_4", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_5", 0, "");
    if(GetEntitiesCollide("Player", "SonRoomArea") == true) {
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_6", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_7", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_8", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_9", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_10", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_11", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_12", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_13", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_14", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_15", 8, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_14", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_13", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_12", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_11", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_10", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_9", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_8", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_7", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_6", 0, "");
    } else if(GetEntitiesCollide("Player", "DadRoomArea") == true) {
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_16", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_17", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_18", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_19", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_20", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_21", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_22", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_23", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_24", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_25", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_26", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_27", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_28", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_29", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_30", 8, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_29", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_28", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_27", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_26", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_25", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_24", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_23", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_22", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_21", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_19", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_18", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_17", 0, "");
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_16", 0, "");
    }
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_5", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_4", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_3", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_2", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_1", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_31", 0, "");
}




Its hard to see the truth when you've been blinded by lies.
(This post was last modified: 01-05-2012, 06:29 AM by eagledude4.)
01-05-2012, 12:29 AM
Find
Your Computer Offline
SCAN ME!

Posts: 3,456
Threads: 32
Joined: Jul 2011
Reputation: 235
#8
RE: Monster Path Help

You're not supposed to add all the path nodes to the monster, only the starting path node, the ones that are in the center of an intersection (because the monster has trouble walking around corners), and the ending path node.

Tutorials: From Noob to Pro
01-05-2012, 07:09 AM
Website Find
eagledude4 Offline
Member

Posts: 144
Threads: 14
Joined: Dec 2011
Reputation: 0
#9
RE: Monster Path Help

(01-05-2012, 07:09 AM)Your Computer Wrote: You're not supposed to add all the path nodes to the monster, only the starting path node, the ones that are in the center of an intersection (because the monster has trouble walking around corners), and the ending path node.
Gaw, all that work for nothing Tongue I removed all the pathnodes except for _1 to start the path, _5 which is in the middle of the intersection, and _15 and _30 which are in seperate rooms for my if statements. The monster still doesn't walk the path's correctly.

void EnteredEnemyTriggerArea(string &in asParent, string &in asChild, int alState) {
    SetEntityActive("servant_grunt_1", true);
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_1", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_5", 0, "");
    if(GetEntitiesCollide("Player", "SonRoomArea") == true) {
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_15", 8, "");
    } else if(GetEntitiesCollide("Player", "DadRoomArea") == true) {
        AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_30", 8, "");
    }
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_5", 0, "");
    AddEnemyPatrolNode("servant_grunt_1", "PathNodeArea_31", 0, "");
}





Its hard to see the truth when you've been blinded by lies.
(This post was last modified: 01-05-2012, 06:23 PM by eagledude4.)
01-05-2012, 06:06 PM
Find
Your Computer Offline
SCAN ME!

Posts: 3,456
Threads: 32
Joined: Jul 2011
Reputation: 235
#10
RE: Monster Path Help

What is the monster supposed to do?

Tutorials: From Noob to Pro
(This post was last modified: 01-05-2012, 09:49 PM by Your Computer.)
01-05-2012, 09:49 PM
Website Find




Users browsing this thread: 6 Guest(s)