Files @ d9b4fc66f133
Branch filter:

Location: games/Awakening/atlantis_from_the_ashes.lua

Silverwing
navjiarr book up
  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
global {
	atl_fta_leave = 2;
	atl_fta_enter = 2;
	atl_fta_leave_2 = 2;
}

atl_fta_is_terra_solis = room {
    var {
        state = 0;
    };
	nam = "Атлантида, межсекционный кодидор";
	dsc = [[Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение.  ]];
	entered = function(s)
		if (s.state == 0) then
			return [[
				Вы входите в межсекционный коридор Солиса и в этот момент станцию сотрясает взрыв. Свет на мгновение моргает. Раздается звонок телефона. 
			]];
		end;
	end;
	way = {
		kh_vroom("В секцию Терра", function(s)
			if atl_fta_leave == 0 then
				return "atl_fta_game_over_left";
			else
				if atl_fta_leave == 1 then
					pr [[Вы хотите просто уйти, словно ничего не случилось? ]];
				elseif atl_fta_leave == 2 then
					pr [[Вы уверены, что хотите просто взять и уйти? ]];
				end;
				atl_fta_leave = atl_fta_leave - 1;
				return false;
			end;
		end);
		kh_vroom("В секцию Солис", function(s)
			if (atl_fta_phone.state == 1 and have(item_atl_fta_suit)) then
				return "atl_fta_solis_entry";
			else
				if atl_fta_enter == 0 then
					return "atl_fta_game_over_entered";
				else
					if atl_fta_enter == 1 then
						pr [["Вряд ли там сейчас безопасно находиться". ]];
					elseif atl_fta_enter == 2 then
						pr [["Там только что что-то взорвалось, я бы надел скафандр". ]];
					end;
					atl_fta_enter = atl_fta_enter - 1;
					return false;
				end;
			end;
		end);
	};
	obj = {
		"atl_fta_phone",
		"item_atl_fta_suit"
	};
};

item_atl_fta_suit = suit {
	var {
		dlg = nil;
	};
	nam = "Скафандр";
	dsc = [[В углу, так же как и в других межсекционных коридорах стоит {скафандр}, который используется в случае чрезвычайной ситуации. ]];
	tak = function(e)
		if (atl_fta_phone.state == 1) then
			return "Вы надеваете скафандр. ", true;
		else
			return "Вам незачем это делать. ", false;
		end;
	end;
};

atl_fta_phone = obj {
	var {
		state = 0;
	};
	nam = "Телефон";
	dsc = function(s)
		if (s.state == 0) then
			return [[На стене висит звонящий {телефонный аппарат}. ]];
		else
			return [[На стене висит {телефонный аппарат}. ]];
		end;
	end;
	act = function(s)
		if (s.state == 0) then
			s.state = 1;
			walk("atl_fta_dlg_phone");
		else
			return false;
		end;
	end;
};

atl_fta_dlg_radio = dlg {
	var {
		state = 0;
	};
	nam = "Радио";
	entered = function(s)
		if (s.state == 0) then
			psub("tuning");
			return [[Радио не настроено. ]];
		elseif (s.state == 1) then
			psub("ok");
			return [[Радио настроено, вы можете говорить. ]];
		elseif (s.state == 2) then
			psub("next");
			return [[Радио настроено, вы можете говорить. ]];
		elseif (s.state == 3) then
			psub("more");
			return [[Радио настроено, вы можете говорить. ]];
		end;
	end;
	phr = {
		{tag="tuning"};
		{"[Настроить приемник] Прием, как слышите?", [[
			Через несколько минут настройки, вы слышите в динамике голос Райта: "Слушаю вас, Дрейк".
		]], code [[ atl_fta_dlg_radio.state = 1; psub("ok"); ]]};
		{tag="ok"};
		{"Что мне делать?", [[
			"Что вы видите?"
		]], code [[ atl_fta_dlg_radio.state = 2; psub("what_i_see"); ]]};
		{tag="what_i_see"};
		{"К юго-востоку от меня вижу огонь, скорее всего взрыв был там. Здесь жарко. ", [[Райт инструктирует вас: "Идите по западной стороне. Ваша задача -- попасть в центр секции с южной стороны. Вы увидите несколько вентилей. Просто перекройте тот, в котором давление слишком большое". ]], code [[ psub("clear"); ]]};
		{tag="next"};
		{always=true, "Что мне делать?", [[Райт инструктирует вас: "Идите по западной стороне. Ваша задача -- попасть в центр секции с южной стороны. Вы увидите несколько вентилей. Просто перекройте тот, в котором давление слишком большое". ]], code [[ psub("clear"); ]]};
        {"Конец связи. ", "", code [[ back(); ]]};
		{tag="more"};
		{"Тут еще что-то взорвалось", [[Райт подтверждает: "Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена". ]], code [[ atl_fta_dlg_radio.state = 2; ]]};
		{"Как я выберусь отсюда?", [[Райт отвечает: "На юге есть шлюз, выйдете через него". ]], code [[ atl_fta_dlg_radio.state = 2; ]]};
        {tag="clear"};
        {"Вас понял. Конец связи.", "", code [[ back(); ]]}
	};
};

atl_fta_dlg_phone = dlg {
	nam = "Телефон";
	entered = [[
		Вы снимаете трубку и слышите раздраженный голос Винсента Даркстара: "Дрейк?! Какого черта?! Немедленно возвращайтесь в свою комнату!"^ 
		Вы не успеваете и слова сказать, как в разговор вмешивается Майкл Райт: "Стойте! Дрейк, кроме вас там никого нет, поэтому одевайте скафандр и слушайте мои инструкции".
	]];
	phr = {
		{"Вас понял.", code = [[ psub("back"); ]]};
	};
};

atl_fta_solis_entry = room {
	nam = "Атлантида, Солис, рядом со шлюзом";
	dsc = [[
		В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Слева и справа от вас проложены трубы. Сквозь просветы в них вы видите огонь где-то вдалеке на юго-востоке.
	]];
	entered = function(s)
		item_atl_fta_suit.dlg = "atl_fta_dlg_radio";
  
        if (atl_fta_solis_c2.broken_valve == 0) then
            atl_fta_solis_c2.broken_valve = rnd(5);
            atl_fta_valves[atl_fta_solis_c2.broken_valve].broken = true;
            atl_fta_solis_c2.broken_offset = rnd(9) + 10;
        end;
	end;
	way = {
		vroom("На восток", "atl_fta_solis_ne");
		vroom("На запад", "atl_fta_solis_nw");
	};
};

atl_fta_solis_ne = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб. Сквозь просветы в них вы видите огонь где-то вдалеке на юге.
	]];
	way = {
		vroom("На запад", "atl_fta_solis_entry");
		vroom("На юг", "atl_fta_solis_e");
	};
};

atl_fta_solis_e = room {
	nam = "Атлантида, Солис";
	dsc = [[
		Здесь очень жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Путь на юг прегражден обломками труб, а за ними вы видите огонь.
	]];
	way = {
		vroom("На север", "atl_fta_solis_ne");
	};
};

atl_fta_solis_nw = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб.
	]];
	way = {
		vroom("На восток", "atl_fta_solis_entry");
		vroom("На юг", "atl_fta_solis_w");
	};
};

atl_fta_solis_w = room {
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб.
	]];
	way = {
		vroom("На север", "atl_fta_solis_nw");
		vroom("На восток", "atl_fta_solis_c1");
		vroom("На юг", "atl_fta_solis_sw");
	};
};

atl_fta_solis_c1 = room {
	nam = "Атлантида, Солис, центр";
	dsc = [[
		В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Перед собой вы видите сложную конструкцию из труб и клапанов. Через металлическую решетку на севере вы видите вентили, о которых говорил Райт. К сожалению, вы не сможете дотянуться до них отсюда.
	]];
	way = {
		vroom("На запад", "atl_fta_solis_w");
	};
};

atl_fta_solis_sw = room {
	var {
		state = 0;
	};
	nam = "Атлантида, Солис";
	dsc = [[
		В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб.
	]];
	entered = function(s)
		if (s.state == 0) then
			s.state = 1;
			item_atl_fta_suit.dlg = nil;
			pr([[
				Позади вас раздается еще один взрыв. Вы с трудом удерживаетесь на ногах, видите, что часть секции на севере завалена и сквозь дым, пар и пыль видите начавшийся пожар.
			]]);
		end;
	end;
	way = {
		vroom("На восток", "atl_fta_solis_exit");
	};
};

atl_fta_solis_exit = room {
	nam = "Атлантида, Солис";
	dsc = [[В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб. К югу от вас расположен шлюз, ведущий наружу станции. На севере вы видите проход, ведущий в центральную часть секции. ]];
	way = {
		vroom("На север", "atl_fta_solis_c2");
		vroom("На запад", "atl_fta_solis_sw");
		vroom("На восток", "atl_fta_solis_se");
		kh_vroom("В шлюз", function(s)
			if atl_fta_solis_c2:solved() then
				return "atl_fta_ending";
			else
				if atl_fta_leave_2 == 0 then
					return "atl_fta_game_over_left_2";
				else
					if atl_fta_leave_2 == 1 then
						pr [["Кроме меня поблизости никого нет, так что мне придется это сделать". ]];
					else
						pr [["Здесь вот-вот все взорвется, если я не исправлю проблему". ]];
					end;
					atl_fta_leave_2 = atl_fta_leave_2 - 1;
					return false;
				end;
			end;
		end);
	};
};

atl_fta_solis_c2 = room {
	var {
		valve_a = 2;
		valve_b = 90;
		broken_valve = 0;
		broken_offset = 0;
		valves = {1,1,1,1,1};
	};
	solved = function(s)
		for i =1, #s.valves do
			if (s.valves[i] == 0 and i ~= s.broken_valve or 
				s.valves[i] == 1 and i == s.broken_valve) then
				return false;
			end;
		end;
		
		return true;
	end;
	nam = "Атлантида, Солис, Центр";
	dsc = function(s)
		if (not s:solved()) then
			return [[
				В помещении темно и жарко. Где-то рядом вы слышите шипение пара, вырывающегося из труб, но не видите, где. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры:
			]];
		else
			return [[
				В помещении темно и жарко. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры:
			]];
		end;
	end;
	way = {
		vroom("На юг", atl_fta_solis_exit);
	};
	obj = {
		"atl_fta_solis_valve1",
		"atl_fta_solis_valve2",
		"atl_fta_solis_valve3",
		"atl_fta_solis_valve4",
		"atl_fta_solis_valve5",
		"atl_fta_solis_valvea",
		"atl_fta_solis_valveb",
		"item_goldmans_clock"
	};
};

atl_fta_solis_valvea = obj {
	nam = "Вентиль";
	dsc = "Под ними расположены еще два вентиля. Тот, что {слева} отмечен буквой A,";
	act = function(s)
		if (atl_fta_solis_c2.valve_a == 2) then
			atl_fta_solis_c2.valve_a = 3;
		elseif (atl_fta_solis_c2.valve_a == 3) then
			atl_fta_solis_c2.valve_a = 4;
		elseif (atl_fta_solis_c2.valve_a == 4) then
			atl_fta_solis_c2.valve_a = 6;
		elseif (atl_fta_solis_c2.valve_a == 6) then
			atl_fta_solis_c2.valve_a = 2;
		end;
        return "Вы поворачиваете вентиль. Значения на манометрах изменились. ";
	end;
};

atl_fta_solis_valveb = obj {
	nam = "Вентиль";
	dsc = " а тот, что {справа} -- буквой B.";
	act = function(s)
		if (atl_fta_solis_c2.valve_b == 90) then
			atl_fta_solis_c2.valve_b = 60;
		elseif (atl_fta_solis_c2.valve_b == 60) then
			atl_fta_solis_c2.valve_b = 45;
		elseif (atl_fta_solis_c2.valve_b == 45) then
			atl_fta_solis_c2.valve_b = 30;
		elseif (atl_fta_solis_c2.valve_b == 30) then
			atl_fta_solis_c2.valve_b = 90;
		end;
        return "Вы поворачиваете вентиль. Значения на манометрах изменились. ";
	end;
};

atl_fta_solis_valve = function(index)
	return obj {
		nam = "Вентиль";
		dsc = function(s)
			local value = atl_fta_solis_c2.valve_a * index + math.floor(atl_fta_solis_c2.valve_b / index);
			if (atl_fta_solis_c2.broken_valve == index) then
				value = value + atl_fta_solis_c2.broken_offset;
			end;
			if (atl_fta_solis_c2.valves[index] == 0) then
				value = 0;
			end;
			return "{Вентиль №"..tostring(index).."}. Манометр показывает " .. tostring(value) .. "^";
		end;
		act = function(s)
			if (atl_fta_solis_c2.valves[index] == 0) then
				atl_fta_solis_c2.valves[index] = 1;
			else
				atl_fta_solis_c2.valves[index] = 0;
			end;
			
			if (atl_fta_solis_c2:solved()) then
				return "Шипение пара прекращается. Вы сделали все, что нужно. ";
			else
				return "Вы поворачиваете вентиль. ";
			end;
		end;
	};
end;

atl_fta_solis_valve1 = atl_fta_solis_valve(1);
atl_fta_solis_valve2 = atl_fta_solis_valve(2);
atl_fta_solis_valve3 = atl_fta_solis_valve(3);
atl_fta_solis_valve4 = atl_fta_solis_valve(4);
atl_fta_solis_valve5 = atl_fta_solis_valve(5);

atl_fta_valves = {
    atl_fta_solis_valve1;
    atl_fta_solis_valve2;
    atl_fta_solis_valve3;
    atl_fta_solis_valve4;
    atl_fta_solis_valve5;
};

atl_fta_game_over_entered = game_over('atl_fta_game_over_entered', [[Вы открываете шлюз в Солис. В помещение врываются клубы удушающего дыма и нестерпимый жар. Вы начинаете кашлять, а голова начинает кружиться от жара. Это последнее, что вы успели запомнить. ]]);

atl_fta_game_over_left = game_over('atl_fta_game_over_left', [[Как только вы выходите из межсекционного коридора, раздается еще один взрыв и свет на станции гаснет. Взрыв повреждает межсекционный коридор и его начинает заполнять вода. Вы начинаете задраивать люк, но третий взрыв сбивает вас с ног. Вы падаете и теряете сознание. Через несколько мгновений вы утонете, но вас это уже не заботит. ]]);

atl_fta_game_over_left_2 = game_over('atl_fta_game_over_left_2', [[Как только вы входите в шлюз, взрыв сокрушительной силы сотрясает станцию. Шлюзовую дверь выбивает и вас отбрасывает в противоположный угол комнаты. Вы видите, как секцию начинает заполнять вода. По радио не слышно ничего кроме помех и скорее всего никто не придет к вам на помощь... ]]);

atl_fta_ending = cutscene('atl_fta_ending', "Атлантида", [[Через шлюз вы выбираетесь из Солиса и оказываетесь снаружи. Через некоторое время вас подбирает Наутилус, чтобы вернуть на станцию. От экипажа вы узнаете, что потребление энергии на станции сокращено до восстановления Солиса. ^По возвращении на станцию, вас встречают охранники. Они проводят вас в вашу каюту, где вы погружаетесь в глубокий сон. Вы просыпаетесь от стука в дверь. Охранники просят вас следовать за ними. Они сопровождают вас до кабинета Винсента Даркстара. ]], 'atl_mtr_intro', function(s)
	if char_darkstar_dlg.state == 0 then
		char_darkstar_dlg.state = 1;
	end;
	atl_fta_state = 2;
	remove(item_atl_fta_suit, pl);
	me().has_light = false;
end);