Page 21 of 33

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Fri Jan 18, 2013 10:48 pm
by djoldgames
I comited the new wallset on GitHub. But this is early "work in progress" version, please be patient, I must do some bug fixing like graphic glitches (secret door, illusion walls, and others not just reported).

Thank you Thomson for report the kobold rune bug, but I don't know where the problem is. It is the same object as the wall_text_long or rune_2 and there is no bug in these objects. I'm really frustrated with this, I'm spending last hour fixing it but no luck :( .

One of major changes is in the drainage grate and pipe objects, which are "walltext" type from now, with the clickable area, and we can set the texts for it (empty for now).

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Sat Jan 19, 2013 12:31 am
by thomson
I think I know what's the problem with kobold rune. Put it more in the center. If you have it on your right side, the rune itself is not visible, so the engine does not display it (and the whole wall stripe behind it). Open this up in the editor and then change dimensions of the preview box. Don't go full screen. Resize the preview to make it wider (panoramic like 16:9 or even wider). This actually increase FOV (field of view), so you're able to see more to the sides. Keep resizing a little step by step and the bug will gone.

I'm not sure how to fix it. Perhaps locate the rune more centrally on the wall?

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Wed Jan 23, 2013 6:02 pm
by djoldgames
New version (v0.02.14) with new wallset is uploaded on steam and nexus.
http://grimrock.nexusmods.com/mods/20/

Some new stuff added, like this EOB teleporter (R.A.T.S.) sign ;-)
Image

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Wed Jan 23, 2013 7:07 pm
by Neikun
You guys are awesome.

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Mon Jan 28, 2013 5:46 pm
by djoldgames
thomson wrote:...The second is related to drainage gate at 25,21 on level 1. When you click it, there's empty text showing up. In original EOB, there was a creature hiding in there with only eyes visible. Once clicked, a message about unknown creature running away was printed. I suspect this is a preparation for such an action, so I'm not sure if it is a bug or a work in progress.
Now I made this drainage model with glowing red eyes. (in original EOB it is tile 16,14)
Added some dark fog particles to hide the empty space around it...
SpoilerShow
Image
Image

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Mon Jan 28, 2013 5:54 pm
by Komag
Very cool, as usual!

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Mon Jan 28, 2013 11:41 pm
by Isaac
Very cool.
Now... :twisted: It should be scripted so that the eyes disappear when clicked; (and really sharp, reappear on an adjacent drain on the other side of the wall).

Re: [MOD] Eye of the Beholder: Waterdeep Sewers

Posted: Mon Jan 28, 2013 11:55 pm
by Xanathar
It should be scripted so that the eyes disappear when clicked;
And they should give exp! (at least the original did) :twisted:

Script

Posted: Tue Jan 29, 2013 12:16 am
by djoldgames
Xanathar wrote:
It should be scripted so that the eyes disappear when clicked. And they should give exp! (at least the original did) :twisted:
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...

Level 1 sripts:
SpoilerShow
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...

Re: Script

Posted: Tue Jan 29, 2013 1:02 am
by Isaac
djoldgames wrote:... of course we really need something like OnClick() hook on walltext (or other) objects...
So how does the Crystal do it? Hardcoded? As we know, click on the crystal and it tiggers a heal spell;
SpoilerShow
click with Toorum, and it flags the game for Toorum mode.