View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002859 | The Dark Mod | AI | public | 14.09.2011 00:34 | 25.06.2013 21:37 |
Reporter | grayman | Assigned To | Springheel | ||
Priority | normal | Severity | normal | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | TDM 1.06 | ||||
Target Version | TDM 1.07 | Fixed in Version | TDM 1.07 | ||
Summary | 0002859: If an AI opens a door marked ShouldBeClosed, he becomes suspicious | ||||
Description | See summary | ||||
Steps To Reproduce | See attached map. | ||||
Additional Information | The AI should take into consideration that he's the one who opened the frackin' door. | ||||
Tags | No tags attached. | ||||
Attached Files | doortest.map (8,352 bytes)
Version 2 // entity 0 { "classname" "worldspawn" "editor_drLastCameraPos" "37.2049 26.4475 94.7015" "editor_drLastCameraAngle" "-23.4001 23.4007 0" "editor_drMapPos1" "1738.55 1171.14 -520.531" "editor_drMapAngle1" "14.7001 87.8977 0" "editor_drMapPos2" "414.798 255.441 -264.933" "editor_drMapAngle2" "2.10002 84.5976 0" "editor_drMapPos3" "-749.97 -1606.21 -470.066" "editor_drMapAngle3" "-3.29998 6.59757 0" "editor_drMapPos4" "1014.05 -953.679 -556.857" "editor_drMapAngle4" "-10.2 355.498 0" "editor_drMapPos5" "987.599 3513.79 -319.877" "editor_drMapAngle5" "-61.1999 172.198 0" "editor_drMapPos6" "-1032.5 -2840 739.5" "editor_drMapAngle6" "-77.0999 175.798 0" "editor_drMapPos7" "952.822 285.005 1366.04" "editor_drMapAngle7" "-74.8 149.373 0" "editor_drMapPos8" "976 424 320" "editor_drMapAngle8" "-3 15.3467 0" "editor_drMapPos9" "409.146 547.464 392.83" "editor_drMapAngle9" "-16.8 284.947 0" // primitive 0 { brushDef3 { ( 0 0 1 -136 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -512 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 1 { brushDef3 { ( 0 0 1 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -136 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -512 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 2 { brushDef3 { ( 0 0 1 -128 ) ( ( 1 0 0 ) ( 0 2 16 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -128 ) ( ( 1 0 8 ) ( 0 2 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -520 ) ( ( 1 0 0 ) ( 0 2 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 0 ) ( ( 1 0 0 ) ( 0 2 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 0 ) ( ( 1 0 8 ) ( 0 2 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 512 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 3 { brushDef3 { ( 0 1 0 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -512 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 -8 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 1 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 4 { brushDef3 { ( 0 0 1 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -512 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 -8 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 5 { brushDef3 { ( 0 0 1 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 -8 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 6 { brushDef3 { ( 0 0 1 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -264 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 256 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -38 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 7 { brushDef3 { ( 0 0 1 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -264 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 256 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 87 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } // primitive 8 { brushDef3 { ( 0 0 1 -128 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 1 0 0 -264 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 0 -1 96 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( -1 0 0 256 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 1 0 -87 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 ( 0 -1 0 38 ) ( ( 0.015625 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/carpet/rugs/ornate_black_gold01" 0 0 0 } } } // entity 1 { "classname" "info_player_start" "name" "info_player_start_1" "origin" "24 104 8" } // entity 2 { "classname" "atdm:ai_builder_guard" "name" "atdm_ai_builder_guard_1" "origin" "128 64 8" "team" "0" "target0" "path_corner_3" } // entity 3 { "classname" "atdm:door_96x48_2hinge" "name" "door_96x48x2hinge_1" "lock_picktype" "-" "lock_pins" "0" "locked" "0" "origin" "259.851 86.8415 0" "rotate" "0 90 0" "skin" "door_004" "used_by" "-" "rotation" "0 -1 0 1 0 0 0 0 1" "shouldBeClosed" "1" } // entity 4 { "classname" "atdm:handle_curved_rotate_double_right" "name" "doorhandle_96x48x2hinge_1" "bind" "door_96x48x2hinge_1" "origin" "259.851 42.8415 50.5" "rotation" "0 -1 0 1 0 0 0 0 1" } // entity 5 { "classname" "path_corner" "name" "path_corner_1" "origin" "75 64 0" "target0" "path_corner_3" } // entity 6 { "classname" "path_corner" "name" "path_corner_3" "origin" "435 64 0" "target0" "path_corner_1" } // entity 7 { "classname" "light" "name" "light_1" "origin" "384 62 116" "light_center" "0 0 0" "light_radius" "320 320 320" } // entity 8 { "classname" "light" "name" "light_3" "origin" "106 106 116" "light_center" "0 0 0" "light_radius" "320 320 320" } | ||||
I'm thinking that the solution is to mark the door with the player or the AI's name so that: - an AI opening the door knows he's not to become suspicious if his name is on the door - nearby AI alerted by the open door will also not react if they can see the door, see the name on the door, and can see that AI - AI who come upon the open door later probably won't be able to see the AI that opened it, so they'll treat it as suspicious - if the AI who opened the door comes upon the door later, and it's still open, and no one's touched it since he opened it, he'll see his name on the door and won't become suspicious. "Oh, crap. I forgot to close it earlier." - if an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not |
|
Probably stating the obvious here, but the AI should finish his search before closing the door. Also might look odd if he closes the door, then opens it again to continue on his route...is there a way to check if his path will go through the door, and if so not close it until he is on the other side? |
|
AI won't close a door if they're searching. And you're right. A patrolling AI who deviates from his route to close a door that should be closed should only do that if the door isn't on his route. If that door is on his route, he's going to close it anyway after he passes through it. What's missing atm is getting an AI to go to a door and close it when he doesn't need to pass through it. I'll need to check if a searching AI will close a suspicious door if he ends his search w/in sight of the door. He should be doing that now. I know there's a bug when he's dealing with double doors of this type, but I forget if the same bug occurs with single doors. |
|
The solution is to mark the door with the player or the AI's name so that: - an AI opening the door knows he's not to become suspicious if his name is on the door - nearby AI alerted by the open door will also not react if they can see the door, see the name on the door, and can see that AI - AI who come upon the open door later probably won't be able to see the AI that opened it, so they'll treat it as suspicious - if the AI who opened the door comes upon the door later, and it's still open, and no one's touched it since he opened it, he'll see his name on the door and won't become suspicious. "Oh, crap. I forgot to close it earlier." If an AI comes upon an open door that should be closed, he should close it whether he becomes suspicious or not. When determining if an AI can ‘see’ a door, use the center of the door’s bounds and not its origin. The AI will be more successful using the former than using the latter. rev. 4974: State.cpp HandleDoorTask.cpp ai.cpp ai.h BinaryFrobMover.cpp BinaryFrobMover.h FrobDoor.cpp FrobDoor.h player.cpp entity.cpp The only bit that's not implemented here is having AI make sure they close a suspicious door. That will be dealt with as part of 0002841. |
|
" nearby AI alerted by the open door will also not react if they can see the door, and can see the AI that opened it " I tested this in my update to Score to Settle, but I had guards starting to get worked up about a door that was being used regularly by another guard. How does the above check ("if they can see the AI") work? Do they have to see the AI at the moment the door opens? Is there any kind of grace period? It's quite possible an AI on the other side of a door could see the door open but not yet see the AI. What about light levels? If the door is lit but the guard who opened it is coming out of a dark room, will that result in an alert? Also, is the visual stim bound to the door, and thus moves with the door, or does it stay in the location it would be when the door is closed? |
|
Each door keeps track of who used it last. This is either an AI or NULL (if it hasn't been used yet by AI, or the player was the last one to use it). Let's say Tom used the door last, and Bill sees that the door is open. Bill checks if there's LOS from him to Tom. There's no grace period. FOV and light level don't matter. If so, no suspicion. If not, Bill checks whether Tom is w/in 150 units of the door origin. If so, no suspicion. If this fails, Bill checks for ANY AI near the door. If he finds someone, no suspicion. If he finds no one, the door is suspicious. If the player was the last to use the door, or the door doesn't know who used it last, it's considered suspicious. The door's visual stim emanates from its origin. |
|
Hmm, ok, that all sounds really good. I'm not sure how the door was causing alerts in my map then. I'll see if I can reproduce the behaviour in a testmap. One other thing...how quickly do AI do register a door open? Is the check done the moment the door begins to open, if it's in the AI's LOS? |
|
As soon as the door begins to open, its visual stim is enabled. The stim will be sent out either in the same frame or the next. After that, it fires every 2 seconds (on average) until the door is closed again. If an AI has the door in his FOV when it starts opening, he'll be stimmed right away. The odds of his noticing the stim depend on his 'chanceNoticeDoor' spawnarg. |
|
For the record, I've made myself a testmap and have been doing some preliminary tests, but haven't been able to recreate a problem. | |
I downloaded the test map and with 'alert debugging' turned on, I see no rise in the guard's alert level as he uses the door. I let him use it several times and his level never left 0. | |
I'm going to close this then. I guess maybe it was something else that alerted the guards in my map. | |
Date Modified | Username | Field | Change |
---|---|---|---|
14.09.2011 00:34 | grayman | New Issue | |
14.09.2011 00:34 | grayman | File Added: doortest.map | |
14.09.2011 04:11 | grayman | Note Added: 0004020 | |
14.09.2011 21:17 | Springheel | Note Added: 0004021 | |
15.09.2011 00:50 | grayman | Note Added: 0004030 | |
15.09.2011 22:11 | grayman | Assigned To | => grayman |
15.09.2011 22:11 | grayman | Status | new => assigned |
20.09.2011 00:45 | grayman | Note Added: 0004036 | |
20.09.2011 00:45 | grayman | Status | assigned => resolved |
20.09.2011 00:45 | grayman | Resolution | open => fixed |
20.09.2011 00:45 | grayman | Fixed in Version | => TDM 1.07 |
20.09.2011 00:45 | grayman | Target Version | => TDM 1.07 |
18.10.2011 21:44 | grayman | Relationship added | has duplicate 0002338 |
19.06.2013 19:38 | Springheel | Note Added: 0005577 | |
19.06.2013 19:40 | Springheel | Note Edited: 0005577 | |
19.06.2013 19:40 | Springheel | Note Edited: 0005577 | |
19.06.2013 20:37 | grayman | Note Added: 0005579 | |
19.06.2013 20:50 | Springheel | Note Added: 0005580 | |
19.06.2013 20:52 | Springheel | Note Edited: 0005580 | |
19.06.2013 21:02 | Springheel | Assigned To | grayman => Springheel |
19.06.2013 21:02 | Springheel | Status | resolved => assigned |
19.06.2013 21:08 | Springheel | Status | assigned => feedback |
19.06.2013 23:22 | grayman | Note Added: 0005581 | |
19.06.2013 23:22 | grayman | Status | feedback => assigned |
23.06.2013 14:45 | Springheel | Note Added: 0005588 | |
25.06.2013 00:11 | Springheel | Relationship added | related to 0003462 |
25.06.2013 13:07 | Springheel | Status | assigned => feedback |
25.06.2013 17:46 | grayman | Note Added: 0005590 | |
25.06.2013 17:46 | grayman | Status | feedback => assigned |
25.06.2013 21:37 | Springheel | Note Added: 0005593 | |
25.06.2013 21:37 | Springheel | Status | assigned => resolved |