Yes, now we have to accsess to original EOB srcipts in human readable form, thanks to Bifrost's & Tomsomn's EOBConverter.
New version of EOBConverter (v0.9.6) is able to extract SCRIPTS from original EOB to human readable form. Now we have the right position of the triggers from the original and we able to create the right scripts in grimrock LUA. There is lot of triggers where party gets the Experience, like enter the tile or click on the object in front...
For example, this is the fulll exported script of level 1 of original EOB. Especialy I poit to something (classified as bug) in EOB scripts: it is getting the better Rock (rock +1) called "Igneous Rock" on tile [13, 22] from drainage grate...
Trigger 0 at [18, 23] on Enter, PutItem, FlyingObject {
1 if (trigger.flag = 1) { // if not: jump 20
2 if (party.direction = 1) { // if not: jump 10
3 if (maze.flag(31) = 0) { // if not: jump 6
4 callEncounter(10)
5 maze.setFlag(31)
}
6 show("going down...", Color.Yellow)
7 play.sound(79, 0)
8 level.change(2, 19, 23, East) // level, x, y, direction
9 } else { // jump 20
10 show("you can't go that way.", Color.White)
11 play.sound(29, 0)
12 if (1 = 0) { // if not: jump 14
13 teleport.teleport(Party, 0, 0, 18, 24) // type, srcX, srcY, dstX, dstY
}
14 if (1 = 1) { // if not: jump 16
15 teleport.teleport(Party, 0, 0, 17, 23) // type, srcX, srcY, dstX, dstY
}
16 if (1 = 2) { // if not: jump 18
17 teleport.teleport(Party, 0, 0, 18, 22) // type, srcX, srcY, dstX, dstY
}
18 if (1 = 3) { // if not: jump 20
19 teleport.teleport(Party, 0, 0, 19, 23) // type, srcX, srcY, dstX, dstY
}
}
}
20 if (trigger.flag = 4) { // if not: jump 29
21 if (1 = 0) { // if not: jump 23
22 teleport.teleport(Item, 18, 23, 18, 24) // type, srcX, srcY, dstX, dstY
}
23 if (1 = 1) { // if not: jump 25
24 teleport.teleport(Item, 18, 23, 17, 23) // type, srcX, srcY, dstX, dstY
}
25 if (1 = 2) { // if not: jump 27
26 teleport.teleport(Item, 18, 23, 18, 22) // type, srcX, srcY, dstX, dstY
}
27 if (1 = 3) { // if not: jump 29
28 teleport.teleport(Item, 18, 23, 19, 23) // type, srcX, srcY, dstX, dstY
}
}
29 end
}
Trigger 1 at [17, 23] on Enter {
30 if (maze.flag(10) = 0) { // if not: jump 33
31 experience.add(Party, 1600)
32 maze.setFlag(10)
}
33 end
}
Trigger 2 at [10, 13] on Enter {
34 experience.add(Party, 10000)
35 end
}
Trigger 3 at [22, 20] on Enter {
36 if (maze.flag(8) = 0) { // if not: jump 39
37 experience.add(Party, 1600)
38 maze.setFlag(8)
}
39 end
}
Trigger 4 at [14, 14] on PutItem, PickUpItem {
40 if (maze.flag(4) = 0) { // if not: jump 43
41 experience.add(Party, 400)
42 maze.setFlag(4)
}
43 end
}
Trigger 5 at [13, 13] on Click {
44 play.sound(1, 429)
45 door.open(14, 13)
46 if (maze.flag(1) = 0) { // if not: jump 49
47 experience.add(Party, 800)
48 maze.setFlag(1)
}
49 end
}
Trigger 6 at [16, 10] on Enter {
50 if (maze.wallNumber(21, 11) <> 1) { // if not: jump 53
51 wall.setBlock(17, 16, Wall.wall1) // x, y, wallId (id: 1)
52 wall.setBlock(14, 25, Wall.wall1) // x, y, wallId (id: 1)
}
53 if (maze.flag(2) = 0) { // if not: jump 56
54 experience.add(Party, 400)
55 maze.setFlag(2)
}
56 end
}
Trigger 7 at [17, 12] on Enter {
57 if (maze.wallNumber(17, 16) <> 1) { // if not: jump 61
58 wall.setWall(9, 22, North, Wall.wall1) // x, y, direction, wallId (id: 1)
59 wall.setBlock(21, 11, Wall.wall1) // x, y, wallId (id: 1)
60 wall.setBlock(13, 26, Wall.wall1) // x, y, wallId (id: 1)
}
61 maze.setFlag(2)
62 end
}
Trigger 8 at [23, 13] on Click {
63 if (maze.wallSide(North, 23, 13) <> 1) { // if not: jump 69
64 play.sound(7, 439)
65 door.open(22, 13)
66 if (maze.flag(5) = 0) { // if not: jump 69
67 experience.add(Party, 800)
68 maze.setFlag(5)
}
}
69 end
}
Trigger 9 at [22, 14] on Enter {
70 if (maze.wallNumber(22, 14) = 28) { // if not: jump 76
71 play.sound(12, 470)
72 door.open(22, 13)
73 if (maze.flag(7) = 0) { // if not: jump 76
74 experience.add(Party, 800)
75 maze.setFlag(7)
}
}
76 end
}
Trigger 10 at [22, 17] on Enter, Leave, PutItem, PickUpItem {
77 if (((trigger.flag = 1 && maze.itemCount(22, 17, ItemType.any/*id: 255*/) = 0) || ((trigger.flag = 4 && maze.itemCount(22, 17, ItemType.any/*id: 255*/) = 1) && party.atPosition(22, 17) = 0))) { // if not: jump 80
78 play.sound(12, 566)
79 door.open(22, 19)
}
80 if (((trigger.flag = 2 && maze.itemCount(22, 17, ItemType.any/*id: 255*/) = 0) || ((trigger.flag = 8 && maze.itemCount(22, 17, ItemType.any/*id: 255*/) = 0) && party.atPosition(22, 17) = 0))) { // if not: jump 83
81 play.sound(12, 566)
82 door.close(22, 19)
}
83 end
}
Trigger 11 at [18, 18] on Click {
84 play.sound(1, 594)
85 door.open(19, 18)
86 end
}
Trigger 12 at [14, 19] on Click {
87 if (maze.wallSide(East, 14, 19) <> 1) { // if not: jump 93
88 play.sound(7, 622)
89 door.open(14, 18)
90 if (maze.flag(5) = 0) { // if not: jump 93
91 experience.add(Party, 800)
92 maze.setFlag(5)
}
}
93 end
}
Trigger 13 at [13, 18] on Enter {
94 if (maze.wallNumber(13, 18) = 28) { // if not: jump 100
95 play.sound(12, 589)
96 door.open(14, 18)
97 if (maze.flag(7) = 0) { // if not: jump 100
98 experience.add(Party, 800)
99 maze.setFlag(7)
}
}
100 end
}
Trigger 14 at [18, 21] on Click {
101 play.sound(7, 690)
102 play.sound(13, 659)
103 wall.changeBlock(19, 20, Wall.wall1, Wall.empty) // x, y, fromWallId, toWallId (formWallId: 1, toWallId: 0)
104 teleport.teleport(Monster, 19, 20, 19, 19) // type, srcX, srcY, dstX, dstY
105 if (maze.flag(6) = 0) { // if not: jump 108
106 experience.add(Party, 1600)
107 maze.setFlag(6)
}
108 end
}
Trigger 15 at [26, 21] on Click {
109 play.sound(7, 698)
110 teleport.teleport(Monster, 25, 20, 25, 19) // type, srcX, srcY, dstX, dstY
111 play.sound(13, 665)
112 wall.changeBlock(25, 20, Wall.wall1, Wall.empty) // x, y, fromWallId, toWallId (formWallId: 1, toWallId: 0)
113 if (maze.flag(6) = 0) { // if not: jump 116
114 experience.add(Party, 1600)
115 maze.setFlag(6)
}
116 end
}
Trigger 16 at [7, 23] on Click {
117 if (maze.wallSide(East, 7, 23) <> 1) { // if not: jump 123
118 play.sound(7, 743)
119 door.open(8, 22)
120 if (maze.flag(5) = 0) { // if not: jump 123
121 experience.add(Party, 800)
122 maze.setFlag(5)
}
}
123 end
}
Trigger 17 at [9, 22] on Click {
124 play.sound(7, 713)
125 if (maze.wallSide(North, 9, 22) <> 1) { // if not: jump 131
126 door.open(8, 22)
127 wall.setWall(7, 23, East, Wall.wall1) // x, y, direction, wallId (id: 1)
128 if (maze.flag(5) = 0) { // if not: jump 131
129 experience.add(Party, 800)
130 maze.setFlag(5)
}
}
131 end
}
Trigger 18 at [17, 24] on Click {
132 play.sound(12, 785)
133 door.open(17, 23)
134 end
}
Trigger 19 at [16, 23] on Enter, PutItem {
135 if ((trigger.flag = 1 && maze.itemCount(16, 23, ItemType.any/*id: 255*/) = 0)) { // if not: jump 138
136 play.sound(12, 752)
137 door.close(17, 23)
}
138 if ((trigger.flag = 4 && (party.atPosition(16, 23) = 0 && maze.itemCount(16, 23, ItemType.any/*id: 255*/) < 2))) { // if not: jump 141
139 play.sound(12, 752)
140 door.close(17, 23)
}
141 end
}
Trigger 20 at [25, 19] on Enter {
142 if (maze.flag(0) = 0) { // if not: jump 145
143 show("it smells terrible here.", Color.Cyan)
144 maze.setFlag(0)
}
145 end
}
Trigger 21 at [7, 24] on Click {
146 show("this slimy, smelly drain pipe reveals nothing.", Color.Cyan)
147 if (maze.flag(3) = 0) { // if not: jump 150
148 experience.add(Party, 800)
149 maze.setFlag(3)
}
150 end
}
Trigger 22 at [13, 22] on Click {
151 show("there is a drainage grate here.", Color.Cyan)
152 if (maze.flag(3) = 0) { // if not: jump 155
153 experience.add(Party, 800)
154 maze.setFlag(3)
}
155 if ((party.item = 0 && maze.flag(1) = 0)) { // if not: jump 158
156 item.create(31, 31, NW, Item.rock_glowing) // x, y, position, elementType (name: "Igneous Rock", id: 58)
157 maze.setFlag(1)
}
158 end
}
Trigger 23 at [20, 24] on Click {
159 show("this slimy, smelly drain pipe reveals nothing.", Color.Cyan)
160 if (maze.flag(3) = 0) { // if not: jump 163
161 experience.add(Party, 800)
162 maze.setFlag(3)
}
163 end
}
Trigger 24 at [24, 21] on Click {
164 show("there is a drainage grate here.", Color.Cyan)
165 if (maze.flag(3) = 0) { // if not: jump 168
166 experience.add(Party, 800)
167 maze.setFlag(3)
}
168 end
}
Trigger 25 at [18, 17] on Click {
169 show("there is a drainage grate here.", Color.Cyan)
170 if (maze.flag(3) = 0) { // if not: jump 173
171 experience.add(Party, 800)
172 maze.setFlag(3)
}
173 end
}
Trigger 26 at [15, 14] on Click {
174 if (maze.flag(3) = 0) { // if not: jump 177
175 experience.add(Party, 800)
176 maze.setFlag(3)
}
177 if (party.atPosition(14, 14) = 1) { // if not: jump 185
178 if (maze.wallSide(West, 15, 14) = 44) { // if not: jump 183
179 show("something scurries deeper into the floor drain.", Color.Cyan)
180 wall.setWall(15, 14, West, Wall.sewersWallWithDrainageBent2) // x, y, direction, wallId (id: 62)
181 wall.setWall(15, 14, East, Wall.sewersWallWithDrainageBent1) // x, y, direction, wallId (id: 44)
182 } else { // jump 184
183 show("there is a drainage grate here.", Color.Cyan)
}
184 } else { // jump 191
185 if (maze.wallSide(East, 15, 14) = 44) { // if not: jump 190
186 show("something scurries deeper into the floor drain.", Color.Cyan)
187 wall.setWall(15, 14, East, Wall.sewersWallWithDrainageBent2) // x, y, direction, wallId (id: 62)
188 wall.setWall(15, 14, West, Wall.sewersWallWithDrainageBent1) // x, y, direction, wallId (id: 44)
189 } else { // jump 191
190 show("there is a drainage grate here.", Color.Cyan)
}
}
191 end
}
Trigger 27 at [14, 12] on Enter {
192 wall.setWall(15, 14, West, Wall.sewersWallWithDrainageBent1) // x, y, direction, wallId (id: 44)
193 wall.setWall(15, 14, East, Wall.sewersWallWithDrainageBent1) // x, y, direction, wallId (id: 44)
194 end
}
Trigger 28 at [20, 12] on Click {
195 show("this slimy, smelly drain pipe reveals nothing.", Color.Cyan)
196 if (maze.flag(3) = 0) { // if not: jump 199
197 experience.add(Party, 800)
198 maze.setFlag(3)
}
199 end
}
Trigger 29 at [19, 12] on Click {
200 if (maze.flag(3) = 0) { // if not: jump 203
201 experience.add(Party, 800)
202 maze.setFlag(3)
}
203 if (party.containsRace(Race.Gnome) = 1) { // if not: jump 206
204 show("kobold rune for 'entrance'.", Color.Cyan)
205 } else { // jump 207
206 show("this rune is unrecognized.", Color.Cyan)
}
207 end
}
Trigger 30 at [15, 22] on Click {
208 if (maze.flag(3) = 0) { // if not: jump 211
209 experience.add(Party, 800)
210 maze.setFlag(3)
}
211 if (party.containsRace(Race.Gnome) = 1) { // if not: jump 214
212 show("kobold rune for 'entrance'.", Color.Cyan)
213 } else { // jump 215
214 show("this rune is unrecognized.", Color.Cyan)
}
215 end
}
Trigger 31 at [12, 24] on PutItem, PickUpItem {
216 if ((maze.itemCount(12, 24, ItemType.dagger/*id: 5*/) > 0 && misc.flag(Global, 1) = 0)) { // if not: jump 223
217 show("special quest for this level!", Color.Green)
218 play.sound(28, 0)
219 global.setFlag(1)
220 item.consume(AtPosition, 5, 0, ItemType.dagger) // type, x, y, itemtype (id: 5)
221 item.create(12, 24, Alcove, Item.dagger_guinsoo) // x, y, position, elementType (name: "'Guinsoo'", id: 49)
222 global.setFlag(1)
}
223 if (maze.flag(9) = 0) { // if not: jump 226
224 experience.add(Party, 400)
225 maze.setFlag(9)
}
226 end
}
Trigger 32 at [10, 14] on Click {
227 show("fallen rocks block the way.", Color.Cyan)
228 end
}
Trigger 33 at [11, 15] on Enter {
229 wall.setWall(10, 14, South, Wall.unknown) // x, y, direction, wallId (id: 49)
230 end
}
Trigger 34 at [10, 15] on Enter {
231 wall.setWall(10, 14, South, Wall.sewersCaveIn) // x, y, direction, wallId (id: 69)
232 end
}
Trigger 35 at [1, 4] on Click {
233 if (maze.wallSide(West, 2, 3) = 8) { // if not: jump 256
234 if ((party.item.type = 38 && party.item.value = 1)) { // if not: jump 239
235 play.sound(14, 129)
236 door.open(2, 3)
237 item.consume(AtMousePointer, -1, -1, ItemType.any) // type, x, y, itemtype (id: 255)
238 } else { // jump 255
239 if (party.item.type = 38) { // if not: jump 243
240 show("it doesn't fit.", Color.LightRed)
241 play.sound(81, 129)
242 } else { // jump 255
243 if (party.item.type = 28) { // if not: jump 254
244 if (party.containsClass(Class.Thief) = 1) { // if not: jump 252
245 play.sound(81, 129)
246 show("failed lock pick attempt.", Color.Yellow)
247 if (rollDice(1D100 + 0) = 1) { // if not: jump 251
248 play.sound(82, 0)
249 show("the lock picks break!.", Color.LightRed)
250 item.consume(AtMousePointer, -1, -1, ItemType.any) // type, x, y, itemtype (id: 255)
}
251 } else { // jump 253
252 show("only a thief can pick locks.", Color.LightRed)
}
253 } else { // jump 255
254 show("this lock requires a key.", Color.White)
}
}
}
255 } else { // jump 257
256 show("the lock appears jammed.", Color.LightRed)
}
257 end
}
Trigger 36 at [1, 2] on Enter {
258 wall.setWall(2, 1, West, Wall.unknown) // x, y, direction, wallId (id: 49)
259 end
}
Trigger 37 at [1, 1] on Enter {
260 wall.setWall(2, 1, West, Wall.sewersCaveIn) // x, y, direction, wallId (id: 69)
261 end
}
... of course we really need something like OnClick() hook on walltext (or other) objects...