cataclysm dark days ahead коды
Cheating
Cheating is the use or abuse of the debug system, of various exploitable bugs, doing something another player would not approve of, or anything that causes you to suddenly loathe your own avatar. Only three of these things are true.
Contents
Cheating and you!
Many new players use the things discussed here to assist in survival. While this is ‘approved’ for new players, these god-like powers shouldn’t be relied upon as you learn to handle problems through the tools available to your avatar.
This page is organized to roughly match the degree of fun you’re giving up by cheating on yourself. The methods range from neutral to severe, and the consequences of using them from momentary joy to a complete loss of respect for your performance. Like mutations, cheating creeps up on you. You have been warned!
Being too prepared
Call this a pro-tip to remind you that there is no reason to rush anything in this world. Taking the time to cook up decent amounts of Zombie pheromones so that they will high-five you as you are cleaning out liquor and clothing stores to make a million bandages is very very good form by which your character can gain a high degree of character to ameliorate the deleterious effects of the actions described on the rest of the page. If you just grinned or went to look up the fancy words then you might just be ok with the info on this page.
Using Game mechanics to the fullest
Overdoing it
Abusing Save-Points
Copying old characters to new worlds
If for some reason you want to copy an old character to a new world, you can follow the following procedure.
Creating a Story
Exploiting the Dead
You will die. And if you revert to a chronicled point you might find yourself in a situation where you are looking at your own dead body. The proper thing to do in this case is to wish for an acid bomb lest you incur the wrath of the RNG by picking up the cloned items. (This does not apply if you have the Cannibal trait and do the unspeakable.)
The Debug Messages
The Scent Map
Unassigned — Scent map. Shows the trace that forms around you as you linger in a building or move through town. Asks you what scent sensitivity you would like to view your surrounding with and requires that you enter a number from 1 to 9 specifying the ‘sensitivity of your nose.’ This ranges from 1 for the greatest smeller to 9 for the dullest nose. (Entering 0 divides by 0 and causes a crash’).
The Debug Menu
This menu is the most terrible way to CHEAT yourself out of a fun game. Unless you are in a situation caused by bugs (e.g. you spawed in a windowless doorless room) or are testing game features.
Unassigned — Debug menu. Opens up a list and asks you what Debug you want to do.
Edit player/NPCs
Looking at an NPC with this debug feature shows the name, class, destination, internal values (Trust, Fear, Anger, Owed, Aggression, Bravery, Collector, Altruism, and the needs of the NPC.
Exploits
These are still some bugs and oversights that people can use to help themselves in seriously cheaty and completely unfair ways. For example, many things with NPCs are broken and are exploitable. Trading with NPCs is one example as it is completely unfair to the NPC. That’s not the only thing however and if you read to here and are seriously bored you will eventually discover just how borked the NPC dialogue mechanics are at this point.
Operators of completely spoiled and exploited characters have even been known to read the Cataclysm DDA ‘Issues’ page on Github. The worst offenders will even download the source code and study it to discover even more of the hidden dynamics of this fantastic game. Once you have reached this ultimate level of cheatiness your only redemption is to help the project by fixing the code or posting detailed reports of your devious strategies in the forum or on github.
Cataclysm Dark Days Ahead, статический анализ и рогалики
Скорее всего, из названия статьи вы уже догадались, что в центре внимания ошибки в исходном коде. Но это вовсе не единственное, о чем пойдет речь в этой статье. Если кроме С++ и ошибок в чужом коде вас привлекают необычные игры и вам интересно узнать, что это такие за «рогалики» и с чем их едят, добро пожаловать под кат!
В своем поиске необычных игр я наткнулась на игру Cataclysm Dark Days Ahead, отличающуюся от других необычной графикой: она реализована с помощью разноцветных символов ASCII на черном фоне.
Что поражает в этой игре и ей подобных, это сколько всего в них реализовано. Конкретно в Cataclysm, например, даже для создания персонажа хочется поискать гайды, так как разных параметров, особенностей и начальных сюжетов десятки, не говоря уже о вариациях событий в самой игре.
Это игра с открытым исходным кодом, и, к тому же, написана на С++. Так что невозможно было пройти мимо и не прогнать этот проект через статический анализатор PVS-Studio, в разработке которого я сейчас принимаю активное участие. Сам проект удивил высоким качеством кода, однако, в нем все равно находятся некоторые недоработки и несколько из них я рассмотрю в этой статье.
К настоящему моменту с помощью PVS-Studio было проверено уже достаточно много игр. Например, вы можете ознакомиться с другой нашей статьей «Статический анализ в видеоигровой индустрии: топ-10 программных ошибок».
Логика
Следующий пример представляет собой типичную ошибку копирования.
V501 There are identical sub-expressions to the left and to the right of the ‘||’ operator: rng(2, 7) (dur))’ to the left and to the right of the ‘&&’ operator. player_hardcoded_effects.cpp 547
Ошибки в условии нет, но оно излишне усложнено. Стоило бы сжалиться над тем, кому придется разбирать это условие, и написать проще if( left_fav == right_fav ).
Отступление I
Для меня оказалось открытием, что игры, которые на сегодняшний день называют «рогаликами» — это лишь достаточно лайтовые последователи старого жанра roguelike игр. Началось все с культовой игры Rogue 1980 года, ставшей образцом для подражания и вдохновившей множество студентов и программистов на создание собственных игр. Полагаю, многое также привнесло сообщество настольной ролевой игры DnD и её вариаций.
Микрооптимизации
Следующая группа предупреждений анализатора указывает не на ошибку, а на возможность микрооптимизации кода программы.
V801 Decreased performance. It is better to redefine the second function argument as a reference. Consider replacing ‘const… type’ with ‘const… &type’. map.cpp 4644
Здесь за itype_id скрывается std::string. Так как аргумент все равно передается константным, что не позволит его изменить, быстрее было бы просто передать в функцию ссылку на переменную и не тратить ресурсы на копирование. И хотя, скорее всего, строка там будет совсем небольшая, но постоянное копирование без видимой на то причины излишне. Тем более, что эта функция вызывается из разных мест, многие из которых, в свою очередь, также получают type извне и копируют его.
V813 Decreased performance. The ‘str’ argument should probably be rendered as a constant reference. catacharset.cpp 256
В этом случае аргумент хоть и не константный, но в теле функции он никак не изменяется. Поэтому, для оптимизации, хорошо было бы передавать его по константной ссылке, а не вынуждать компилятор создавать локальные копии.
Это предупреждение также было не единичным, всего таких случаев нашлось 26.
Отступление II
Некоторые из классических roguelike игр до сих пор активно развиваются. Если зайти в репозитории GitHub Cataclysm DDA или NetHack, то можно увидеть, что изменения активно вносятся каждый день. NetHack вообще является самой старой игрой, разработка которой идет до сих пор: её релиз произошел в июле 1987 года, а последняя версия датируется 2018 годом.
Одной из известных, однако, более поздних игр этого жанра является Dwarf Fortress, разрабатываемая с 2002 года и впервые выпущенная в 2006 году. «Losing is fun» («Проигрывать весело») — девиз игры, в точности отражающий её суть, так как победить в ней невозможно. Эта игра в 2007 году заслужила звание лучшей roguelike игры года в результате голосования, которое ежегодно проводится на сайте ASCII GAMES.
Кстати, тем, кто интересуется этой игрой, возможно будет интересна следующая новость. Dwarf Fortress выйдет в Steam с улучшенной 32-битной графикой. С обновлённой картинкой, над которой работают два опытных модера игры, премиум-версия Dwarf Fortress получит дополнительные музыкальные треки и поддержку Steam Workshop. Но если что, владельцы платной версии Dwarf Fortress смогут поменять обновлённую графику на прежний вид в ASCII. Подробнее.
Переопределение оператора присваивания
Также нашлась интересная пара сходных предупреждений.
V690 The ‘JsonObject’ class implements a copy constructor, but lacks the ‘=’ operator. It is dangerous to use such a class. json.h 647
Этот класс обладает конструктором копирования и деструктором, однако, для него отсутствует перегрузка оператора присваивания. Проблема здесь состоит в том, что автоматически сгенерированный оператор присваивания может лишь присвоить указатель к JsonIn. В результате оба объекта класса JsonObject указывают на один тот же JsonIn. Неизвестно, может ли где-то сейчас возникнуть такая ситуация, но, в любом случае, это — грабли, на которые рано или поздно кто-то наступит.
Аналогичная проблема присутствует в следующем классе.
V690 The ‘JsonArray’ class implements a copy constructor, but lacks the ‘=’ operator. It is dangerous to use such a class. json.h 820
Более подробно об опасности нехватки перегрузки оператора присваивания для сложного класса можно почитать в статье «The Law of The Big Two» (или в переводе этой статьи «CИ++: Закон Большой Двойки»).
Еще один пример, связанный с перегруженным оператором присваивания, но на этот раз речь о его конкретной реализации.
V794 The assignment operator should be protected from the case of ‘this == &other’. mattack_common.h 49
Проблема в том, что данная реализация не защищена от присвоения объекта самому себе, что является небезопасной практикой. То есть, если этому оператору будет передана ссылка на *this, может произойти утечка памяти.
Схожий пример ошибочной перегрузки оператора присваивания с интересным побочным эффектом:
V794 The assignment operator should be protected from the case of ‘this == &rhs’. player_activity.cpp 38
В этом случае точно так же отсутствует проверка на присваивание объекта самому себе. Но в дополнение заполняется вектор. Если попытаться такой перегрузкой присвоить объект самому себе, то в поле targets получим удвоенный вектор, часть элементов которого испорчена. Однако здесь перед transform присутствует clear, что очистит вектор объекта и данные будут потеряны.
Отступление III
В 2008 году рогалики даже обзавелись формальным определением, которое получило эпичное название «Берлинская интерпретация». Согласно этому определению, основными чертами таких игр являются:
Обычная ситуация в Cataclysm DDA: промерзли и голодны до смерти, вас мучает жажда, да и вообще у вас вместо ног шесть тентаклей.
Немаловажные детали
V1028 Possible overflow. Consider casting operands of the ‘start + larger’ operator to the ‘size_t’ type, not the result. worldfactory.cpp 638
Похоже, программист хотел избежать переполнения. Но приведение результата сложения в таком случае бессмысленно, так как переполнение возникнет уже при сложении чисел, и расширение типов произведется над бессмысленным результатом. Для того, чтобы избежать этой ситуации, необходимо привести лишь один из аргументов к большему типу: (static_cast (start) + larger).
V530 The return value of function ‘size’ is required to be utilized. worldfactory.cpp 1340
Для таких случаев существует небольшая хитрость. Если переменная оказывается неиспользованной, вместо того, чтобы пытаться вызвать какой-либо метод, можно просто написать (void)world_name для подавления предупреждения компилятора.
V812 Decreased performance. Ineffective use of the ‘count’ function. It can possibly be replaced by the call to the ‘find’ function. player.cpp 9600
Судя по тому, что результат count сравнивается с нулем, идея в том, чтобы понять, есть ли хоть один требуемый элемент среди activity. Но count вынужден проходить по всему контейнеру, так как он считает все вхождения элемента. В этой ситуации будет быстрее использовать find, который останавливается после первого же найденного совпадения.
Следующая ошибка легко обнаруживается, если знать об одной тонкости.
V739 EOF should not be compared with a value of the ‘char’ type. The ‘ch’ should be of the ‘int’ type. json.cpp 762
Следующая небольшая ошибка однажды может стать критической. Не зря она есть в списке CWE как CWE-834. А их, кстати, было целых пять.
V663 Infinite loop is possible. The ‘cin.eof()’ condition is insufficient to break from the loop. Consider adding the ‘cin.fail()’ function call to the conditional expression. action.cpp 46
Как сказано в предупреждении, проверки на достижение конца файла при чтении недостаточно, необходимо также проводить проверку на ошибку считывания cin.fail(). Изменим код для более безопасного считывания:
keymap_txt.clear() нужен для того, чтобы при ошибке считывания из файла убрать из потока состояние (флажок) ошибки, иначе дальше считать текст будет нельзя. keymap_txt.ignore с параметрами numeric_limits ::max() и управляющим символом перевода строки позволяет пропустить оставшуюся часть строки.
Есть и гораздо более простой способ остановки считывания:
Если использовать поток в контексте логики, он конвертирует себя в значение эквивалентное true, пока не будет достигнут EOF.
Отступление IV
Сейчас наибольшую популярность имеют игры, которые сочетают в себе признаки roguelike игр и других жанров: платформеров, стратегий и др. Такие игры стали называть roguelike-like или roguelite. К таким играм относят такие известные тайтлы, как Don’t Starve, The Binding of Isaac, FTL:Faster Than Light, Darkest Dungeon и даже Diablo.
Хотя временами разница между roguelike и roguelite столь мала, что не понятно, к какому жанру отнести игру. Кто-то считает, что Dwarf Fortress уже не roguelike, а для кого-то и Diablo — классический рогалик.
Заключение
Хоть проект в целом и является примером качественного кода, и не удалось найти много серьёзных ошибок, это не значит, что использование статического анализа для него является избыточным. Суть не в разовых проверках, которые делаем с целью популяризации методологии статического анализа кода, а в регулярном использовании анализатора. Тогда многие ошибки можно выявить на самом раннем этапе и, следовательно, сократить стоимость их исправления. Пример расчётов.
Над рассмотренной игрой и сейчас ведется активная работа, и существует активное сообщество моддеров. Причем она портирована на множество платформ, в том числе iOS и Android. Так что, если вас заинтересовала эта игра, рекомендую попробовать!
Cataclysm dark days ahead коды
Cataclysm: Dark Days Ahead
Cataclysm: Dark Days Ahead is a turn-based survival game set in a post-apocalyptic world. While some have described it as a «zombie game», there is far more to Cataclysm than that. Struggle to survive in a harsh, persistent, procedurally generated world. Scavenge the remnants of a dead civilization for food, equipment, or, if you are lucky, a vehicle with a full tank of gas to get you the hell out of Dodge. Fight to defeat or escape from a wide variety of powerful monstrosities, from zombies to giant insects to killer robots and things far stranger and deadlier, and against the others like yourself, who want what you have.
Ncurses and tiles versions are available in the community repo.
Ncurses and tiles versions are available in the official repos.
sudo dnf install cataclysm-dda
Ncurses and tiles versions are available in the official repos.
sudo apt install cataclysm-dda-curses cataclysm-dda-sdl
We also have the following build guides:
Cataclysm: Dark Days Ahead is the result of contributions from over 1000 volunteers under the Creative Commons Attribution ShareAlike 3.0 license. The code and content of the game is free to use, modify, and redistribute for any purpose whatsoever. See http://creativecommons.org/licenses/by-sa/3.0/ for details. Some code distributed with the project is not part of the project and is released under different software licenses; the files covered by different software licenses have their own license notices.
Please see CONTRIBUTING.md for details.
Frequently Asked Questions
Is there a tutorial?
How can I change the key bindings?
How can I start a new world?
World on the main menu will generate a fresh world for you. Select Create World.
I’ve found a bug. What should I do?
I would like to make a suggestion. What should I do?
You can also submit your suggestions or vote for existing suggestions on our FeatHub page. Most voted suggestions are:
About
Cataclysm: Dark Days Ahead
Cataclysm: Dark Days Ahead (рус. Катаклизм: Впереди тёмные дни) – бесплатная компьютерная игра в жанре симулятора выживания с элементами рогалика. Игра предлагает взять под управление персонажа, самостоятельно созданного игроком в редакторе или выбранного игрой случайным образом, и попытаться выжить в сложном и опасном мире как можно дольше. В отличие от большинства других рогаликов, у игры нет конечной цели как таковой, выживание становится самоцелью, а цели каждый игрок выбирает себе самостоятельно. Кто-то может поставить себе задачу построить огромный «смертовоз» размером с особняк, который будет проезжать города насквозь, не замечая таких препятствий, как орды монстров или здания. Кто-то откроет в себе фермера и будет самостоятельно выращивать продукты питания и заведёт скотину. Кто-то задастся целью восстановить цивилизацию и начнёт строить множество коммун выживших.
Содержание
Сеттинг [ править ]
Действие игры разворачивается на фоне последствий американо-китайской войны и вторжения загадочных существ из иного измерения, которые, собственно, и привели к завершению не только этой войны, но и существованию человеческой цивилизации в том виде, в котором мы её знали.
Блоб (blob, «сгусток») — малоизученная форма жизни, внимание которой привлекли человеческие учёные в процессе более-менее успешных экспериментов по телепортации. Это невообразимое чужеродное чудовище посчитало Землю вполне подходящей для распространения, и очень быстро пропитало собой всю биосферу планеты. «Победить» блоб возможно не более, чем справиться с Азатотом — любой зомби для него не важнее клетки организма или того меньше, если даже и получится обратить на себя его внимание, человека он просто прихлопнет, так что остаётся только приспосабливаться к новым условиям и надеяться, что внимания он не обратит — что вполне согласуется с мнением самого блоба. Оно уже заняло Землю, и что дальше будет происходить на ней, ему глубоко фиолетово.
Обычно при жизни концентрация блоба в тканях мала, и позволяет всего лишь мутировать (блоб неизвестным образом сохраняет «основной» фенотип, и позволяет направленно модифицировать его мутагенами с примесью блоба, сохранившего другой фенотип) и необычайно быстро заживлять раны, но насекомые мутируют в гигантских, а млекопитающие, включая людей, после смерти (а малый процент человеков — и при жизни, такие «одичавшие» — feral — людозомби сохраняют интеллект) становятся зомби — марионетками блоба, с типичными зомбяческими особенностями вроде шаркающей походки, ненависти ко всему живому и необходимости разнести труп в труху, чтобы он не встал обратно. Блоб по одному ему ведомым причинам иногда модифицирует своих «подопечных», и в результате спровоцированных им мутаций на выходе получаются самые разные вариации — кислотные зомби, дымные зомби, огромные зомби-халки, и даже скелеты — в ранних версиях буквально ходячие скелеты без плоти, в поздних, после пересмотра сеттинга, обросшие костяными пластинами зомби.
Модифицируемость [ править ]
В первую очередь можно отметить упор на по возможности максимальную настраиваемость игры. Различные настройки и опции присутствуют в создании игрового мира и игрового персонажа. Существует большое число созданных как посторонними людьми, так и самими разработчиками, модов, затрагивающих самые разные аспекты игры – добавляются новые монстры, предметы, локации, профессии, транспортные средства и многое другое.
Игровой процесс [ править ]
При создании игрового мира можно выбрать стартовый сезон, количество монстров, количество предметов, количество неигровых персонажей и т.д.
При создании игрового персонажа можно выбрать один из многих видов сценариев, как облегчающих, так и усложняющих игру, а также довольно сильно влияющих на геймплей. Например, выбор сценария неграмотного средневекового крестьянина, каким-то непонятным образом переместившегося в наше время, закроет ему доступ ко всем книгам и компьютерам, без которых невозможен высокоуровневый крафт.
Огромный список положительных, отрицательных и нейтральных «черт характера» позволяет тонко настроить характер, повадки и образ жизни игрового персонажа. Черты могут быть как практически бесполезными (например, отрицательная черта «уродливый» даёт штрафы при общении с неигровыми персонажами, но они не настолько велики, чтобы на них стоило обращать внимание, кроме того, уродливость можно компенсировать высокими навыками общения. А можно вообще свести всё общение к стрельбе на поражение, особенно если дополнить уродливость чертой «психопат». В итоге получается бесплатное очко, которое можно потратить на развитие других черт, навыков или характеристик), так и архиполезными (например, черта «ночное зрение» удваивает радиус видимости игрового персонажа ночью, что позволяет замечать монстров до того, как столкнёшься с ними нос к носу, и таким образом немало помогает выжить, особенно на начальных стадиях игры).
В игре реализовано большое количество механик и возможных действий персонажа – есть возможность строить различные конструкции (дома, ограды, мебель).
Отличительные черты [ править ]
В разработке приоритет отдаётся максимальной реалистичности. Поскольку в первую очередь это – симулятор выживания, то в игре учитывается множество факторов, могущих повлиять на выживание: голод, жажда и усталость игрового персонажа, температура его тела (для каждой части тела – отдельно) и окружающего воздуха, погодные условия, мораль (боевой дух) и другие.
Разработка [ править ]
Разработку игры отличает просто ураганный её темп. В некоторые дни количество внесённых изменений оценивалось несколькими десятками. Среди них как добавление нового контента или фич, так и правка багов, а также различные улучшения производительности и внутренние, невидимые игроку, инфраструктурные изменения.
Разработка ведётся на добровольной основе группой энтузиастов в своё свободное время (т.н. «контрибьюторов»). Люди из этой группы предлагают свои изменения на рассмотрение команде CleverRaven, куда входят разработчики с правами внесения рассмотренных изменений в саму игру. Состав контрибьюторов постоянно меняется, так как люди приходят и уходят, хотя среди них много ветеранов, заставших ещё оригинальный Cataclysm за авторством Whales.
Бессменным лидером CleverRaven с 2013 года является Кевин kevingranade Гренейд, который обладает всей полнотой власти и принимает судьбоносные для проекта решения. Также он определяет, кому давать право вносить в игру предложенные другими изменения. Кевин сотоварищи сделал форк оригинального Cataclysm в 2013 году, когда его автор забросил своё творение.
Разработка игры осуществляется в двух направлениях. Основной для разработчиков является «экспериментальная» версия, куда по умолчанию и вносятся все предлагаемые контрибьюторами изменения. Она может быть нестабильная, так как не все изменения бывают тщательно протестированы их авторами, и вызывать различные баги или даже вылеты игры. О таких проблемах неравнодушные к проекту игроки практически сразу после обнаружения сообщают на различных сайтах, посвященных игре, в первую очередь на платформе Github. Это позволяет в оперативном режиме реагировать на них и выпускать патчи. Однако именно в экспериментальной версии присутствуют самые последние и интересные фичи, расширяющие игровой контент.
Основной же для большинства игроков является «стабильная» версия, выпускаемая командой разработчиков с некоторой периодичностью. Предполагается, что в ней устранены самые вопиющие баги, а фичи, добавленные в экспериментальных версиях, протестированы (на основе отзывов игроков), отлажены и отбалансированы. Эта версия рекомендуется всем игрокам, которые не хотят сталкиваться с потенциальными проблемами экспериментальной версии и/или быть её добровольными тестерами.
По иронии судьбы стабильная версия может оказаться менее стабильной, чем экспериментальная, уже через несколько часов после выхода следующей экспериментальной версии, если в последней будет устранён какой-нибудь баг.
Реакция, критика и срачи [ править ]
Практически с самого начала разработки.
Тропы [ править ]
Поскольку игра весьма богата на контент, то и тропами она тоже весьма богата.