Rev 5299 | Go to most recent revision | Details | Compare with Previous | 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' |
||
193 | "Письмо от ООО 'Астра' |
||
194 | "Письмо от ООО 'Botsmann' |
||
195 | "Письмо от ООО 'Botsmann' |
||
196 | "Хэй, привет! Мы - молодая команда под названием Unnamed Studio и мы очень любим играть, а также создавать игры. Мы видели твои работы, они реально крутые! В отличие от крупных компаний у нас меньше контроля и больше возможностей для самореализации. Мы всё рассчитали, и уже скинулись. С тебя пока денег брать не будем, оставим на форс-мажор. Но у нас же всё будет гладко, верно? Больше трат не предвидится. Сообщи, если согласен. ", |
||
197 | /*11*/ "Письмо от ООО 'Botsmann' |
||
198 | "Письмо от ООО 'Botsmann' |
||
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' |
||
207 | "Письмо от ООО 'Botsmann' |
||
208 | "Письмо от ООО 'Botsmann' |
||
209 | "Письмо от ООО 'Botsmann' |
||
210 | "Слушай, да это же просто идеальный код! Не поверил бы, что ты за %d дней научился этому! У тебя сколько часов в сутках? Держи свои $%d, заслужил.", |
||
211 | "Письмо от Andrew Johnson |
||
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 |
||
283 | const char* helpDesker = "эникейщик"; |
||
284 | const char* mainMenuText = "\n\n |
||
285 | const char* noCurrentCurses = "\tВы ничему не обучаетесь...\n"; |
||
286 | const char* playerStatsEnd = "\n\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 |
||
297 | " |
||
298 | " |
||
299 | " |
||
300 | " |
||
301 | " |
||
302 | " |
||
303 | " |
||
304 | " |
||
305 | |||
306 | const char* youWin = |
||
307 | "\n |
||
308 | " |
||
309 | " |
||
310 | " |
||
311 | " |
||
312 | " |
||
313 | |||
314 | const char* gameOverLogo = |
||
315 | " |
||
316 | " |
||
317 | " |
||
318 | " |
||
319 | " |
||
320 | |||
321 | const char* playerStats[9] = { |
||
322 | " |
||
323 | " |
||
324 | " |
||
325 | " |
||
326 | " |
||
327 | " |
||
328 | " |
||
329 | " |
||
330 | " |
||
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\ |
||
5326 | igevorse | 519 | Лень. Где-то я услышал фразу 'Ты не наладишь свою жизнь, пока не наведёшь порядок в своём доме'. Вот так и я вылизал всю комнату, лишь бы не брать эти книги в руки. Из этой комнаты-свалки я сделал просто конфетку.\n\ |
5299 | igevorse | 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снова>дергает>трясущимися> |