Files @ 9845ab51a6c8
Branch filter:

Location: games/Dragon-and-the-Tower/solarscale.lua

Silverwing
Multiple fixes and improvements
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
obj {
	level_1_visited = false;
	nam = 'solarscale_ally';
	dsc = function(s)
		if here()^'above_forest' or here()^'above_near_village' or here()^'above_village' or here()^'above_crater' or here()^'above_west' then
			return '{Соларскейл} летит следом за мной. ';
		elseif here()^'forest_glade' then
			return '{Соларскейл} неспешно прогуливается по полянке, разглядывая и принюхиваясь к цветам. ';
		elseif here()^'crater_near_tower' then
			return '{Соларскейл} нетерпеливо машет крыльями у входа в башню. ';
		elseif here()^'tower_level_1' then
			return '{Соларскейл} медленно летает по залу, внимательно осматривая его. ';
		elseif here()^'tower_level_2' then
			return '{Соларскейл} внимательно рассматривает полки с реагентами. ';
		elseif here()^'tower_level_3' then
			return '{Соларскейл} задумчиво кружит над столом. ';
		elseif here()^'tower_level_4' then
			return '{Соларскейл} сидит на полу неподалеку от тумбочки со свечами. '
		elseif here()^'tower_level_4_room_2' then
			return '{Соларскейл} сидит на столе рядом с компьютером. '
		elseif here()^'tower_level_3_room_2' then
			if here().light then
				return '{Соларскейл} висит над стеллажами, почти под самым потолком помещения. ';
			else
				return 'Я с трудом различаю во мраке очертания {Соларскейл}. ';
			end;
		end;
	
		return 'За моей спиной машет крыльями {Соларскейл}. ';
	end;
	act = function(s)
		walkin('solarscale_ally_dlg');
	end;
	life = function(s)
		if (not here().nofollow) then
			if (here() ~= where('solarscale_ally')) then
				if here()^'crater_near_tower' then
					p 'Едва заметив открывшийся проем, Соларскейл бросается к нему и, замерев перед самым входом, обращается ко мне: "Скорее, пока он не закрылся!" ';
				elseif here()^'tower_level_1' and not s.level_1_visited then
					s.level_1_visited = true;
					p 'Соларскейл оглядывает зал с нескрываемым восторгом. "Как здесь красиво!" -- Восклицает она. ';
				elseif here()^'above_forest' and where('solarscale_ally')^'forest_glade' then
					p 'Соларскейл бросает прощальный взгляд на поляну и взмывает в воздух следом за мной. ';
				else
					p 'Соларскейл следует за мной. ';
				end;
				remove('solarscale_ally', where('solarscale_ally'));
				put('solarscale_ally', where(pl));
			end;
		elseif type(here().nofollow) == 'function' then
			local nofollow = here():nofollow();
			if type(nofollow) == 'string' then
				return nofollow;
			end;
		elseif type(here().nofollow) == 'string' then
			return here().nofollow;
		end;
	end;
}

dlg {
	nam = 'solarscale_ally_dlg';
	disp = 'Соларскейл';
	enter = function(s)
		local from = here():from();
		if from^'above_forest' then
			return 'Я оборачиваюсь к Соларскейл, мерно взмахивающей крыльями позади меня. Она спрашивает: "Куда мы летим?"';
		elseif from^'tower_level_1' then
			return 'Мне пришлось окликнуть Соларскейл, чтобы она обратила на меня внимание. Она восклицает: "Это место... Потрясающе!"';
		elseif from^'tower_level_2' then
			return 'Соларскейл тихо шепчет про себя: "Потрясающе! Если бы у меня была такая лаборатория!"';
		elseif from^'tower_level_3' then
			return 'Соларскейл зависает в воздухе напротив меня и тихо спрашивает: "Могу я чем-то помочь?"';
		elseif from^'tower_level_4' then
			return 'Соларскейл вопросительно смотрит на меня. ';
		elseif from^'tower_level_4_room_2' then
			if power_on then
				if pc_status == 'fail' then
					return 'Соларскейл рассматривает клавиатуру терминала. ';
				else
					return 'Соларскейл рассматривает клавиатуру терминала. Она спрашивает: "Попробуем включить?" ';
				end;
			else
				return 'Соларскейл рассматривает клавиатуру терминала. Она сообщает: "Похоже, электричества нет". ';
			end;
		elseif from^'tower_level_3_room_2' then
			if from.light then
				return 'Соларскейл удивленно восклицает: "Поражаюсь размеру этого склада! Кажется, эта башня внутри больше чем снаружи!"';
			else
				return 'Соларскейл сетует: "В этой темени вообще ничего не видно! Надо бы принести свет". ';
			end;
		elseif from^'tower_level_2_room_2' then
			return 'Соларскейл восклицает: "Эта башня не перестает удивлять! Что еще мы здесь обнаружим?"';
		elseif from^'crater_near_tower' then
			return 'Соларскейл повторяет, обращаясь ко мне: "Скорее, пока проход открыт!"';
		elseif from^'forest_glade' then
			return 'Соларскейл неспешно прогуливается по полянке, разглядывая и принюхиваясь к цветам. Некоторые из них она бережно срывает и укладывает в свою сумку. Заметив мой взгляд, она произносит: "Очень красивое место. Мне здесь, правда, очень нравится". ';
		elseif from^'above_near_village' then
			return 'Я оборачиваюсь к Соларскейл, мерно взмахивающей крыльями позади меня. Она спрашивает: "Куда мы летим?" ';
		elseif from^'near_village' then
			return 'Соларскейл задумчиво смотрит вдаль, на деревню: "Приятное местечко. Не отказалась бы и я здесь пожить". ';
		elseif from^'above_village' then
			return 'Я оборачиваюсь к Соларскейл, мерно взмахивающей крыльями позади меня. Она сообщает: "Нам, драконам, лучше не показываться людям в истинном обличии. Давайте не будем здесь задерживаться". ';
		elseif from^'inside_crater_path' then
			return 'Соларскейл решительно восклицает: "Я готова! Вперед!"';
		elseif from ^'inside_crater_glade' then
			return 'Соларскейл спрашивает: "Интересно, кто проложил эту тропу? Как будто специально для нас". ';
		elseif from^'above_crater' then
			return 'Соларскейл осматривается вокруг и произносит: "Вы выбрали лучшее место для приземления, если действительно хотите попасть в эту башню. Вернемся?" ';
		elseif from^'above_west' then
			return 'Соларскейл осматривается вокруг: "Отсюда потрясающий вид. Как вы узнали про этот кратер?" ';
		end;
		
		return [[Соларскейл с улыбкой смотрит на меня. ]];
	end;
	phr = {
		{cond=function(s) return here():from()^'tower_level_1' and not have('tower_box') and not _('tower_level_1').keys_taken and not have('tower_level_2_key') and _('level_1_up'):disabled() end, 'У вас есть идеи, как открыть эту дверь?', 'Соларскейл задумчиво произносит: "Пока не знаю. Надо все внимательно осмотреть". '};
		{cond=function(s) return here():from()^'tower_level_1' and have('tower_box') and not _('tower_level_1').keys_taken and _('level_1_up'):disabled() end, 'У вас есть идеи, что мы должны сделать?', 'Соларскейл подлетает ко мне: "Я могу взглянуть на шкатулку, что вы только что подняли?" ', 
			only=true;
			{'[Протянуть шкатулку Соларскейл] Да, конечно. ', 'Соларскейл берет шкатулку и внимательно осматривает, прежде чем вернуть ее мне. Наконец, она изрекает: "Четыре замочные скважины... Наверное, и ключи должны быть где-то здесь". '};
			{'Не сейчас. ', 'Соларскейл пожимает плечами: "Что же, тогда ничем не могу помочь". '};
		};
		{cond=function(s) return here():from()^'tower_level_1' and not have('tower_box') and _('tower_level_1').keys_taken and not have('tower_level_2_key') and _('level_1_up'):disabled() end, 'У вас есть идеи, что мы должны сделать?', 'Соларскейл спрашивает: "Вы уверены, что ни один из ключей не подходит к двери?" ',
			only=true;
			{'Нет, это ключи не от этой двери.', '"Они здесь явно не просто так. Надо поискать повнимательнее", -- задумчиво сообщает драконесса. '};
			{'Предположим, не подходит.', '"Они здесь явно не просто так. Надо поискать повнимательнее", -- задумчиво сообщает драконесса. '};
			{'Я не проверял.', 'Соларскейл задумчиво отвечает: "Надо бы проверить... Хотя это слишком просто..."'};
		};
		{cond=function(s) return here():from()^'tower_level_1' and have('tower_box') and _('tower_level_1').keys_taken and not have('tower_level_2_key') and _('level_1_up'):disabled() end, 'У вас есть идеи, что мы должны сделать?', 'Соларскейл подлетает ко мне и спрашивает: "Могу я взглянуть?" ',
			only=true;
			{'[Протянуть шкатулку, ключи и записку Соларскейл] Да, конечно. ', function(s)
				if solarscale_helps > 0 then
					open('#level1_agree');
					open('#level1_disagree');
					close('#level1_no_help');
					return 'Соларскейл берет предметы у вас и раскладываеть их на столе. Немного подумав, она сообщает: "Кажется, у меня есть идея. Позволите попробовать?"';
				else
					close('#level1_agree');
					close('#level1_disagree');
					open('#level1_no_help');
					return 'Соларскейл берет предметы у вас и раскладываеть их на столе. Немного подумав, она делает вывод: "Боюсь, я не могу вам ничем помочь". ';
				end;
			end,
				only=true;
				{'#level1_agree', 'Да, конечно. ', function(s)
					remove('tower_box', pl);
					remove('tower_hint_1', pl);
					remove('tower_key_0', pl);
					remove('tower_key_1', pl);
					remove('tower_key_2', pl);
					remove('tower_key_3', pl);
					take('tower_level_2_key');
					solarscale_helps = solarscale_helps - 1;
					return 'Драконесса еще некоторое время остается неподвижной, раздумывая, затем начинает перебирать ключи. Воскликнув: "Ага!" -- Она вставляет ключ за ключом в замочные скважины, и шкатулка разваливается в ее руках. Внутри шкатулки оказывается небольшой серебряный ключик. Соларскейл протягивает его мне со словами: "Попробуйте открыть им дверь". ';
				end};
				{'#level1_disagree', 'Спасибо, но я лучше попробую сам. ', 'Соларскейл молча возвращает вам предметы. '};
				{'#level1_no_help', 'Спасибо, тогда я попробую сам. ', 'Соларскейл молча возвращает вам предметы. '};
			};
			{'Не сейчас. ', 'Соларскейл пожимает плечами: "Что же, тогда ничем не могу помочь". '};
		};
		{cond=function(s) return here():from()^'tower_level_2' end, 'Вы увлекаетесь алхимией?', 'Соларскейл немного смущенно отвечает: "Мне всегда было это интересно, но... Как бы выразиться помягче... У меня не получилось ни одного сколь-либо сложного зелья. Мне очень хочется научиться этому". ', 
			{"Жаль, мне не помешала бы ваша помощь.", 'Соларскейл опускает глаза: "Простите. Надеюсь смогу быть полезна в чем-нибудь другом". '};
		};
		{cond=function(s) return here():from()^'tower_level_3' and _('level_3_up'):disabled() end, 'У вас есть какие-то мысли по поводу этой загадки?', function(s)
			if solarscale_helps > 0 then
				open('#level3_agree');
				open('#level3_disagree');
				close('#level3_no_help');
				return 'Соларскейл кивает: "Да, есть кое-что. Позволите попробовать?"' 
			else
				close('#level3_agree');
				close('#level3_disagree');
				open('#level3_no_help');
				return 'Соларскейл отрицательно мотает головой: "У меня нет никаких идей". ' 
			end;
		end, only=true, 
			{"#level3_agree", 'Да, конечно. ', function(s)
				remove('figure_wolf', pl);
				remove('figure_tiger', pl);
				remove('figure_lion', pl);
				remove('figure_knight', pl);
				remove('figure_tower', pl);
				_('tower_level_3_table').solved = true;
				_('level_3_up'):enable();
				solarscale_helps = solarscale_helps - 1;
				return 'Соларскейл берет фигурки и неспешно, одну за другой, ставит их в отведенные углубления. Легкий щелчок дает нам понять, что дверь на следующий этаж башни открыта. ';
			end};
			{"#level3_disagree", "Сначала я попробую сам. ", 'Соларскейл молча кивает. '};
			{"#level3_no_help", "Что же, тогда я попробую сам. ", 'Соларскейл молча кивает. '};
		};
		{cond=function(s) return here():from()^'tower_level_4' and _('level_4_next_room'):disabled() end, 'Вы знаете, что мы должны сделать?', function(s)
			if solarscale_helps > 0 then
				open('#level4_agree');
				open('#level4_disagree');
				close('#level4_no_help');
				
				return 'Соларскейл задумчиво произносит: "Да, думаю, я могу помочь". ';
			else
				close('#level4_agree');
				close('#level4_disagree');
				open('#level4_no_help');
				
				return 'Соларскейл отрицательно мотает головой: "К сожалению, я не знаю, что здесь делать".';
			end;
		end, only=true,
			{"#level4_agree", '[Позволить Соларскейл все сделать]', function(s)
				candles_solved = true;
				_('level_3_up'):enable();
				solarscale_helps = solarscale_helps - 1;
				
				local c = _('tower_candelabra')
				
				if #c.notestack == 0 then
					local ns = {1,2,3,4,5,6,7};
					
					for i = 1, 7 do
						local idx = rnd(#ns);
						table.insert(c.notestack, ns[idx]);
						table.insert(c.notesequence, c.notes[ns[idx]][2]);
						ns[idx] = ns[8 - i];
						ns[8 - i] = nil;
					end;
				end;
				
				local ns = table.copy(c.notesequence);
				
				ns[#ns + 1] = gusts[rnd(#gusts)];
				ns[#ns + 1]	= 'open_door';
				
				play_sound(ns, 600);
			
				_('level_4_next_room'):enable();
				
				return 'Соларскейл последовательно зажигает свечи. В темноте одна за другой звучат ноты, а затем резкий порыв ветра распахивает дверцу в дальнем конце комнаты. ';
			end};
			{"#level4_disagree", "Сначала я попробую сам. ", 'Соларскейл молча кивает. '};
			{"#level4_no_help", "Что же, тогда я попробую сам. ", 'Соларскейл молча кивает. '};
		};
		{cond=function(s) return here():from()^'tower_level_4_room_2' and power_on and pc_status ~= 'fail' end, 'Включайте!', function(s)
			pr [[Соларскейл включает компьютер. ]];
			local rval = _('system_unit'):check(true);
		
			close('#tl4r2a');
		
			if rval == 'motherboard' then
				pr [[Пролистав руководство, драконесса констатирует: "Похоже, не работает материнская плата. Надо бы поискать замену". ]];
				return;
			elseif rval == 'cpu' then
				pr [[Пролистав руководство, драконесса констатирует: "Похоже, не работает центральный процессор. Надо бы поискать замену". ]];
				return;
			elseif rval == 'ram' then
				pr [[Пролистав руководство, драконесса констатирует: "Похоже, не работает оперативная память. Надо бы поискать замену". ]];
				return;
			elseif rval == 'video' then
				pr [[Пролистав руководство, драконесса констатирует: "Похоже, не работает видеокарта. Надо бы поискать замену". ]];
				return;
			elseif rval == 'keyboard' then
				pr [[Пролистав руководство, драконесса констатирует: "Похоже, не работает контроллер клавиатуры. Надо бы поискать замену". ]];
				return;
			end;
		
			open('#tl4r2a');
		
			pr [[Драконесса, посмотрев на экран, сообщает: "Кажется, заработал". ]];
		end,
        {
			'#tl4r2a', "[Подойти к терминалу]Отлично, посмотрим.",
			function(s)
				walkin('terminal');
			end;
		},
        {'Вы сможете отремонтировать его?', function(s)
			if have('part_box') then
				if solarscale_helps > 0 then
					open('#tl4r2cfa');
					open('#tl4r2cfb');
					close('#tl4r2cfc');
					close('#tl4r2cfd');
					return 'Соларскейл заглядывает в коробку с запчастями и, немного покопавшись в ней, сообщает: "Думаю, справлюсь. Позволите?"';
				else
					close('#tl4r2cfa');
					close('#tl4r2cfb');
					close('#tl4r2cfc');
					open('#tl4r2cfd');
					return 'Соларскейл с сожалением сообщает: "Не думаю, что смогу помочь. Я никогда не встречала компьютеров такого типа". ';
				end;
			else
				close('#tl4r2cfa');
				close('#tl4r2cfb');
				close('#tl4r2cfd');
				open('#tl4r2cfc');
				return 'Соларскейл задумчиво говорит: "Только если мы найдем запасные детали". '
			end;
		end, only=true,
			{'#tl4r2cfa', 'Да, разумеется. ', function(s)
				walkout();
				local motherboard = lookup('#motherboard', _'system_unit');
				local cpu= lookup('#cpu', _'system_unit');
				local ram = lookup('#ram', _'system_unit');
				local slot1 = lookup('#slot1', _'system_unit');
				local slot2 = lookup('#slot2', _'system_unit');
				local slot3 = lookup('#slot3', _'system_unit');
			
				motherboard.device = _'crx-rdt-i3sb';
				cpu.device = _'rcpu200-crx-20mhz';
				ram.device = _'rdt-m32-32mb';
				slot1.device = _'gva-rx4';
				slot2.device = _'fna-100-10mbs_2';
				slot3.device = _'kbc-s';
			
				solarscale_helps = solarscale_helps - 1;
	            pc_status = 'ok';
			
				return 'Соларскейл привычно разбирает компьютер и, заглянув в инструкцию, меняет сломанные детали на новые. Закончив, она собирает его обратно. "Посмотрите! Кажется, я даже смогла немного улучшить его!"';
			end},
			{'#tl4r2cfb', 'Спасибо, но я сам справлюсь. ', function(s)
				walkout();
				return 'Соларскейл молча кивает. ';
			end},
			{'#tl4r2cfc', 'Как думаете, где они могут быть?', function(s)
				return 'Соларскейл отвечает: "Этажом ниже был склад, кажется. Есть смысл начать поиск оттуда". ';
			end},
			{'#tl4r2cfd', '[Закончить разговор]', function(s)
				walkout();
			end}
		};
		{
			'#tl4r2b', "[Закончить диалог]",
			function(s)
				walkout();
			end;
		}};
		{cond=function(s) return here():from()^'tower_level_4_room_2' and pc_status == 'fail'; end, 'Вы сможете отремонтировать его?', function(s)
			if have('part_box') then
				if solarscale_helps > 0 then
					open('#tl4r2fa');
					open('#tl4r2fb');
					close('#tl4r2fc');
					close('#tl4r2fd');
					return 'Соларскейл заглядывает в коробку с запчастями и, немного покопавшись в ней, сообщает: "Думаю, справлюсь. Позволите?"';
				else
					close('#tl4r2fa');
					close('#tl4r2fb');
					close('#tl4r2fc');
					open('#tl4r2fd');
					return 'Соларскейл с сожалением сообщает: "Не думаю, что смогу помочь. Я никогда не встречала компьютеров такого типа". ';
				end;
			else
				close('#tl4r2fa');
				close('#tl4r2fb');
				close('#tl4r2fd');
				open('#tl4r2fc');
				return 'Соларскейл задумчиво говорит: "Только если мы найдем запасные детали". '
			end;
		end, only=true,
			{'#tl4r2fa', 'Да, разумеется. ', function(s)
				walkout();
				local motherboard = lookup('#motherboard', _'system_unit');
				local cpu= lookup('#cpu', _'system_unit');
				local ram = lookup('#ram', _'system_unit');
				local slot1 = lookup('#slot1', _'system_unit');
				local slot2 = lookup('#slot2', _'system_unit');
				local slot3 = lookup('#slot3', _'system_unit');
			
				motherboard.device = _'crx-rdt-i3sb';
				cpu.device = _'rcpu200-crx-20mhz';
				ram.device = _'rdt-m32-32mb';
				slot1.device = _'gva-rx4';
				slot2.device = _'fna-100-10mbs_2';
				slot3.device = _'kbc-s';
			
				solarscale_helps = solarscale_helps - 1;
	            pc_status = 'ok';
			
				return 'Соларскейл привычно разбирает компьютер и, заглянув в инструкцию, меняет сломанные детали на новые. Закончив, она собирает его обратно. "Посмотрите! Кажется, я даже смогла немного улучшить его!"';
			end},
			{'#tl4r2fb', 'Спасибо, но я сам справлюсь. ', function(s)
				walkout();
				return 'Соларскейл молча кивает. ';
			end},
			{'#tl4r2fc', 'Как думаете, где они могут быть?', function(s)
				return 'Соларскейл отвечает: "Этажом ниже был склад, кажется. Есть смысл начать поиск оттуда". ';
			end},
			{'#tl4r2fd', '[Закончить разговор]', function(s)
				walkout();
			end}
		};
		{cond=function(s) return here():from()^'tower_level_4_room_2' and not power_on end, 'Что мы можем сделать?', 'Соларскейл пожимает плечами: "Отсюда, скорее всего, ничего. Давайте осмотрим другие помещения". '};
		{'#cnt1', cond=function(s) return here():from()^'crater_near_tower' end, 'Что если дверь закроется как только мы войдем?', function(s)
			close('#cnt2');
			return 'Соларскейл решительно отвечает: "Разберемся! Неужели вам не интересно?"';
		end};
		{'#cnt2', cond=function(s) return here():from()^'crater_near_tower' end, 'Если честно, я не думаю, что дверь закроется, пока мы не вошли. ', function(s)
			close('#cnt1');
			return 'Соларскейл неуверенно произносит: "Откуда нам знать..."';
		end};
		{cond=function(s) return here():from()^'above_west' end, 'Я нашел карту, ведущую к нему, в деревне, что к востоку отсюда.', 'Соларскейл молча кивает, видимо ожидая, что я скажу что-то еще.', 
			only = true,
			{'Я хочу посетить ее еще раз, прежде чем вернуться в кратер. ', 'Соларскейл согласно кивает: "Я подожду вас в лесу. Я не умею превращаться, как вы, и не хочу... -- Она на мгновение замолкает, подбирая нужное слово. -- Обескуражить местных жителей своим видом". '};
			{'Вам знакомо это место?', 'Соларскейл отрицательно качает головой: "Я впервые в этих краях, как и вы". '};
		};
		{cond=function(s) return here():from()^'inside_crater_glade' end; 'Если лететь из деревни, то это самое разумное место для приземления... ', 'Соларскейл размышляет вслых: "Тогда нам точно стоит пройти этот путь до конца". '};
		{cond=function(s) return not have('flower_solarscale', me) and here():from()^'forest_glade'; end; 'Полностью с вами согласен.', function(s)
			take('flower_solarscale');
			return 'Соларскейл протягивает мне небольшой цветочек с полупрозрачными золотистыми лепестками: "Вот, возьмите, на память", -- тихо произносит она. Я принимаю цветок из ее рук. ';
		end};
		{cond=function(s) return here():from()^'above_forest'; end; 'Решил еще раз облететь округу, на случай если я что-то упустил. ', function(s)
			if solarscale_glade_visited then
				return 'Соларскейл осторожно намекает: "Возможно, стоит вернуться к башне?" ';
			else
				return 'Соларскейл бегло осматриает окрестности. Ее взгляд задерживается на полянке внизу: "Я бы хотела приземлиться здесь, вы не против?" ';
			end;
		end};
		{'#ac1', cond=function(s) return here():from()^'above_crater'; end; 'Да, но чуть позже, хочу осмотреть все еще раз. ', function(s)
			close('#ac2');
			return 'Соларскейл кивает: "Хорошая идея". '
		end};
		{'#ac2', cond=function(s) return here():from()^'above_crater'; end; 'Да, я просто хотел еще раз осмотреть это место сверху. ', function(s)
			close('#ac1');
			return 'Соларскейл кивает: "Хорошая идея". '
		end};
		{'#anv1', cond=function(s) return here():from()^'above_near_village'; end; 'Решил еще раз облететь округу, на случай если я что-то упустил. ', function(s)
			close('#anv2');
			return 'Соларскейл молча кивает. '
		end};
		{'#anv2', cond=function(s) return here():from()^'above_near_village'; end; 'Вы не против, если я посещу деревню еще раз?', function(s)
			close('#anv1');
			return 'Соларскейл отвечает: "Хорошо. Я подожду вас в лесу". '
		end};
		{'#nv2', cond=function(s) return here():from()^'near_village'; end; 'Вы еще не видели местную библиотеку -- я надеюсь вернуться в нее и прочесть хотя бы половину того, что здесь есть. ', 'Соларскейл оживляется: "Я бы тоже не отказалась, -- однако почти сразу же одергивает себя. -- Но я не могу менять форму".'};
		{cond=function(s) return here():from()^'inside_crater_path'; end, "Куда ведет эта тропинка?", 'Соларскейл рассказывает: "К центру кратера. Там расположена странная башня из черного камня. Кажется, она очень старая -- вокруг все поросло травой, нет никаких следов строительства, однако выглядит так, будто время над ней не властно -- ни единой трешинки, ни единой царапинки на ее стенах! Жаль я не смогла попасть внутрь -- входная дверь сделана из того же камня что и сама башня, и ни мои когти, ни моя магия не помогли мне открыть ее". '};
		{cond=function(s) return here():from()^'above_village'; end; 'Кажется, местные не знают ничего о кратере. ', 'Соларскейл задумчиво произносит: "Должно быть, карта была сделана очень давно и никто просто не помнит. Сколько же здесь стоит эта башня?!" '};
		{cond=function(s) return here():from()^'above_village'; end; 'Вы не против, если я посещу деревню еще раз?', 'Соларскейл отвечает: "Нет, конечно. Я подожду вас в лесу". '};
		{'[Закончить диалог]', function(s) walkout(); end};
	};
}