Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5299 igevorse 1
/******************************************************************
2
*   21 days: a game for programmers
3
*   Copyright (C) 2014 Maxim Grishin
4
*
5
*   This program is free software; you can redistribute it and/or
6
*   modify it under the terms of the GNU General Public License
7
*   as published by the Free Software Foundation; either version 2
8
*   of the License, or (at your option) any later version.
9
*
10
*   This program is distributed in the hope that it will be useful,
11
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
*   GNU General Public License for more details.
14
*
15
*   You should have received a copy of the GNU General Public License
16
*   along with this program; if not, write to the Free Software
17
*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
*   MA  02110-1301, USA.
19
*******************************************************************/
20
 
21
#ifndef H_STRINGS
22
#define H_STRINGS
23
 
24
/*************************************************************************
25
*	Messages from friends
26
*************************************************************************/
27
 
28
const unsigned int levelYesAnswerNumber = 10;
29
const char* levelYesAnswer[levelYesAnswerNumber] = {
30
    "Выезжаю!",
31
    "Да, сейчас удалённо сделаю.",
32
    "Называй адрес.",
33
    "Уже еду.",
34
    "Кофе и печеньки будут? Уже еду!",
35
    "Конечно!",
36
    "Для тебя - в любое время",
37
    "Я как раз свободен.",
38
    "За минут десять сделаю.",
39
    "Без проблем."
40
    };
41
 
42
const unsigned int levelNoAnswerNumber = 10;
43
const char* levelNoAnswer[levelNoAnswerNumber] = {
44
    "Прости, сегодня не смогу.",
45
    "Не, я занят.",
46
    "Я на работе безвылазно, позвони-ка через месяц.",
47
    "Как-нибудь в другой раз.",
48
    "Я по средам не эникействую.",
49
    "Я такого не умею.",
50
    "Вы ошиблись номером :D",
51
    "Ты кто вообще?",
52
    "Не могу, извини.",
53
    "Нет."
54
    };
55
 
56
 
57
const unsigned int level1TasksNumber = 6;
58
const char* level1Task [level1TasksNumber] = {
59
    "Привет! Можешь посмотреть мой компьютер? Кажется, у меня не работает %s.",
60
    "Нигде не могу тебя найти. У меня тут %s барахлит, переустановишь винду?",
61
    "Катастрофа! Работа встала! Не работает %s. Поможешь?",
62
    "Слушай, у моего друга не работает %s, не знаю, что делать. Ты свободен?",
63
    "Странно, не запускается %s, всё перепробовал - ничего не помогает.",
64
    "Дароф! Я тут кофе на комп пролил, теперь %s не работает. С меня кофе и печеньки."
65
    };
66
 
67
const unsigned int level1TaskWordNumber = 11;
68
const char* level1TaskWords[level1TaskWordNumber] = {
69
    "аудиокарта",
70
    "блок питания",
71
    "браузер",
72
    "видеокарта",
73
    "жесткий диск",
74
    "клавиатура",
75
    "модем",
76
    "монитор",
77
    "мышь",
78
    "один наушник",
79
    "проектор"
80
    };
81
 
82
const unsigned short programmingTaskNumber = 5;
83
const char* programmingTasks[programmingTaskNumber] = {
84
    "Привет! Мне тут лабораторную надо написать на Pascal, не знаю, к кому обратиться. Умеешь?",
85
    "В универе запарили с заданиями на Basic, сделаешь?",
86
    "Нужна твоя помощь, завтра сдавать лабораторную на Turbo Pascal, а я впервые слышу, что это. Выручай!",
87
    "Дали на работе задание... взял, не посмотрел, а там надо писать на QBASIC, а я не умею. Посоветуешь кого?",
88
    "Слышал, ты пишешь на Pascal? У нас тут пара проектов недописанных, я ответственного человека ищу. Работы - на пару часов."
89
    };
90
 
91
const unsigned short webProgrammingTaskNumber = 4;
92
const char* webProgrammingTasks[webProgrammingTaskNumber] = {
93
    "Привет, ты сайтами-визитками занимаешься? Дело есть.",
94
    "Слушай, нашей компании нужен сайт по дешёвке. Просто страница с информацией о компании. Это же просто для тебя, да?",
95
    "В нашей соц. сети пару фишек доделать нужно, мне тебя порекомендовали. Напиши, как освободишься.",
96
    "Хай, мы тут большой сайт-портал пишем, нам срочно нужен кодер на пару дней. Гоу?",
97
    };
98
 
99
const unsigned short systemProgrammingTaskNumber = 3;
100
const char* systemProgrammingTask[systemProgrammingTaskNumber] = {
101
    "Слышал об Arduino? Мы тут на асме пишем, пара заданий есть.",
102
    "Мне сказали, ты на асме пишешь? Давно фрилансера ищем, работа с микроконтроллерами, думаю, тебе понравится.",
103
    "Тут игру для конкурса под KolibriOS надо написать, а я асм не знаю. Напишешь?"
104
    };
105
 
106
const unsigned short adminTasksNumber = 4;
107
const char* adminTasks[adminTasksNumber] = {
108
    "Сервера новые завезли, настраивать некому. Оплатим вдвойне! Перезвони.",
109
    "А ты Apache + nginx сможешь поставить и настроить? Не спрашивай, зачем :).",
110
    "Не поверишь, тут машину привезли на Windows Server 2003, что делать с ней, не знаем. Выручай!",
111
    "Простите, как мне пропатчить KDE2 под FreeBSD?"
112
    };
113
 
114
const unsigned short mobileTaskNumber = 3;
115
const char* mobileTasks[mobileTaskNumber] = {
116
    "Мы тут разработку на Swift продвигаем, можешь пару демок написать?",
117
    "Хотим написать мобильное приложение на Java, говорят, сейчас это круто. Ты умеешь?",
118
    "Тут никто на C++ не хочет нативные приложения под Android делать, ты возьмешься?"
119
    };
120
 
121
/*************************************************************************
122
*	Courses
123
*************************************************************************/
124
 
125
const unsigned int coursesNumber = 8;
126
const char* courses[coursesNumber] = {
127
    "Эникейство",
128
    "Азы программирования",
129
    "Продвинутое программирование:",
130
    "Разработка мобильных приложений",
131
    "Основы дизайна",
132
    "Создание сайтов",
133
    "Системное программирование",
134
    "Администрирование серверов",
135
    };
136
bool coursesUnlocked[coursesNumber] = {1, 0, 0, 0, 0, 0, 0, 0};
137
const unsigned short advancedProgrammingCourses = 5;
138
char* advProgCourses[advancedProgrammingCourses] = {
139
    "C++",
140
    "Java",
141
    "Assembler",
142
    "C#",
143
    "Delphi"
144
    };
145
 
146
bool 		coursesFinished[coursesNumber] = {1, 0, 0, 0, 0, 0, 0, 0};
147
bool 		advProgCoursesFinished[advancedProgrammingCourses] = {0, 0, 0, 0, 0};
148
unsigned int 	learningTime[coursesNumber] = {0, 10, 80, 30, 45, 35, 45, 50}; // in days
149
unsigned int 	advProgLearningTime[advancedProgrammingCourses] = { 10, 10, 15, 10, 10}; // in days
150
int 		learningCost[coursesNumber] = {0, 100, 125, 100, 125, 120, 130, 120};
151
int 		advProgLearningCost[advancedProgrammingCourses] = {125, 120, 150, 123, 100};
152
 
153
unsigned short 	finishedCoursesCount = 1;
154
 
155
/*************************************************************************
156
*	Probability of getting a message from friend related to course 0,
157
*	1, 2, etc. (courses). Prob. of getting a simple work is higher
158
*	than getting a hard one.
159
*************************************************************************/
160
double probability[coursesNumber] = { 0.7, 0.5, 0.25, 0.6, 0.25, 0.4, 0.3, 0.4};
161
 
162
int taskReward[coursesNumber] = {2, 5, 10, 13, 19, 25, 30, 35};
163
int taskCount[coursesNumber] = {level1TasksNumber, programmingTaskNumber,
164
	programmingTaskNumber, mobileTaskNumber, mobileTaskNumber,
165
	webProgrammingTaskNumber, systemProgrammingTaskNumber, adminTasksNumber};
166
 
167
/*************************************************************************
168
*	News
169
*************************************************************************/
170
 
171
const unsigned short newsCount = 4;
172
const char* news[newsCount] = {
173
    "Программирование начинает захватывать мир! Скорее начните учиться программированию!\n",
174
    "По информации с hh.ru вскоре повысится спрос на Java - программистов\n",
175
    "Невероятно! Инди-игра одного французского разработчика Frappy Perd побила все рекорды и принесла ему $50 000 в первый же день! Наверное, все сейчас кинутся писать свои мобильные игры.\n",
176
    "Однозначно, сейчас расцвет инди-игр. Очередная успешная игра, на этот раз от Unnamed Studio, на первом месте в топе игр. У игры уже миллионы фанатов и поклонников, люди просто сходят с ума!\n"
177
	};
178
bool newsShowed[newsCount] = {0, 0, 0, 0};
179
 
180
/*************************************************************************
181
*	Special letters
182
*************************************************************************/
183
 
184
const unsigned short specialLetterCount = 30;
185
const char* specialLetters[specialLetterCount] = {
186
    "Привет. У нас тут мегакрутой проект на C++ и Java, никто не берется, сделаешь?",
187
    "Что это такое? Да лучше бы совсем не брался. Это же говнокод! Иди-ка поучи C++, а заодно и Java.",
188
    "Я слышал, ты программированием на Assembler занимаешься? Тут суперсложный микроконтроллер есть один, никто не берется. Возьмешься?",
189
    "И это ты называешь выполненной работой? Да мой шестилетний сын на Assembler лучше пишет, чем ты! Купи книгу по Asm, не позорься.",
190
    "Привет! К нам тут заказ поступил, нужно ядро базы данных на C# написать. Мы сами не можем - очень сложный проект. Умеешь?",
191
    "Эээ, да ты совсем, оказывается, программировать не умеешь. Пройди пару курсов что-ли, не позорься.",
192
    "Письмо от ООО 'Botsmann'\n Здравствуйте! Нам посоветовали Вас, как специалиста в области программирования. Мы занимаемся разработкой мобильных приложений, и сейчас делим рынок с ООО 'Астра'. Для захвата рынка нам нужны интересные люди и квалифицированные специалисты. Мы предлагаем интересную работу и оклад $800 в месяц. Подумайте, мы свяжемся с Вами позже.",
193
    "Письмо от ООО 'Астра'\n Добрый день! Мы - команда разработчиков мобильных приложений, у нас есть гениальные идеи и мы хотим изменить мир! Мы ищем талантливых разработчиков и предлагаем $1000 в месяц. Нам нужен твой срочный ответ, ты с нами?",
194
    "Письмо от ООО 'Botsmann'\n К сожалению, вы не оправдали наших надежд. Это наши HR-специалисты отправили вам письмо от имени наших конкурентов. Нам не нужны люди, готовые уйти в другую компанию из-за $200.",
195
    "Письмо от ООО 'Botsmann'\n Здравствуйте! Извините, это наши HR-специалисты отправили Вам письмо от имени наших конкурентов в качестве проверки. Мы решили, что вы нам подходите! Если Вы еще не писали под мобильные платформы, мы Вас научим.",
196
    "Хэй, привет! Мы - молодая команда под названием Unnamed Studio и мы очень любим играть, а также создавать игры. Мы видели твои работы, они реально крутые! В отличие от крупных компаний у нас меньше контроля и больше возможностей для самореализации. Мы всё рассчитали, и уже скинулись. С тебя пока денег брать не будем, оставим на форс-мажор. Но у нас же всё будет гладко, верно? Больше трат не предвидится. Сообщи, если согласен. ",
197
/*11*/   "Письмо от ООО 'Botsmann'\n Слушай, я терпел всё это время, но всему есть предел. Ты отвлекаешься от основной работы на фриланс и подработку. Ты определись, что тебе больше по душе и бросай этот фриланс. Работу надо делать качественно. \nСкучно на работе? Я подниму оклад до $1200 и пошлю тебя на дополнительные курсы. Ну, продолжаем работать?",
198
    "Письмо от ООО 'Botsmann'\n Я тебя предупреждал: концентрируйся на работе! Думал, я не узнаю о твоей подработке?! Ты уволен!",
199
    "Мы рады, что ты присоединился к нам, теперь ты член команды Unnamed Studio! Сейчас работа пойдёт раза в три быстрее! Раз ты с нами, надо бы научиться рисовать. ",
200
    "Твои работы просто впечатляют! Это не просто мои слова, все ребята в Unnamed Studio так думают! ...знаешь, у нас тут проблема. Наш второй программист пропил часть денег из фонда, до релиза никак не хватит теперь :(. Мы собираем по $%d. Обещаю, это в последний раз! За идею!",
201
    "Письмо от Unnamed Studio:\n Катастрофа! Через 40 дней релиз, а у нас сайта до сих пор нет! Мы изначально как-то и не думали об этом, только сейчас узнали, что это - важная часть рекламы. ",
202
    "Письмо от Unnamed Studio:\n Что? Переоценил себя? Ты говорил, успеешь сделать сайт вовремя! Из-за тебя всё пошло к чертям, мы могли бы выручить в 1000 раз больше! Вот твои $1000 из общего дохода и убирайся!",
203
    "Письмо от Unnamed Studio:\n Чувак, ты смотрел новости? ТЫ ЭТО ВИДЕЛ?! Да нашу игру расхватывают, как горячие пирожки! Это успех! Это слава! Я тут до потолка прыгаю! Перевожу тебе $200 000 - твоя доля. Теперь проект завершён, мы все в отпуска! И тебе надо отдохнуть. Лови кайф.",
204
    "Скучно? А ты что думал! На работе сидят и зарабатывают деньги, это тебе не экшен. Если нужны деньги - продолжай работать, но дальше уже ничего интересного не будет. Миллион ты так, конечно, не заработаешь, но подкопить денег на пару прыжков во времени можно.",
205
    "Скучно, да? Конечно, от самых интересных предложений о работе ты отказался, а новых уже не будет. Что, нереалистично? В жизни не всем каждый день предлагают работу. Да, будешь перебиваться звонками знакомых и переустанавливать им винду. И курсов новых тоже не будет, зачем они тебе, если всё равно ты только ЭНИКЕЙЩИК. Эх, было бы круто, если бы можно было всё отмотать назад и однажды сделать другой выбор!",
206
    "Письмо от ООО 'Botsmann'\n Здравствуй. Совет директоров решил тратить меньше средств на дополнительное обучение новых работников. Также сокращаем расходы на проверку знаний опытных сотрудников. Решили объединить это всё в одно. Ты знаешь, мы сейчас буквально на всём экономим. В общем, решено, что 'старшее' поколение будет передавать опыт 'младшему'. Ты уже успел зарекомендовать себя как опытный сотрудник, так что тебе поручается напутствовать Junior'ов и отвечать на все их глупые вопросы. Не бесплатно, конечно. За каждые 5 правильных ответов мы начисляем премию. А если наберешь 5 неправильных, то считаем, что проверку знаний не прошёл, и тогда место освобождаешь. Я в тебе не сомневаюсь, просто должен был тебе рассказать о новом решении. Я-то знаю, что ты справишься!",
207
    "Письмо от ООО 'Botsmann'\n Как и обещал, твоя премия за правильные ответы: $400",
208
    "Письмо от ООО 'Botsmann'\n Ты не прошёл проверку знаний. Ну что же ты так, я в тебе не сомневался! А ты, оказывается, просто место на работе просиживаешь. Хоть ты мне и понравился, но уволить я тебя обязан. Без обид.",
209
    "Письмо от ООО 'Botsmann'\n Как я и думал, эту странную процедуру проверки знаний отменили: Junior'ы совсем обнаглели, сами ничему учиться не хотят, только спрашивают у старших. Платить опытным сотрудникам за советы оказалось невыгодно. В общем, теперь можешь спокойно работать, никто тебя отвлекать не будет.",
210
    "Слушай, да это же просто идеальный код! Не поверил бы, что ты за %d дней научился этому! У тебя сколько часов в сутках? Держи свои $%d, заслужил.",
211
    "Письмо от Andrew Johnson \n Хэй, чувак, я из соседнего отдела. Мне босс тоже устраивал проверку и ты правильно делаешь, что не фрилансишь на стороне. Но, поверь, твой телефон на прослушке, а там всё ещё есть непрочитанные письма. Было бы лучше избавиться от них, а то босс может подумать, что ты всё еще поддерживаешь контакт с другими заказчиками.",
212
/*un2 var1*/ "Ты понимаешь, нас мало, все загружены... Денег нет, поэтому помочь можем только советом: было бы неплохо пройти какой-нибудь курс об основах дизайна.",
213
/*un2 var2*/ "Что? Уже умеешь? Как же нам с тобой повезло! Окей, тогда ты знаешь, что делать. Мы не будем ограничивать твою фантазию.",
214
/*un4 var1*/ "Мы решили скинуться по $%d на веб-мастера, ведь все наши прогеры заняты.",
215
/*un4 var2*/ "По тебе сразу видно, что ты толковый специалист. Думаю, создание сайтов для тебя - сущий пустяк."
216
	};
217
 
218
bool unnamedStudioLettersSent[3] = {0,0,0,};
219
 
220
bool  knowledgeLetterSent = false;
221
short nextKnowledgeLetterIndex = 0;
222
short klowledgeCorrectAnswers = 0;
223
short klowledgeUncorrectAnswers = 0;
224
const unsigned short knowledgeQuestionsCount = 10*3;
225
const char* knowledgeCheck[knowledgeQuestionsCount] = {
226
    "Я тут вообще новичок, какой язык программирования лучше, C++ или Delphi?", "Это зависит от поставленной задачи", "Конечно C++, на Delphi уже никто не пишет",
227
    "Мне тут один из программистов сказал, что шутка про UDP не дошла...что он имел в виду?", "UDP - это протокол, не гарантирующий доставку пакетов.", "UDP - надёжный протокол, гарантирующий доставку данных, в этом и шутка.",
228
    "Мне задание дали, сайт на C++ написать, это вообще возможно или они просто издеваются над новичком?", "В принципе, не важно, на какой языке генерировать HTML-страницы.", "Нет, это прикол. Сайты пишут на PHP, Python, ASP.Net и других",
229
    "Мы тут поспорили, я говорю, что с использованием JavaScipt сайты пишутся, а не на Java. Java - для мобильных приложений. Верно?", "Ты проиграл.", "Ну да, почти все приложения для твоего Андроида на Java написаны ведь.",
230
    "Коллега на перекуре сказал, что он до работы в нашей компании зарабатывал на opensource-проектах. Это возможно?","Да, он мог заниматься платной поддержкой.", "Ха, повёлся!. Opensource-проекты же бесплатные.",
231
    "Разгребаю код одного проекта под iOS. Никак не пойму, в чем разница между #include и #import?", "#import гарантирует, что файл будет включён один раз, в отличие от #include", "Ты путаешь, #include используется в коде на C,  а 'import' - в ассемблерных вставках.",
232
    "Собираюсь писать проект на Ruby on Rails. Слышал, этот язык интерпретируемый и высокоуровневый, это так?","Хм... Да это и не язык вовсе, а фреймворк.", "Нет, это компилируемый язык, а не интерпретируемый.",
233
    "Я теперь буду писать под Linux, можно его поставить на NTFS-раздел? Эмуляцию live cd не предлагать.", "Нет, ядро с него загрузиться не сможет.", "В принципе, да, но нужно патчить ядро, ставить дополнительные утилиты... оно тебе надо?",
234
    "Вчера позвонили из компании конкурентов, сказали, что пишут на обрезанном PHP без ООП и eval(). Предлагали работу, я отказал. Правильно сделал? ", "Поздравляю, это была компания 'Вконтакте'.", "Правильно, на этом же невозможно ничего стоящего написать",
235
    "Захожу на удалённый сервер, нужно узнать, сколько строк в файле log.txt. А там, как назло, Linux и только консоль...Что вводить?", "wc -l log.txt", "ls -l log.txt"
236
    };
237
 
238
/*************************************************************************
239
*	Tips for users when waiting for an input
240
*************************************************************************/
241
 
242
const char* ae_advanced_courses = "Что вы вводите? Для того, чтобы выбрать один из 'продвинутых' курсов, нажмите клавиши 'a'-'e'";
243
const char* bottomLineCourses = "Курсы[C]    ";
244
const char* bottomLineMsgAchieves = "Сообщения[M]    Достижения[A]    Прыжок в прошлое[U]    ";
245
const char* bottomLineSpeedAndExit = "Скорость[S]    Выйти[Esc]\n";
246
const char* changeSpeedButtons = "Изменить[+][-] Принять[Y]";
247
const char* enter  = "Нажмите [Enter] для продолжения...";
248
const char* escToBreakReading = ", прервать чтение [Esc]";
249
const char* number_or_enter = "Введите номер курса или [Enter] чтобы выйти";
250
const char* one_or_two = "Варианты ответов: [1] или [2]";
251
const char* one_two_or_three = "Варианты ответов: [1], [2] или [3]";
252
const char* pressF = "Нажмите [F] для продолжения...";
253
const char* pressP = "Нажмите [P] для продолжения...";
254
const char* yesNoDialog = "Да[Y]    Нет[N]";
255
 
256
 
257
/*************************************************************************
258
*	Windows' title
259
*************************************************************************/
260
 
261
const char* achievementsTitle = "Достижения";
262
const char* breaking_news = "Мировые новости";
263
const char* changeSpeedTitle = "Скорость игры";
264
const char* coursesTitle = "Курсы";
265
const char* courseAlreadyPassed = "Курс уже пройден!";
266
const char* finalCard = "КОНЕЦ";
267
const char* gameOverTitle = "Вы проиграли!";
268
const char* introTitle = "Вступление";
269
const char* new_letter = "Новое письмо";
270
const char* newAchievement = "Новое достижение!";
271
const char* notEnoughMoney = "У вас недостаточно средств :(";
272
const char* playerStatsTitle = "Статистика игрока\n\n\n";
273
const char* unread_message = "Непрочитанное сообщение";
274
 
275
/*************************************************************************
276
*	Windows' text
277
*************************************************************************/
278
 
279
const char* coursesFinishedText = "\nКурсов пройдено: %d/%d\n \n";
280
const char* finalCardsUnlockedText = "\nКонцовок открыто: %d/%d\n";
281
const char* gameName = "21 days";
282
const char* gameOverText = "\nЭто был единственный способ проиграть, и вы нашли его!\nНа еду денег нет, ваша репутация так низка, что никто не звонит и не предлагает работу.\n\nКонец!\n";
283
const char* helpDesker = "эникейщик";
284
const char* mainMenuText = "\n\n1.Новая игра\n\n2.Выход\n";
285
const char* noCurrentCurses = "\tВы ничему не обучаетесь...\n";
286
const char* playerStatsEnd = "\n\nНе забудьте поделиться скриншотом статистики с друзьями!\n\nНажмите [Esc] для выхода.\n";
287
const char* playerStatus = "Ваш статус: ";
288
const char* pseudoEqual = "═";
289
const char* selectCourseText = "Выберите одну из следующих категорий, которой вы бы хотели научиться:\n";
290
const char* startupper = "стартапер";
291
const char* takeCourseCost = ", пройти курс: $%d\n";
292
const char* takingThisCourse = "\tВы сейчас обучаетесь этому курсу..\n";
293
const char* worker = "трудоустроенный";
294
 
295
const char* days21 =
296
"\n  .oooo.     .o           .o8                                 \n"
297
".dP\"\"Y88b  o888          \"888                                 \n"
298
"      ]8P'  888      .oooo888   .oooo.   oooo    ooo  .oooo.o \n"
299
"    .d8P'   888     d88' `888  `P  )88b   `88.  .8'  d88(  \"8 \n"
300
"  .dP'      888     888   888   .oP\"888    `88..8'   `\"Y88b.  \n"
301
".oP     .o  888     888   888  d8(  888     `888'    o.  )88b \n"
302
"8888888888 o888o    `Y8bod88P\" `Y888\"\"8o     .8'     8\"\"888P' \n"
303
"                                         .o..P'               \n"
304
"                                         `Y8P'                \n";
305
 
306
const char* youWin =
307
"\n.___________. __    __   _______     _______ .__   __.  _______  \n"
308
"|           ||  |  |  | |   ____|   |   ____||  \\ |  | |       \\ \n"
309
"`---|  |----`|  |__|  | |  |__      |  |__   |   \\|  | |  .--.  |\n"
310
"    |  |     |   __   | |   __|     |   __|  |  . `  | |  |  |  |\n"
311
"    |  |     |  |  |  | |  |____    |  |____ |  |\\   | |  '--'  |\n"
312
"    |__|     |__|  |__| |_______|   |_______||__| \\__| |_______/ \n\n\n";
313
 
314
const char* gameOverLogo =
315
"  __ _  __ _ _ __ ___   ___    _____   _____ _ __ \n"
316
" / _` |/ _` | '_ ` _ \\ / _ \\  / _ \\ \\ / / _ \\ '__|\n"
317
"| (_| | (_| | | | | | |  __/ | (_) \\ V /  __/ |   \n"
318
" \\__, |\\__,_|_| |_| |_|\\___|  \\___/ \\_/ \\___|_|   \n"
319
" |___/                                            \n\n";
320
 
321
const char* playerStats[9] = {
322
	"Игра была бы пройдена без прыжков во времени за %d ",
323
	"Потрачено настоящих, не игровых минут на прохождение игры: %d\n",
324
	"Прочитано сообщений: %d\n",
325
	"Помог знакомым разобраться с компьютером: %d ",
326
	"Не помог: %d ",
327
	"Денег заработано: $%d\n",
328
	"Денег потрачено: $%d\n",
329
	"Из них на благотворительность: $%d\n",
330
	"Совершено прыжков во времени: %d\n"};
331
 
332
/*const char* gameIntro = "\n     Урраа! Диплом успешно получен и уже как несколько недель пылится на полке. Голова до сих пор раскалывается от огромной радости... не стоило всё же так бурно отмечать окончание универа. К счастью, этот 'выпускной вечер', длящийся уже недели две, закончился.\n     Что там у нас в холодильнике? Пусто. Хм. Ладно, позвоню Валере.\n\n\
333
<трясущимися пальцами набирает номер>\n-Хэй, Валер, у тебя есть что?\n-Да ладно, неужели ты проспался!\n-Не надо ля-ля, я самым трезвым был.\n-Ну да, конечно, рассказывай тут! Фотографии позже скину, как с работы приду.\n-Откуда?\n-Да, меня дядя быстренько устроил. Программистом.\n-Круто, а он может меня тоже устроить?\n-Ну... вряд ли, тут все места заняты.\n-Но ведь ты как-то устроился!\n-Прости, ничем помочь не могу. Попробуй устроиться куда-нибудь.\n-Да я же ничего не умею!\n-Ахаха, смешно слышать это от выпускника ВУЗа... Хм, хотя я и сам ничего не умею. Придётся самому пробиваться. Я видел в магазине книги с  заголовками 'C++ за 21 день', 'Java за две недели' и т.п., попробуй почитать что-нибудь, быстренько выучись и отправляй резюме куда-нибудь. Только не в нашу компанию.\n-Почему?.\n-Ну я-то знаю, какой ты раздолбай. Зачем ты тут, если ты на самом деле ничего не умеешь?\n-Что?! Да я смотрю, ты такой умный сразу стал, как работу нашёл. Не было бы дяди, ты сейчас бы дворником был!\n-Да пошёл ты, не тебе решать!\n\n\
334
     Чёрт! Деньги кончаются, а кушать хочется. Хорошо, что хоть винду умею переустанавливать - знакомых много, как-нибудь продержусь. А этому нахалу я ещё покажу, чему можно выучитья за 21 день! И пусть этот гадёныш работает на своего дядю, пока я строю свою компанию. Интересно, дедушкин квантовый сворачиватель пространства и времени ещё работает? Он мне пригодится. Ахаха, я уже представляю лицо этого придурка, когда он меня увидит! Он же останется таким же тупым болваном!\n\n";*/
335
/*const char* gameIntroPlan = "     Попробую выучиться всему, чему можно, достигнуть всего, о чём можно только подумать, а ещё, а ещё... заработать МИЛЛИАРД! Хм, ладно, это уже слишком. Пусть будет миллион. А потом встречусь с Валерой и посмотрим, кто чего добился.\n\n     Итак, цель поставлена, отсчёт времени пошёл!\n Что он там писал? C++ за 21 день? Где-то в шкафу есть такая книга, надо поискать. Я же когда-то начинал её читать... за 21 день её точно не пройти. \nПридётся усердно заниматься и через пару-тройку лет я его выучу. А потом возьму дедушкин квантовый сворачиватель пространства и времени и вернусь в прошлое, до 21-го дня, пусть все думают, что я добился всего за 3 недели. Именно так я и сделаю!";*/
336
const char* gameIntroPlan = "Цели:\n\nОткрыть все 9 достижений\nПройти 12 курсов обучения\nОткрыть 5 концовок:\n    3 из них связаны с выбором своего пути (эникейство, работа в компании, свой стартап)\n    2 из них связаны с изменением вашего положения в обществе (карма / количество денег)\n\nВаше игровое пространство - время. По сравнению с другими играми, где вы исследуете игровое пространство, здесь необходимо исследовать время.\n\nВыбрав путь, вы можете вернуться в прошлое и выбрать другой: этом вам поможет квантовый сворачиватель пространства и времени.\n\nПосле выполнения всех заданий вернитесь к начальной точке: к 21 дню. Подумайте хорошенько, порой вернуться не так просто: может не хватить средств.\n\nИгра считается законченной, когда вы увидите надпись 'The End'(вы выиграли) либо 'game over'(проиграли, не выполнили задание).";
337
 
338
const char* yourAnswer = "\n\nВаш ответ:\n\t1:%s\n\t2:%s\n";
339
const char* shitCodeYourAnswer = "\n\nВаш ответ:\n\t1:Да, конечно.\n\t2:Не, я такого не умею.\n";
340
const char* statusLine = "День: %d, $: %d, карма: %d, сообщения: %d";
341
const char* statusLineCoursesNotFinished = ", непройденных курсов: %d";
342
const char* unnamedStudio1Answer = "Смотри, второй раз предлагать не будем.\n\nВаш ответ:\n\t1:Да, ребят, я согласен!\n\t2:Хм..я не такой смелый, чтобы вкладывать последние деньги.\n";
343
const char* unnamedStudio3Answer = "\n\nВаш ответ:\n\t1:Да, от сердца отрываю!\n\t2:Нет, ну сколько можно клянчить деньги?\n";
344
const char* unnamedStudio4Answer = "\n\nВаш ответ:\n\t1:Да, давайте наймём веб-мастера.\n\t2:Нет, давайте я лучше сам быстренько выучусь и сделаю нам сайт, м?\n\t3:Что, опять тратить деньги? Да пошли вы!\n";
345
const char* angryBossAnswer = "\n\nВаш ответ:\n\t1:Да, я больше не буду фрилансить.\n\t2:Нет, всё же это не по мне. Я следую за духом свободы.\n";
346
 
347
/*************************************************************************
348
*	Modal windows' text
349
*************************************************************************/
350
 
351
const char* answerLetter = "Ответное письмо";
352
const char* cantStopDuringKnowledgeCheck= "Нет, вы не можете переместиться в середину проверки знаний. Проходите заново!";
353
const char* charityTitle = "Благотворительность";
354
const char* charityQuestion = "Вы действительно хотите пожертвовать половину ваших денег на благотворительность?";
355
const char* congratsMsg = "Поздравляем!";
356
const char* courseSuccessfullyFinished = "Курс '%s' успешно завершен! Теперь вы можете выполнять задания по выбранному направлению.";
357
const char* daysPerSecond = "Игровых дней в секунду: %d";
358
const char* doYouReallyWantToExit = "Вы действительно хотите выйти?";
359
const char* errorMsg = "Ошибка!";
360
const char* failMsg = "Неудача!";
361
const char* need100ForUndo = "Прыжки во времени дороги. Вам необходимо иметь хотя бы $100!";
362
const char* notEnoughMoneyForCharity = "Вам нечего жертвовать на благотворительность!";
363
const char* noUnreadMessages = "Нет непрочитанных сообщений!";
364
const char* prepareForTimeJump = "Сейчас будет произведён прыжок в прошлое, приготовьтесь!";
365
const char* pressRForCharity = "Теперь, имея достаточно средств, вы можете тратить деньги на благотворительность!";
366
const char* returnToDay21 = "Вы выучились всему, и добились всего, что хотели. Не забудьте вернуться в прошлое к 21-му дню, чтобы достичь поставленной цели. Подумайте хорошенько, порой это сделать не так просто.";
367
const char* rightAnswer = "Правильный ответ!";
368
const char* startupFailedTip = "Вы завалили стартап :(. Лучше вернуться в прошлое и всё исправить. Дальше ничего интересного уже не будет, это тупик.";
369
const char* successfullyEnrolled = "Вы успешно записаны на курс '%s'!";
370
const char* wrongAnswer = "Неверный ответ :(";
371
 
372
/*************************************************************************
373
*	Achievements
374
*************************************************************************/
375
 
376
const unsigned int achievesNumber = 9;
377
char* achieves[achievesNumber] = {
378
    "Гуру программирования: выполнить три супер-сложных проекта.",
379
    "Отверженный: ваша карма опустилась ниже нуля!",
380
    "Успешный стартапер: запустить прибыльный стартап.",
381
    "Миллионер: накопить $1000 000.",
382
    "Непоседа: следовать за духом свободы.",
383
    "Не твой день: променять престижную работу на стартап и не взлететь.",
384
    "Знающий своё дело: успешно пройти проверку знаний.",
385
    "Настойчивый и терпеливый: скучной работы не чурается.",
386
    "Путешественник во времени: совершать прыжки, не распадаясь на молекулы."
387
    };
388
 
389
bool achievesPicked[achievesNumber] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
390
bool achievesShowed[achievesNumber] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
391
 
392
/*************************************************************************
393
*	Final cards
394
*************************************************************************/
395
 
396
const char* defaultFinalCard = "В общем, это всё. Ты, конечно, можешь продолжать и дальше, но никаких особых \
397
событий не предвидится: ты просто всю жизнь будешь переустанавливать винду и заменять перегоревшие видеокарты. Ха! \
398
Знаешь, а такой образ жизни кому-то даже нравится: меньше ответственности и работа непыльная. На еду хватает, \
399
на интернет тоже. Зачем нам эти стартапы и работа в крупных компаниях? Пфф, ты сделал свой выбор. Что ещё нужно? \
400
Иногда, правда, никто не звонит, приходится трояны ставить некоторым, чтобы почаще звонили, а то так и с голоду \
401
помереть можно! Только тссс, никому, слышишь?\n";
402
 
403
const char* workFinalCard = "Я смотрю, ты терпеливый. Сидишь, работаешь. Вижу же, что скучаешь. А ты всё равно \
404
работаешь, на стороне заказов не берёшь. Деньги не нужны? Или боишься, уволят? Да не важно! То, что ты такой - \
405
это похвально. Вот такие и вырываются вперёд - сидят себе молча, работают, работают, а потом лет через пять РРАЗ -\
406
и становятся генеральными директорами компании, в которой работают. Вот такая у тебя перспектива, дружище. Кому-то \
407
больше нравится стабильное место в компании, чем свой стартап, который забирает кучу сил и может не взлететь. \
408
Что, хочешь свой стартап? Ну, знаешь, надо было раньше делать другой выбор!\n";
409
 
410
const char* startupFinalCard = "Согласись, это было круто! Такие бабки сколотить... хотя знаешь, это не самое главное. \
411
Главное ведь то, что то время, которое ты потратил на этот стартап, потрачено не зря. Да и не это главное, чёрт возьми! \
412
Твою игру скачивают миллионы. МИЛЛИОНЫ, СЛЫШИШЬ? Вот это главное - то, что твой продукт нужен людям. То, что тебя ценят. \
413
Потому ведь ты и ушёл в стартап, что не хочешь быть серой мышью в толпе программистов в какой-то крупной компании, где \
414
твоё видение никого не интересует. Возможность самореализации и полёт мысли - вот она, СВОБОДА! Конечно, завистники \
415
скажут, что тебе просто повезло, но мы-то знаем, сколько труда было вложено! Ты прекрасно знал, на что идёшь, иначе \
416
выбрал бы что-то другое. Но ты сделал правильный выбор. Хотя знаешь, нет неправильного выбора. Есть правильный, просто другой.";
417
 
418
const char* zeroKarmaFinalCard = "Вы настолько испортили отношения с людьми, что даже незнакомые люди не хотят иметь с вами дела. Вам никто не звонит. Это конец :(.\n\nНа самом деле нет :D. Постарайтесь любыми способами поднять карму, иначе, когда кончатся деньги, проиграете.\n";
419
 
420
const char* noMoneyFinalCard = "У вас нет денег, чтобы дотянуть до следующего звонка с предложением о работе. Как вариант - начните продавать капусту, может быть, это у вас лучше получится.\n\nНа самом деле это ещё не конец. Постарайтесь как-нибудь заработать денег, иначе, когда карма будет меньше нуля, вы проиграете!\n";
421
 
422
const char* gameOver = "Вы достигли поставленной цели и успешно завершили игру! Все курсы обучения пройдены, все концовки раскрыты, а сколько достижений вы накопили за это время! Добиться такого всего за 21 день! Опыт, который вы приобрели, бесценен, а выбор, который вы делали - правильный. Ведь нет неправильного выбора, есть просто другой. А то, что будет дальше, зависит от нас. А не от НЛО или какой-то машины времени, верно?";
423
 
424
/*************************************************************************
425
*	Hints
426
*************************************************************************/
427
 
428
const char* hintOfTheMonth = "Подсказка месяца:\n";
429
const int   hintsCount = 12;
430
const char* hints[hintsCount] = {
431
    "'Постоянный источник доходов' - это не только официальная работа или собственная компания, но также и выполнение заказов и просьб знакомых, если вы зарекомендовали себя как специалиста и имеете хорошую репутацию.",
432
    "Если отказывать всем знакомым переустановить винду или починить компьютер, то вскоре они перестанут звонить совсем.",
433
    "Залезать в долги неприятно, но запоминается надолго.",
434
    "Один мой знакомый говорил: чтобы стать миллионером, нужно основать несколько стартапов. Или только один, но несколько раз.",
435
    "Другой мой знакомый имел кучу денег, но был несчастлив. Он нигде не работал, и просто тратил деньги, пока они не закончились. Так он и закончил.",
436
    "Ходите кругами? Кажется, что здесь вы уже были и других путей нет? Вдумайтесь, вчитайтесь - всегда можно сделать какой-нибудь прорыв или достижение.",
437
    "Если ваша жизнь скучна и в ней ничего не происходит, попробуйте скопить побольше денег. Говорят, они дают больше возможностей.",
438
    "Если вы видите свой 'Конец'...гм.., то уже ничего не поможет. Это значит, что всё. Эх, если бы у нас была машина времени!",
439
    "Не знаете, чему бы новому поучиться? Вспомните, быть может, однажды вам предлагали такую возможность, а вы отказались.",
440
    "Благотворительность - хороший способ избавиться от денег, а заодно и заработать людское доверие.",
441
    "При прыжках во времени пространственно-временной континуум иногда не выдерживает и прорывается: этим можно объяснить все баги в этой игре.",
442
    "После прохождения всех курсов и открытия всех достижений и концовок не забудьте вернуться в прошлое к 21-му дню. Это может быть не так просто, как кажется: денег может банально не хватить."
443
    };
444
 
445
const char* getWordEnding(int n, int k) {
446
    int ld = n % 10; // Last digit
447
    if (ld == 1)
448
        return (k == 0)?"день\n":"раз\n";
449
    else if (ld == 2 || ld == 3 || ld == 4)
450
        return (k == 0)?"дня\n":"раза\n";
451
    else
452
        return (k == 0)?"дней\n":"раз\n";
453
    }
454
 
455
/*************************************************************************
456
*	Intro
457
*************************************************************************/
458
 
459
const char* developer = "Copyright (C) 2014 Maxim Grishin (igevorse)";
460
const char* introAllowedKeys = "А снизу - клавиши, которые вы можете нажать. Например, [1] или [Enter]";
461
const char* introDesktop = "Это - ваш рабочий стол";
462
const char* introFinished = "Ознакомление с интерфейсом завершено, начинаем игру!";
463
const char* introLetsBegin = "Начнём!";
464
const char* introStatusLine = "Сверху отображается важная информация:\n1.Текущий день.\n2.Количество денег (каждый день становится всё меньше, ведь вам нужно питаться).\n3.Карма - отношение людей к вам. \n4.Сообщения - количество непрочитанных сообщений.\n";
465
 
466
const char* gameIntroTextPart1 = "1. Случай\n\n\
467
- Разве это сервировка? Ты в какой деревне этому учился? Почему у меня ложка лежит не с той стороны, где положено?! Что молчишь? Отвечай!\n- ...\n\
468
- <дергает меня за край рукава> Ты слышишь? Да чёрт с ней, с этой ложкой, ты наши заказы перепутал! Понимаешь? Ушами хлопал, когда заказ принимал? На жену мою засмотрелся, нет?\n\
469
<снова дергает за рукав> На меня смотри! Я сюда с дамой пришёл, а ты испортил весь вечер!\n\
470
Пошёл отсюда!\n\n\
471
Развернувшись, я быстрым шагом направился к двери подсобки, ворвался внутрь, резко закрыл за собой дверь и прижался спиной к стене.\nТак больше не может продолжаться.\n\
472
Во рту появилась горечь от обиды. Ну почему всё так?\n\
473
Ну почему он придрался к этой мелочи, разве нельзя просто сделать вид, что ты её не заметил? Да он же сам испортил вечер! Да, я поставил крем-брюле не ему, а его спутнице, потому что подумал, что он заказывает не себе. Обычно ведь его заказывают дамам! Он мог бы вежливо указать на ошибку, зачем сразу устраивать истерику?\n\
474
Правила приличия, хорошие манеры? Где это всё?\n\
475
Они лицемерят и любезничают друг с другом, но как только кто-то ниже их по социальному положению ошибётся, так они стараются излить тонну гнева на бедного официанта!\n\
476
Я так больше не могу. \n\
477
Уже третий раз за неделю клиенты устраивают истерики на пустом месте! Ругаются, унижают, указывают мне на моё положение. Да и кто решил, что ЭТО - моё положение? Они? Да у них мозгов хватает только на походы в кафе и безмерные траты денег. Кто же тогда это решает?!\nУже нет сил терпеть всё это!\n\
478
Шеф узнает, начнётся такая ругань... нужно просто перетерпеть и всё. НО Я НЕ МОГУ.\n\n\
479
Нужно уходить отсюда. Нет, не потому что шеф уволит, узнав о произошедшем. Нет. Потому что я когда-нибудь кинусь с кулаками на очередного придирающегося клиента... Либо я просто сойду с ума, пытаясь терпеть всё это.\n\n\
480
Я поднял глаза и увидел себя в зеркале, висевшем напротив: на лице застыла какая-то странная безобразная ухмылка.\n\
481
Видимо, это нервное. Надо это прекращать, иначе я так долго не проживу в этом постоянном стрессе.\n\
482
Я с силой сорвал фартук и небрежно кинул на пол.\n\
483
Всё кончено!";
484
 
485
const char* gameIntroTextPart2 = "2. Цель\n\n\
486
Легко сжигать мосты, когда тебе есть, на что жить! А что делать, если в холодильнике еды на три дня? Ладно, максимум на неделю, если почти ничего не есть. Я так умею, в общаге и не такое проходили. Но если в университетской общаге можно было ходить 'в гости' к добрым студентам с открытыми сердцами, завтракать у одного, а обедать у другого, то сейчас я могу рассчитывать только на себя. В универе вообще многое было совсем по-другому. Нам говорили, что мы выйдем хорошими специалистами, получим престижную работу! \n\
487
Тень нервной ухмылки снова пробежала по лицу. Ха! И это они называют престижной работой?\n\
488
Из всех одногруппников, насколько я знаю, только пятеро смогли устроиться в хорошие компании, потому что действительно учились.\n\
489
А чем я хуже?\n\
490
А мне приходилось работать днями и ночами, чтобы хватало на еду и оплату учёбы в универе. Учёбы? Да разве это учёба? С такой работой я и в универе-то редко появлялся.\n\
491
Мне просто не повезло. Неудивительно, что я ничему и не выучился.\n\
492
В животе раздался тревожный гул, напоминая, что уже более десяти часов я ничего не ел.\n\
493
Да я скорее умру с голоду, чем вернусь работать официантом! Мне же гордость просто не позволит сломать себя и вернуться, поджав хвост.\nНужно что-то делать.\n\n\
494
Мысли мешают думать. Голова просто разрывается от мыслей!\n\
495
Я же ничего не умею!\n\
496
Единственное, что у меня неплохо получается - это давать советы. Ха! А ещё мне нравится возиться с компьютерами, когда у друзей что-то не работает. \n\
497
Нет, нет, это же не может быть работой. Это так, хобби. Надо отогнать эту мысль.\n\
498
Желудок настойчивее дал понять, что у него есть другое мнение по поводу работы. Я сжался от боли.\n\n\
499
Прошло.\nО чём я думал? Ах, да, на этом нельзя заработать. \n\
500
Хотя...\nА, собственно, почему нет? Что я ещё умею?\n...\n\
501
Вот то-то и оно. Кажется, у меня просто нет другого выхода. Лишь бы не возвращаться в этот ресторан.\n\
502
Я взял первый попавшийся смятый листок со стола, заваленного всяким хламом, карандаш, и набросал примерные расчёты.\n\
503
Так, если заниматься только эникейством, то на еду мне будет хватать... а если потом расширять круг знакомых... так, можно попробовать сотрудничать с ТОО... тогда получается...это... и это...\n\
504
Почему я не думал об этом раньше!\n\
505
С силой кинув карандаш на стол, я откинулся на спинку стула. Это же проще простого!\n\
506
Идиот, нужно было пробовать раньше!\n\n\
507
Теперь я смогу заработать хотя бы на еду. Отличная перспектива! Кстати, о перспективе: надо бы заниматься чем-то ещё кроме эникейства, иначе к зиме будет не на что купить ботинки. В универе нам читали какие-то лекции по программированию. Говорили, это вскоре станет очень востребовано.\n\
508
Что там у нас есть? Кинув взгляд на полупустую книжную полку, я первым делом замечаю книгу 'C++ за 21 день'. Мне её подарили на первом курсе. Она до сих пор стоит нетронутой. Я тогда целыми днями обслуживал столики, и совершенно не было времени её прочесть.\n\
509
Да разве это возможно? За 21 день я даже просто прочитать её не успею.\n\
510
Что там рядом? Книга 'Teach Yourself Perl in 21 days'. Ничего не понятно, но снова говорят о двадцать одном дне. Взял у преподавателя, когда готовился к дипломной, и забыл отдать. Тоже не открывал.\n\
511
Да это же смешно!\n\
512
Если бы это было так просто, то все вокруг уже писали на C++ и Perl, ведь нужно потратить всего 21 день на обучение!\n\
513
В голове снова возникло лицо разъярённого клиента: '...ты наши заказы перепутал! Понимаешь? Ушами хлопал, когда заказ принимал?'.\n\
514
Нет, таким людям и в голову не придёт чему-либо учиться.\n\n\
515
У меня же ситуация просто безвыходная, поэтому я просто ОБЯЗАН выучиться за 21 день. Любой ценой.\n\
516
Нет пути назад.";
517
 
518
const char* gameIntroTextPart3 = "3. Находка\n\n\
519
Лень. Как я где-то услышал фразу 'Ты не наладишь свою жизнь, пока не наведёшь порядок в своём доме'. Вот так и я вылизал всю комнату, лишь бы не брать эти книги в руки. Из этой комнаты-свалки я сделал просто конфетку.\n\
520
Нужно ещё вытащить всё из-под кровати и выкинуть к чёртовой матери. Я даже боюсь разгребать всё это, даже не представляю, что там может быть.\n\n<...>\n\n\
521
Что это за коробка? Я не помню такой. Да, собственно, что я мог помнить, когда приходил домой усталый после работы и сразу спать? А рано утром в 'любимый' ресторан.\n\
522
Странно. Металлическая коробка не хочет открываться. Ну-ка, поднажмём...\n\
523
Крышка отлетела обратно под кровать, из коробки выпала какая-то бумажка с надписью. \n\
524
Что там написано? 'Это тебе'.\n\
525
Что это? Какой-то механизм, микросхемы, провода и блестящий красный камень...\n\n\
526
Внезапно я всё понял. Я плюхнулся на колени перед кроватью и застыл на несколько мгновений.\n\
527
Он существует. ЭТО ОН!\n\
528
Ещё в детстве дед мне рассказывал сказки про то, как он якобы во время своих путешествий общался со знаменитостями разных времён, охотился на динозавров и вообще хорошо проводил время на светских балах. Это были увлекательные и интересные сказки на ночь. Именно так мы относились к этим рассказам.\n\
529
Он был преклонного возраста и, хотя его рассказы были интересными, мы не воспринимали его слова всерьёз. Мало ли, что там бормочет выживший из ума старик?\n\n\
530
А потом он пропал. Исчез. Совсем.\n\
531
Его так и не нашли.\n\
532
А теперь эта коробка. Я не верю своим глазам. Это же невозможно!\n\
533
Как он там называл это?\n\n\
534
Ква... квантовый сворачиватель пространства и времени! Да, именно так.\n\n\
535
Колени стали невыносимо ныть. Очнувшись, я понял, что просидел много времени. Куда там отлетела крышка? А, вот она. Закрыв коробку, я положил её на полку.\n\n\
536
Надо уже начинать что-то делать!\n\
537
Как там было... успеть всё за 21 день?\n\
538
Вызов принят!";
539
 
540
#endif