From: xtrapsp
Could we not get a database of each room? I mean they all follow a layout. Slightly modified each time. and each time it goes into a room it defines the room and looks for stuff?
That's what I'm doing already. I'm storing all the information I gather in arrays.
Then using all those information I find a path to where I want to go. Say ealier in the dung I find a gold diamond door and I don't have the key. Later in the dung, I find the gold diamond key. Then the script would look at all the doors and look for a locked gold diamond door and find out in what room number it is. Then the pathfinding function would tell me by which room I need to pass to get to that room.
So far this is how I want my algorithm to open doors if all door could be opened in one trip (meaning no keys or puzzle)

Hardcoded this map in an array to do some testing:
SetLength(roomsArray, 58);
roomsArray[0]:= newRoomTest(0, [0, 1, 2, -1]);
roomsArray[1]:= newRoomTest(1, [8, 0, 4, 5]);
roomsArray[2]:= newRoomTest(2, [1, -1, 3, -1]);
roomsArray[3]:= newRoomTest(3, [-1, -1, 54, 2]);
roomsArray[4]:= newRoomTest(4, [-1, 8, -1, -1]);
roomsArray[5]:= newRoomTest(5, [-1, -1, 9, 4]);
roomsArray[6]:= newRoomTest(6, [7, -1, 5, 6]);
roomsArray[7]:= newRoomTest(7, [55, -1, 10, 9]);
roomsArray[8]:= newRoomTest(8, [-1, 55, 11, -1]);
roomsArray[9]:= newRoomTest(9, [-1, -1, -1, 10]);
roomsArray[10]:= newRoomTest(10, [-1, -1, -1, 11]);
roomsArray[11]:= newRoomTest(11, [20, 7, -1, -1]);
roomsArray[12]:= newRoomTest(12, [-1, 29, 6, 28]);
roomsArray[13]:= newRoomTest(13, [19, 20, 18, -1]);
roomsArray[14]:= newRoomTest(14, [-1, 19, -1, -1]);
roomsArray[15]:= newRoomTest(15, [56, -1, 17, 18]);
roomsArray[16]:= newRoomTest(16, [-1, 56, 16, -1]);
roomsArray[17]:= newRoomTest(17, [-1, 12, -1, 17]);
roomsArray[18]:= newRoomTest(18, [-1, -1, 15, 16]);
roomsArray[19]:= newRoomTest(19, [-1, 42, 14, 15]);
roomsArray[20]:= newRoomTest(20, [42, -1, 13, -1]);
roomsArray[21]:= newRoomTest(21, [-1, -1, -1, 14]);
roomsArray[22]:= newRoomTest(22, [-1, -1, -1, 13]);
roomsArray[23]:= newRoomTest(23, [12, -1, -1, -1]);
roomsArray[24]:= newRoomTest(24, [29, -1, -1, -1]);
roomsArray[25]:= newRoomTest(25, [27, 30, 28, -1]);
roomsArray[26]:= newRoomTest(26, [24, 27, 23, -1]);
roomsArray[27]:= newRoomTest(27, [30, 32, 31, -1]);
roomsArray[28]:= newRoomTest(28, [43, 24, -1, 25]);
roomsArray[29]:= newRoomTest(29, [22, -1, -1, 23]);
roomsArray[30]:= newRoomTest(30, [-1, 43, -1, -1]);
roomsArray[31]:= newRoomTest(31, [26, -1, 25, -1]);
roomsArray[32]:= newRoomTest(32, [-1, 26, -1, -1]);
roomsArray[33]:= newRoomTest(33, [21, 22, -1, -1]);
roomsArray[34]:= newRoomTest(34, [-1, 21, -1, -1]);
roomsArray[35]:= newRoomTest(35, [22, -1, 33, -1]);
roomsArray[36]:= newRoomTest(36, [-1, -1, 31, -1]);
roomsArray[37]:= newRoomTest(37, [-1, 35, 34, 33]);
roomsArray[38]:= newRoomTest(38, [35, 38, -1, 36]);
roomsArray[39]:= newRoomTest(39, [-1, -1, -1, 34]);
roomsArray[40]:= newRoomTest(40, [38, -1, 40, 39]);
roomsArray[41]:= newRoomTest(41, [-1, -1, 36, 37]);
roomsArray[42]:= newRoomTest(42, [-1, -1, 41, 40]);
roomsArray[43]:= newRoomTest(43, [-1, -1, 39, -1]);
roomsArray[44]:= newRoomTest(44, [44, -1, -1, 41]);
roomsArray[45]:= newRoomTest(45, [-1, 44, 45, -1]);
roomsArray[46]:= newRoomTest(46, [-1, 46, 47, 45]);
roomsArray[47]:= newRoomTest(47, [46, -1, 48, -1]);
roomsArray[48]:= newRoomTest(48, [-1, -1, 49, 47]);
roomsArray[49]:= newRoomTest(49, [-1, 50, -1, 49]);
roomsArray[50]:= newRoomTest(50, [50, -1, -1, -1]);
roomsArray[51]:= newRoomTest(51, [-1, -1, -1, 48]);
roomsArray[52]:= newRoomTest(52, [-1, -1, 37, -1]);
roomsArray[53]:= newRoomTest(53, [-1, -1, 51, 3]);
roomsArray[54]:= newRoomTest(54, [-1, -1, 52, 51]);
roomsArray[55]:= newRoomTest(55, [-1, -1, -1, 52]);
roomsArray[56]:= newRoomTest(56, [-1, -1, 53, 54]);
roomsArray[57]:= newRoomTest(57, [-1, -1, -1, 53]);
SetLength(doorsArray, 57);
doorsArray[0]:= newDoorTest(0, [0, 1]);
doorsArray[1]:= newDoorTest(1, [0, 2]);
doorsArray[2]:= newDoorTest(2, [0, 3]);
doorsArray[3]:= newDoorTest(3, [2, 53]);
doorsArray[4]:= newDoorTest(4, [1, 5]);
doorsArray[5]:= newDoorTest(5, [1, 6]);
doorsArray[6]:= newDoorTest(6, [6, 12]);
doorsArray[7]:= newDoorTest(7, [6, 11]);
doorsArray[8]:= newDoorTest(8, [1, 4]);
doorsArray[9]:= newDoorTest(9, [5, 7]);
doorsArray[10]:= newDoorTest(10, [7, 9]);
doorsArray[11]:= newDoorTest(11, [8, 10]);
doorsArray[12]:= newDoorTest(12, [17, 23]);
doorsArray[13]:= newDoorTest(13, [20, 22]);
doorsArray[14]:= newDoorTest(14, [19, 21]);
doorsArray[15]:= newDoorTest(15, [18, 19]);
doorsArray[16]:= newDoorTest(16, [16, 18]);
doorsArray[17]:= newDoorTest(17, [15, 17]);
doorsArray[18]:= newDoorTest(18, [13, 15]);
doorsArray[19]:= newDoorTest(19, [13, 19]);
doorsArray[20]:= newDoorTest(20, [11, 13]);
doorsArray[21]:= newDoorTest(21, [33, 34]);
doorsArray[22]:= newDoorTest(22, [29, 33]);
doorsArray[23]:= newDoorTest(23, [26, 29]);
doorsArray[24]:= newDoorTest(24, [26, 28]);
doorsArray[25]:= newDoorTest(25, [28, 31]);
doorsArray[26]:= newDoorTest(26, [31, 32]);
doorsArray[27]:= newDoorTest(27, [25, 26]);
doorsArray[28]:= newDoorTest(28, [12, 25]);
doorsArray[29]:= newDoorTest(29, [12, 24]);
doorsArray[30]:= newDoorTest(30, [25, 27]);
doorsArray[31]:= newDoorTest(31, [27, 36]);
doorsArray[32]:= newDoorTest(32, [27, 35]);
doorsArray[33]:= newDoorTest(33, [35, 37]);
doorsArray[34]:= newDoorTest(34, [37, 39]);
doorsArray[35]:= newDoorTest(35, [37, 38]);
doorsArray[36]:= newDoorTest(36, [38, 41]);
doorsArray[37]:= newDoorTest(37, [41, 52]);
doorsArray[38]:= newDoorTest(38, [38, 40]);
doorsArray[39]:= newDoorTest(39, [40, 43]);
doorsArray[40]:= newDoorTest(40, [40, 42]);
doorsArray[41]:= newDoorTest(41, [42, 44]);
doorsArray[42]:= newDoorTest(42, [19, 20]);
doorsArray[43]:= newDoorTest(43, [28, 30]);
doorsArray[44]:= newDoorTest(44, [44, 45]);
doorsArray[45]:= newDoorTest(45, [45, 46]);
doorsArray[46]:= newDoorTest(46, [46, 47]);
doorsArray[47]:= newDoorTest(47, [46, 48]);
doorsArray[48]:= newDoorTest(48, [47, 51]);
doorsArray[49]:= newDoorTest(49, [48, 49]);
doorsArray[50]:= newDoorTest(50, [49, 50]);
doorsArray[51]:= newDoorTest(51, [53, 54]);
doorsArray[52]:= newDoorTest(52, [54, 55]);
doorsArray[53]:= newDoorTest(53, [56, 57]);
doorsArray[54]:= newDoorTest(54, [3, 56]);
doorsArray[55]:= newDoorTest(55, [7, 8]);
doorsArray[56]:= newDoorTest(56, [15, 16]);
First test:
Target : 50 (bottom left)
Source : 30 (boss room)
Compiled successfully in 265 ms.
Analysing room 49
Analysing room 48
Analysing room 46
Analysing room 47
Analysing room 51
Analysing room 45
Analysing room 44
Analysing room 42
Analysing room 40
Analysing room 38
Analysing room 37
Analysing room 39
Analysing room 35
Analysing room 29
Analysing room 33
Analysing room 34
Analysing room 26
Analysing room 28
TARGET ROOM FOUND!
Path to target: [28, 26, 29, 35, 37, 38, 40, 42, 44, 45, 46, 48, 49, 50].
Successfully executed.
Second test:
Target : 22
Source : 50
Compiled successfully in 265 ms.
Analysing room 20
Analysing room 19
Analysing room 21
Analysing room 18
Analysing room 16
Analysing room 15
Analysing room 17
Analysing room 23
Analysing room 13
Analysing room 14
Analysing room 11
Analysing room 6
Analysing room 1
Analysing room 4
Analysing room 0
Analysing room 2
Analysing room 53
Analysing room 54
Analysing room 55
Analysing room 3
Analysing room 56
Analysing room 57
Analysing room 5
Analysing room 7
Analysing room 8
Analysing room 10
Analysing room 9
Analysing room 12
Analysing room 24
Analysing room 25
Analysing room 26
Analysing room 28
Analysing room 30
Analysing room 31
Analysing room 32
Analysing room 29
Analysing room 33
Analysing room 34
Analysing room 27
Analysing room 35
Analysing room 37
Analysing room 38
Analysing room 40
Analysing room 42
Analysing room 44
Analysing room 45
Analysing room 46
Analysing room 47
Analysing room 51
Analysing room 48
Analysing room 49
TARGET ROOM FOUND!
Path to target: [49, 48, 46, 45, 44, 42, 40, 38, 37, 35, 27, 25, 12, 6, 11, 13, 15, 16, 18, 19, 20, 22].
Successfully executed.