<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-6662027946087430531</id><updated>2024-09-14T19:11:42.135+03:00</updated><category term="Teeworlds"/><category term="ajaxplorer"/><category term="bugs"/><category term="tricks"/><category term="windows"/><category term="баги"/><category term="игра"/><category term="информационная безопасность"/><category term="трюки"/><category term="читы"/><title type="text">Блог им. nsinreal</title><subtitle type="html">Блог простого пользователя, местами программиста, местами интересного человека.</subtitle><link href="http://nsinreal.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default?redirect=false" rel="self" type="application/atom+xml"/><link href="http://nsinreal.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><author><name>nsinreal</name><uri>http://www.blogger.com/profile/13058058195552403712</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry><id>tag:blogger.com,1999:blog-6662027946087430531.post-574444839586200247</id><published>2010-12-05T20:44:00.012+02:00</published><updated>2010-12-06T20:28:43.819+02:00</updated><title type="text">Переводы → Алгоритм поведения призраков в игре Pac-Man</title><content type="html">&lt;p&gt;&lt;span style="font-size: x-small;"&gt;Это перевод статьи &lt;a href="mailto:chad@gameinternals.com"&gt;Chad Birch&lt;/a&gt;, оригинал которой доступен здесь: &lt;a href="http://gameinternals.com/post/2072558330/understanding-pac-man-ghost-behavior"&gt;Understanding Pac-Man Ghost Behavior&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;Мне кажется, что начать этот блог нужно той темой, которая вдохновила меня на создание этого блога. Не так давно я наткнулся на Джейми Питмановское &lt;a href="http://home.comcast.net/%7Ejpittman2/pacman/pacmandossier.html"&gt;"Досье Pac-Man'а"&lt;/a&gt;, который является смехотворно-детальным объяснением механики Pac-Man. Мне показалость это абсолютно  увлекательным, поэтому этот блог - моя попытка обнаружить и совокупить такую же детализированную информацию о других играх (хотя и в маленьком кусочках). В дань величайшей игре, я начну с  Pac-Man, в частности, с ИИ призраков. Это очень интересная тема и, надеюсь, мое объяснение будет немного более доступно, чем Джеймовское в связи с тем, что я сосредоточу внимание лишь на  поведении призраков.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;О игре&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;“Все доступные в то время компьютерные игры были лишь насильственного типа, вроде военных игр и космических захватчиков. Не существовало ни одной игры, играя в которую мог  насладиться каждый, и особенно ничего не было создано для женщин. Я хотел придумать "смешную" игру, которой могли наслаждаться и женщины”&lt;br /&gt;
- Тору Иватани, создатель Pac-Man&lt;/blockquote&gt;&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/initial-playfield.png" /&gt;Pac-Man является одной из наиболее культовых видео-игр всех времен и большинство людей (говоря людей, я подразумеваю не геймеров тоже) по крайней мере слышали о ней. Смысл игры очень прост -  игрок находится в лабиринте, наполненном продуктами питания, которые изображены в виде гранул и точек, и кушает все это, чтобы перейти на следующий уровень. Это задача осложняется четырьмя  призраками, которые преследуют Pac-Man'а в лабиринте. Если Pac-Man встречается с призраком, то игрок теряет жизнь, а Pac-Man и призраки возвращаются на исходные позиции. К счастью, съеденные  гранулы так и остаются съеденными. В противовес простого избегания призраков, единственным вариантом защиты есть четыре большие "энерджайзерные" гранулы, которые расположены в углах  лабиринта. Поедание этих гранул ненадолго заставляет призраков обратиться в бегство, а на ранних уровнях игры, Pac-Man может даже съесть призраков ради получения бонусных очков и просто  удовольствия. Съеденный призрак уничтожается не навсегда, а возвращается в начальную позицию для нового преследования игрока. Кроме поедания гранул и призраков есть еще один источник очков -  две вишенки, которые появляются после поедания 70 (первая вишенка) и 170 (вторая вишенка) гранул.&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p&gt;Каждый уровень игры использует тот же лабиринт, содержащий 240 гранул и 4 энерджайзера. Туннели слева и справа от экрана выступают в качестве телепорта и могут использоваться как игроком, так и  призраками. Поскольку лабиринт один и тот же, уровни отличаются скоростью Pac-Man'а, а также поведением и скоростью призраков. После достижения 21-го уровня не происходит никаких изменений в игровой механик, поэтому все уровни после 21-го полностью одинаковы.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;Общие элементы поведения призраков&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;“Существует не так много развлечений в игре о приеме пищи, поэтому мы решили создать врагов, чтобы придать игре немного остроты. Игрок должен бороться с врагами, чтобы получить пищу. И каждый из врагов имеет свой собственный характер. Врагами выступают четыре маленьких призрачных монстра, каждый из которым имеет разный цвет - голубой, желтый, розовый и красный. Я использовал четыре разных цвета, в основном, чтобы удовлетворить женщин, которые будут играть - я думал, им понравятся эта прелестная раскраска”&lt;br /&gt;
- Тору Иватани, создатель Pac-Man&lt;/blockquote&gt;&lt;p&gt;Каждый из призраков запрограммирован с индивидуальной личностью, с разными алгоритмами передвижения по лабиринту. Понимание того, как ведет себя каждый призрак очень важно для того, чтобы эффективно их избегать. Однако, прежде чем обсуждать их индивидуальное поведение, нужно рассмотреть логику, которую они всегда используют.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Дом призраков&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Когда игрок начинает играть, он не сразу подвергается атаке сразу четырьмя призраками. Как показано на рисунке с первоначальным игровым положением, только один призрак появляется в лабиринте, все остальные сидят в маленьком замкнутом пространстве, названном "домом призраков". Призраки будут возвращаться в этот дом только в случае начала нового уровня, смерти Pac-Man'а или в том случае, когда Пак-Ман съест их. В других случаях дом призраков недоступен ни для игрока, ни для призраков. Призраки всегда движутся влево после покидания дома, хотя иногда меняют направление сразу из-за эффекта, который будет описан позже&lt;/p&gt;&lt;p&gt;Условия, определяющие момент, когда три призрака, оставшихся в доме, могут покинуть его, очень сложны. Из-за этого я считаю их выходящими за рамки данной статьи, в особенности из-за того, что они становятся менее актуальными после прохождения нескольких уровней. Если вы заинтересованы в чтении этих правил (а также заинтересованы в их использовании), то "Досье Pac-Man'а" вас ждет.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Клетки-цели&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/tiled-playfield.png" /&gt;Большая часть дизайна и механики игры вращается вокруг идеи разбиении игрового экрана на клетки. Клеткой в этом контексте является квадрат 8х8 пикселей на экране. Разрешение экрана игры составляет 224х228 пикселей, что в итоге дает нам экран размером 28х36 клеток, большая часть которых недоступны для Пак-Мана и призраков. Примером действия клеток, является то, что призрак поймавший Пак-Мана, находится с ним в одной и той же клетке. Кроме того, каждая гранула находится в центре собственной клетки. Нужно отметить, что размеры Пак-Мана и призраков несколько больше, чем 8х8, поэтому на экране они никогда не содержатся в одной клетке. Поэтому считается, что игрок/призрак находится в той клетке, которая содержит его центральную точку. Это очень важно для бегства от призраков, поскольку Пак-Ман будет пойман только в том случае, если центральные точки Пак-Мана и призрака будут находиться в одной клетке.&lt;/p&gt;&lt;p&gt;Ключ к пониманию поведения призраков лежит в понимании концепции клетки-цели. Подавляющее большинство времени, каждый призрак пытается достичь выбранной клетки и его поведение основывается на попытке добраться до необходимой клетки. Все призраки используют один и тот же метод путешествия к их цели, но каждый призрак в силу своей индивидуальности по-разному выбирает целевую клетку. Обратите внимание, что нет никаких ограничений на расположение целевой клетки и чаще всего клеткой-целью становится стенка и многое из поведения призраков является прямым результатом такого выбора. Целевые клетки будут подробнее рассмотрены в следующих разделах, а сейчас просто помните, что призраки действуют практически всегда мотивированно с целью достичь необходимой им клетки&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Типы поведения призраков&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Призраки всегда находятся в одном из трех возможных типов: Охота, Брожение и Бегство. "Нормальным" типом призрака является Охота и это тот тип поведения, в котором они пребывают практически все время. В режиме Охота все призраки используют позицию Пак-Мана как фактор в выборе целевой клетки, хотя для каждого призрака позиция игрока имеет разную важность. В режиме Брожение каждый призрак имеет фиксированную целевую клетку, которая находится за пределами выбранного угла лабиринта. Это заставляет призраков перемещаться из угла в угол, когда они не в режиме Охоты. Наиболее уникальным типом поведения является режим Бегство, в котором призраки не имеют целевой клетки. Вместо этого они случайно (или псевдослучайный, если вам будет угодно) на каждом перекрестке выбирают куда повернуть. Кроме того, призраки в этом режиме темно-синего цвета, двигаются более медленно и могут быть съедены Пак-Маном. К сожалению, длительность режима Бегство на каждом уровне сокращается, пока совсем не пропадет на 19 уровнем.&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;“Чтобы придать игре некоторое напряжение, я хотел чтобы монстры окружили Пак-Мана в определенный момент игры. Но я чувствовал, что это будет несколько стрессовым моментом игры для человека вроде Пак-Мана, за которым постоянно охотятся и который постоянно окружен. Поэтому я сделал так, чтобы атаки монстров были в виде волн. Они атакуют, а затем отступают. Пройдет время, призраки перегруппируются, пойдут в атаку и рассеяться по карте вновь. Это смотрелось более натурально чем постоянные атаки”&lt;br /&gt;
- Тору Иватани, создатель Pac-Man&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Смена режимов Охоты и Брожение происходит по фиксированному таймеру, что вызывает волновой эффект, описанный Иватани. Этот таймер сбрасывается при старте нового уровня и смерти Пак-Мана. Таймер также приостанавливается когда призраки находятся в режиме Бегства. Когда режим Бегства заканчивается, призраки возвращаются в свое предыдущее состояние и таймер продолжает отсчет. Призраки начинают в режиме Брожение, после чего определенны четыре волны Брожение/Охоты. После этого призраки переходят в режим Охоты на неопределенное время (пока таймер будет сбрасываться). Продолжительность этих волн (фаз) для первого уровня:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Брожение - 7 секунд, после Охота - 20 секунд&lt;/li&gt;
&lt;li&gt;Брожение - 7 секунд, после Охота - 20 секунд&lt;/li&gt;
&lt;li&gt;Брожение - 5 секунд, после Охота - 20 секунд&lt;/li&gt;
&lt;li&gt;Брожение - 5 секунд, после переключение в режим охоты навсегда&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;p&gt;Продолжительность этих фаз меняется частично на уровне 2 и на уровне 5. На 2-м уровне, третий режим охоты увеличивается до 1033 секунд (17 минут и 13 секунд) и последующий режим Брожение продолжается только 1/60 секунды перед тем, как призраки переключатся в постоянный режим Охоты. На уровне 5 дополнительно уменьшается время первых двух режимов Брожение до 5 секунд и увеличивает третий режим Охоты на 4 секунды (всего 1037 секунд или 17:17). Что касается 1/60-секундного режима Брожение, может показаться, что переключение режимов игры на такое маленькое время не имеет смысл, но на самом деле есть причина, которая будет описана вскоре&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Базовые правила движения призраков&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Следующим шагом является понимание того, как именно призраки пытаются достичь целевых клеток. ИИ призраков очень просто и "близорук", что делает сложное поведение призраков еще более впечатляющим. Призраки планируют только один будущий шаг. Всякий раз, когда призрак стает на новую клетку, он смотрит на клетки впереди и принимает решение, куда пойдет дальше. Это решение имеет очень важное ограничение: призрак никогда не может изменить направление движения. Т.е, призрак, войдя на клетку с левой стороны, не может пойти обратно влево. Смысл этого ограничения в том, что если призрак движется по тоннелю, где все клетки имеют два выхода (влево и вправо/вверх и вниз), то он всегда будет продолжать двигаться в одном направлении.&lt;/p&gt;&lt;p&gt;Однако, существует исключение из этого правила, которое проявляется при переходе из режима Охоты или Брожение в любой другом режиме: призраки вынуждены менять направление сразу после перехода на следующую клетку. Эта принудительная инструкция будет перезаписывать любое решение, которое призрак сделал ранее о направлении движения. Это неплохо действует как уведомление игрока, что игрок поменял тип поведения, так как это единственная возможность призрака поменять направление. Заметьте, что когда призрак покидает режим Бегства, он не меняет своего направления, но это неважно, поскольку он меняет свой цвет с темно-синего на обычный. Поэтому 1/60-секундный режим Брожение на каждом уровне (кроме первого) заставляет каждого призрака менять направление своего движения, даже если их целевая клетка остается той же самой. Эта принудительная смена направления применяется даже к призракам в "доме", поэтому призрак, который только вошел в лабиринт, может изменить обычное направление движения (как вы помните, призрак вышедший из дома, движется налево) и пойти направо.&lt;/p&gt;&lt;div align="center"&gt;&lt;img align="center" src="http://media.gameinternals.com/pacman-ghosts/intersection-map.png" /&gt;&lt;/div&gt;&lt;p&gt;На рисунке выше изображено упрощенное представление лабиринта. Решения о изменении направления движения принимаются только на "перекрестках", которые показаны зеленым цветом.&lt;/p&gt;&lt;img align="left" src="http://media.gameinternals.com/pacman-ghosts/decision.png" /&gt; Когда необходимо выбрать направление поворота, выбор основывается на том, какая клетка, примыкающая к пересечению, наиболее близка к целевой клетке по прямой линии. Расстояние от каждой клетки до целевой будет взвешено  и будет выбрана наиболее близкая. На рисунке слева, призрака пойдет вверх на перекрестке. Если две или более потенциально выбранные клетки имеют равное расстояние, то они выбираются в таком порядке: верхняя, левая, нижняя. Призрак никогда не примет решения пойти вправо, если есть две равноудаленные клетки, так как любой вариант имеет более высокий приоритет&lt;br /&gt;
&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/bad-decision.png" /&gt;&lt;br /&gt;
&lt;p&gt;Так как рассматривается только расстояние по прямой до целевой клетки, то может произойти так, что первоначальный выбор клетки по прямой ближе, но общий путь длиннее. Пример показан на рисунке справа, где расстояние по прямой меньше у клетки слева и это для призрака является лучшим выбором. Однако это приведет к общей длине пути в 26 клеток, тогда как при выборе направления вправо, длина могла бы быть 8 клеток.&lt;/p&gt;&lt;p&gt;Последним частным случаем являются "перекрестки", помеченные желтым на упрощенном рисунке лабиринта. Конкретно эти пересечения имеют дополнительное ограничение - призрак не может выбрать направление вверх. Если они войдут с правой/левой стороны, то они всегда пойдут в том же направлении, в каком и ишли, за исключением смены режимов. Так же, это ограничение не работает в режиме Бегства и испуганные призраки могут пойти вверх, поскольку решения в этом режиме принимаются случайно. Если за Пак-Маном гонится призрак, то игрок может получить некоторое преимущество, поворачивая вверх, так как призраки будут вынуждены пройти больший путь.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;Индивидуальные личности призраков&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;“Это сердце игры. Я хотел, чтобы каждый призрачный враг имел индивидуальный характер и свои собственные движение, поэтому они не были все в погоне за Пак-Маном в одном ряде, что было бы утомительным и глупым”&lt;br /&gt;
- Тору Иватани, создатель Pac-Man&lt;/blockquote&gt;&lt;div align="center"&gt;&lt;img align="center" src="http://media.gameinternals.com/pacman-ghosts/ghost-names.png" /&gt;&lt;/div&gt;Как уже упоминалось ранее, различие между призраками заключается только в методах выбора целевых клеток в режимах Бегства и Брожение. Сначала рассмотрим более простой вариант поведения - в режиме Брожение, а затем перейдем к режиму Охоты.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Режим Брожение&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/scatter-targets.png" /&gt; В этом режиме каждый призрак имеет зафиксированную целевую клетку, расположенную за пределами углов лабиринта. Когда начинается этот режим, каждый призрак бредет к целевому углу и пытается достичь заданной точки. Но поскольку целевые клетки недоступны, а призраки не могут развернуться и пойти в обратном направлении, то фактически они входят в петлю, где крутились бы бесконечно, если бы оставались в этом режиме всегда. Но на практике, режим Брожение длится очень мало и призраки не успевают даже дойти до угла. На схеме справа изображены целевые клетки и петли, по которым должны ходить призраки.&lt;p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Красный призрак&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://media.gameinternals.com/pacman-ghosts/blinky-targeting.png" /&gt; Красный призрак начинает вне "дома" и обычно он рассматривается как первая угроза, тем более с учетом того факта, что он начинает преследовать Пак-Мана практически сразу. Его зовут «Блинки» и в игре его личность описана как «тень» (shadow). На японском, его личность названа ???? (oikake), что переводиться как "преследователь" или "охотник". Описание Блинки на обоих языках очень точное, так как целью этого призрака является текущая клетка с Пак-Маном. Это означает, что красный призрак преследует Пак-Мана всегда, пока не выберет неэффективный путь (например, если игрок свернет вверх на желтом "перекрестке"). Хотя Блинки имеет простой метод выбора цели, но этот призрак имеет одну особенность, которой нету у других призраков: в двух заданных точках на каждом уровне (в зависимости от оставшегося количества точек), его скорость увеличивается на 5% и его поведение в режиме Брожение меняется. Время изменения скорости разное на каждом уровне, а изменение скорости происходит все раньше и раньше на каждом последующем уровне.&lt;/p&gt;&lt;p&gt;В результате изменения поведения Блинки в режиме Брожения, призрак все равно гонится за Пак-Маном, поэтому Блинки находится в режиме Охоты практически постоянно, хотя он и будет вынужден сменить направление при смене режима поведения. В этом состоянии Блинки называют как “Cruise Elroy”, хотя никто и даже Джейми Питман не знает происхождение этого термина. Если Пак-Ман умирает, когда Блинки находится в данном режиме, то Блинки возвращается к нормальному поведению до тех пор, пока другие призраки не вышли из "дома".&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Розовый призрак&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align=left src="http://media.gameinternals.com/pacman-ghosts/pinky-chicken.png" /&gt;&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/pinky-targeting.png" /&gt; Начинает в "доме", но выходит из него практически сразу, даже на первом уровне. Имя - "Пинки". Описание личности - быстрый (speedy). На японском - ???? (machibuse, сидящий в засаде). Японский вариант описания более соответствует реальности, так как призрак выбирает целевую клетку там, куда Пак-Ман сейчас направляется (а именно: вперед на четыре клетки по направлению игрока). Так как целевая клетка находится вперед от пэкмана на четыре точки, то тут есть важное последствие: если Пак-Ман и Пинки шли навстречу, то целевая клетка могла оказаться сзади от призрака и он был вынужден сделать поворот и пройти более длинный путь (см. картинку слева)&lt;br /&gt;
&lt;p&gt;К сожалению, из-за ошибки переполнения в коде, если Пак-Ман направлялся вверх, то целевая клетка устанавливалась на четыре клетки вверх и на четыре влево. Если вам интересны технические детали то есть замечательное &lt;a href="http://donhodges.com/pacman_pinky_explanation.htm"&gt;объяснение&lt;/a&gt; от Дона Ходжеса. Ниже показана картинка с такой багой:&lt;/p&gt;&lt;div align=center style="text-align:center"&gt;&lt;img align="center" src="http://media.gameinternals.com/pacman-ghosts/pinky-targeting2.png" /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Голубой призрак&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/inky-targeting.png" /&gt;&lt;br /&gt;
Имя - Инки. Описание личности - застенчивый, робкий. На японском - ???? (kimagure, капризный, причудливый). Это единственный призрак, который использует положение не только Пак-Мана, а еще и Блинки. Метод выбора цели можно описать так: выбрать вторую клетку перед Пак-Маном (тут тоже может произойти переполнение при движении вверх - тогда выбирается вторая клетка слева), взять вектор от Блинки до выбранной клетки и удвоить его.&lt;br /&gt;
Как результат, цель Инки может сильно отличаться от положения Пак-Мана и будет находиться только если Блинки в непосредственной близости от Пак-Мана (&lt;b&gt;прим. переводчика&lt;/b&gt;: &lt;i&gt;Наиболее близко целевая клетка и клетка с Пак-Маном будут только тогда, когда ПакМан и Блинки идут друг на друга. Ну и с учетом ошибки переполнения: если ПакМан идет вверх, а Блинки где-то возле второй клетки слева от Пак-Мана&lt;/i&gt;).&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;Желтый призрак&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://media.gameinternals.com/pacman-ghosts/clyde-targeting2.png" /&gt;&lt;img align="right" src="http://media.gameinternals.com/pacman-ghosts/clyde-targeting.png" /&gt; Имя: Клайд. Описание личности: тюремщик. На японском: ??? (otoboke, притворяться, что игнорируешь). Как обычно, японский вариант описания куда более точен, поскольку метод выбора цели Клайда можно описать как "делающий своей дело" (&lt;b&gt;прим. переводчика&lt;/b&gt;: &lt;i&gt;&lt;/i&gt;в корне не согласен). Уникальная особенность Клайда - это два разных режима преследования, зависящих от расстояния до ПакМана. Если расстояние больше 8 клеток, то он использует в качестве цели клетку с ПакМаном (как Блинки), а если меньше 8 клеток, то в качестве целевой клетки Клайд выбирает ту же клетку, что при режиме Брожение. &lt;/p&gt;&lt;div align=center style="text-align: center"&gt;&lt;img align="center" src="http://media.gameinternals.com/pacman-ghosts/clyde-targeting3.png" /&gt;&lt;/div&gt;&lt;p&gt;Комбинирование этих методов позволяет Клайду постоянно менять направление то к Пакману, то от него, пока он не будет загнан в угол. На рисунке выше крестиками отмечены те места, в которых происходит переключение режимов. Если ПакМану удастся оставаться на своем месте, то Клайд будет вечно петлять. Пока Пак-Ман не находится в левом нижнем углу лабиринта, у игрока есть гарантия, что Клайда можно избежать. Если ПакМан находится в восьми клетках от левого нижнего угла, то петля Клайда должна иметь ту же форму, как и в режиме Брожение.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: x-large;"&gt;Заключение&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Если вы прочитали эту статью, то должны иметь представление о логике призраков в Пак-Мане. Понимание этого позволит вам стать отличным игроком в этой игре. Я никогда не был хорошим игроком, но пока я писал данную статью и тестировал некоторые штуки, я начал избегать призраков лучше чем раньше. Даже небольшие знания могут помочь в игре, к примеру, знание, что пока призраки в режиме Брожение, у вас есть пара секунд, пока призраки не хотят убить вас.&lt;/p&gt;&lt;p&gt;Pac-Man - удивительный пример сложного поведения, вытекающего из нескольких простых и хорошо-разработанных правил, создающих настолько интересную и сложную игру, что в неё продолжают играть и через 30 лет после выпуска.&lt;/p&gt;Источники:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://home.comcast.net/%7Ejpittman2/pacman/pacmandossier.html"&gt;The Pac-Man Dossier, Jamey Pittman&lt;/a&gt; - практически единственный источник, который пригодится вам для собственных исследований. Честно говоря, большая часть это статьи является перефразированием The Pac-Man Dossier. Настоятельно рекомендую к прочтению, если вам понравилась эта статья.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://donhodges.com/pacman_pinky_explanation.htm"&gt;Pac-Man’s Ghost Behaviour Analyzed and Fixed, Don Hodges&lt;/a&gt; - объяснение бага в поведении Пинки и Инки.&lt;/li&gt;
&lt;li&gt;Все цитаты Тору Иватани были украдены с интервью в книге "Programmers at Work", написанной Susan M. Lammers. Полное интервью доступно здесь: &lt;a href="http://pacmanmuseum.com/history/Toru-atwork.php"&gt;Pac-Man Museum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link href="http://nsinreal.blogspot.com/feeds/574444839586200247/comments/default" rel="replies" title="Комментарии к сообщению" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/6662027946087430531/574444839586200247" rel="replies" title="Комментарии: 1" type="text/html"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/574444839586200247" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/574444839586200247" rel="self" type="application/atom+xml"/><link href="http://nsinreal.blogspot.com/2010/12/pac-man.html" rel="alternate" title="Переводы → Алгоритм поведения призраков в игре Pac-Man" type="text/html"/><author><name>nsinreal</name><uri>http://www.blogger.com/profile/13058058195552403712</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6662027946087430531.post-2659700359860198874</id><published>2010-05-11T18:16:00.006+03:00</published><updated>2010-12-06T20:27:52.508+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bugs"/><category scheme="http://www.blogger.com/atom/ns#" term="Teeworlds"/><category scheme="http://www.blogger.com/atom/ns#" term="tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="баги"/><category scheme="http://www.blogger.com/atom/ns#" term="трюки"/><title type="text">Teeworlds → Трюки и баги Teeworlds</title><content type="html">&lt;a href="http://www.teeworlds.com/images/screens/screenshot0016.png"&gt;&lt;img align="left" hspace="10px/" src="http://www.teeworlds.com/images/screens/screenshot0016_t.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;TeeWorlds&lt;/b&gt; — популярная свободная компьютерная игра в жанре многопользовательского 2D шутера. И в этой статье вы найдете описание таких трюков этой игры, как хук, рокетджамп, рокетфлай, рокетбуст, думми драг, мегафлай, медленное падение, башенка и мост.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Использование веревки (&lt;b&gt;хук&lt;/b&gt;) является самым примитивным трюком, но с помощью хука можно буквально летать по карте. Делится трюк на два типа: хук стен и хук других игроков.&lt;br /&gt;
Хук стен помогает взбираться на высокие платформы, а также увеличивает скорость, преобразовывая скорость по оси OY (т.е. гравитацию) в скорость по оси OX. Важно помнить, что ускорение от веревки сильнее гравитации. &lt;br /&gt;
Также можно разогнаться, прихукнувшись к полу, а после отойдя в противоположную сторону быстро пойти в нужную и отхукнуться, когда колобок поровняется с местом крепления веревки. Этот трюк так и называется - &lt;b&gt;разгон хуком&lt;/b&gt;. &lt;br /&gt;
Хук игроков используется для замедления и убийства противников. Кстати, важно знать, что хук смещает не только противника, но и вас, но с более малой скоростью.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Рокетджамп&lt;/b&gt; - второй по популярности трюк. Этот трюк использует особенность гранатомета - взрывную волну от гранаты. Если выстрелить себе под ноги и выполнить прыжок в момент взрыва гранаты, то колобок получит неплохое ускорение. Важно знать, что рокетджамп исполняется только с дополнительным ускорением (прыжок или хук), так как граната сама по себе не дает сильного ускорения. С ускорением в виде хука нужно быть осторожным: после того как колобок выровнялся с местом крепления веревки, хук перестает давать нужное ускорение. &lt;br /&gt;
Обычный рокетджамп с земли называют одиночным. Если же выпустить одну гранату в воздух, а другую - себе под ноги в момент взрыва первой, то это будет уже двойной рокетджамп. Аналогично исполняются 3x-, 4x- и 5x-рокетджампы.&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Дополнительная информация&lt;/b&gt;&lt;/i&gt;: взрывная волна от гранаты имеет радиус больше одного тайла, поэтому вы в последний момент можете выпустить дополнительную гранату и сохранить ускорение, не дотрагиваясь до земли или препятсвия (на Race-серверах)&lt;br /&gt;
&lt;br /&gt;
Отдельного упоминания стоит трюк под названием &lt;b&gt;рокетфлай&lt;/b&gt; - получение ускорения при взрыве гранаты в воздухе. Зачастую этот трюк помогает сбежать от противника с минимальным уроном для здоровья. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Рокетбуст&lt;/b&gt; - трюк, используемый для получения дополнительного ускорения при беге. Гранатомет наклоняется под определенным углом, зажимается нужная клавиша бега и делается выстрел, в результате чего колобок получает ускорение. Также на некоторых RACE-картах приходится выполнять рокетбуст с хуком, т.е. необходимо прихукнуться к полу, а после выполнять рокетбуст для перемещения в нужную сторону, так как двигаться без последнего колобок не сможет.&lt;br /&gt;
&lt;br /&gt;
Трюк под названием &lt;b&gt;думми драг&lt;/b&gt; предназначен для достижения мест, на которые не можно взобраться обычным путем и выполняется как минимум двумя колобками. Один из колобков прихукивает стену, а другой колобок с помощью хука перемещает первого. Первый (думми) может время от времени нажимать влево/вправо. Так же думмидраг можно использовать для перемещения остальных игроков. Для этого все игроки выравниваются по одной линии, а думми зажимает клавишу влево/вправо и тем самым все игроки оказываются над думми. Поскольку ускорение хука довольно сильное, то думми стабильно может поднять нескольких игроков. Для достижения большей скорости можно бить друг друга молотом.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Мегафлай&lt;/b&gt; используется для быстрого взлета двух игроков. Сперва игроки выравниваются по одной линии ввысь, т.е. так чтобы верхний был прямоком над нижним. Для этого можно просто прижаться к стене и игроки будут автоматически выровнены. Итак, после этого нижний игрок должен бить верхнего (желательно прямо, иначе не получится), а верхний время от времени хукает нижнего и подтаскивает его к себе. После чего операция повторяется до достижения нужно результата. Также верхний колобк может бить нижнего, хотя эффективность его ударов не доказана.&lt;br /&gt;
Известны случаи исполняния мегафлай втроем. Третий игрок просто ставал на последнего и хукал его так же как первого. Средний же игрок мог бить верхнего для ускорения результата, не забывая хукать нижнего.&lt;br /&gt;
Этот трюк довольно забавен на ctf5, особенно если один из выполняющих мегафлай - флагоносец.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;"Медленное падение"&lt;/b&gt; можно использовать после мегафлай для тихого приземление. Все абсолютно аналогично мегафлаю, за исключением отсутствия ударов молотом, т.е. верхний просто хукает нижнего. Естественно, этот трюк немного сложнее, так как неправильноя частота хуканья могут ускорить падение.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Башенка&lt;/b&gt; или &lt;b&gt;броуновское движение колобков&lt;/b&gt; использует непонятный баг связанный с коллизиями игроков, находящихся рядом. Если два игрока станет друг на друга, то верхний будет отклоняться вверх-вниз. Если долго ждать, то в результате происходит непонятный баг и верхний игрок практически мгновенно перемещается ввысь, остонавливаясь только у потолка. А если же потолка нет - как на ctf5 и ctf_space, то колобок взлетает очень высоко и программа-клиент игрока зависает. Чем больше игроков, тем быстрее происходит баг "башенка".&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Мост&lt;/b&gt; используется на DDrace моде, для того, чтобы преодолеть большое расстояние, заполненное фризом. Для исполнения этого трика в фриз отправляется как минимум три колобка максимально близко к друг другу, а сверху на них прыгает лодочник и с помощью хука перемещает последнего в нужном направлении. Выглядит довольно забавно и работает.&lt;br /&gt;
&lt;br /&gt;
Итак, пока это весь список трюков, которые я знаю. Если вы хотите добавить что-то - всегда пожалуйста</content><link href="http://nsinreal.blogspot.com/feeds/2659700359860198874/comments/default" rel="replies" title="Комментарии к сообщению" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/6662027946087430531/2659700359860198874" rel="replies" title="Комментарии: 16" type="text/html"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/2659700359860198874" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/2659700359860198874" rel="self" type="application/atom+xml"/><link href="http://nsinreal.blogspot.com/2010/05/teeworlds.html" rel="alternate" title="Teeworlds → Трюки и баги Teeworlds" type="text/html"/><author><name>nsinreal</name><uri>http://www.blogger.com/profile/13058058195552403712</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6662027946087430531.post-1899873834433482822</id><published>2010-04-30T21:15:00.011+03:00</published><updated>2010-12-06T20:27:36.671+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Teeworlds"/><category scheme="http://www.blogger.com/atom/ns#" term="игра"/><category scheme="http://www.blogger.com/atom/ns#" term="читы"/><title type="text">Teeworlds → Читы в Teeworlds</title><content type="html">&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #666666;"&gt;Давно хотел написать о существующих читах в Teeworlds. И наконец-то решился.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
Нужно сразу оговорить, что под читами я подразумеваю любую надстройку над Teeworlds, которую невозможно получить, просто кликая мышкой в настройках официального клиента. А вот насколько нечестно применение данных читов — судить уже вам. Некоторые из нижеприведенных читов одобрены разработчиками игры, другие — запрещены. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Самоубийство с использованием команды 'kill' в консоли или аналогичного бинда. Некоторые инстагиб-игроки считают это нечестным приемом. Кстати, это документированная функция;&lt;/li&gt;
&lt;li&gt;Бинды. Тоже чит по определению. Некоторые моды имеют специальные команды вроде 'printhp', которые печатают состояние здоровья в командый чат;&lt;/li&gt;
&lt;li&gt;Изменение максимального времени отправки информации о новых командах (стрельба, хождение, хук). Помогает довольно часто на BALL-моде. Дело в том, что когда вы схватите мяч и прижметесь к стенке (направите дуло вниз к полу или же вправо к крайней стене) поведение мяча полностью зависит от того, насколько быстро клиент отвечает на запросы сервера. К примеру, повышение данной величины помогает быстро перевести дуло гранатомета (мяча) в другую сторону.&lt;/li&gt;
&lt;li&gt;Чат-чит. Позволяет писать в будущие сообщения, прямо таки накладывая текст на них. Никакого серьезного урона от применения нет. Вот как это выглядит: &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLDXMOfrgaveRtlL6A_P1SxYe1Es2QgoylKOBzPGk4VkEysyFR2vOoXYST3PBNqoZZiJP69SzbF_IVVoV6O-h9u-Uikcph1OJ0E8qcVUmoGlb_rg891zmfZ4EctXCXS67pqKxtUyft4y1d/s1600/chatcheat.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLDXMOfrgaveRtlL6A_P1SxYe1Es2QgoylKOBzPGk4VkEysyFR2vOoXYST3PBNqoZZiJP69SzbF_IVVoV6O-h9u-Uikcph1OJ0E8qcVUmoGlb_rg891zmfZ4EctXCXS67pqKxtUyft4y1d/s320/chatcheat.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Аимбот. Довольно распространен среди нубов, из-за чего большинство хороших игроков не может играть на публичных серверах. Отличается резкой сменой направления выстрела (довольно часто после выстрела оружие возвращается на место);&lt;/li&gt;
&lt;li&gt;Спинбот. Данный чит делает невозможным определение направления оружия за счет равномерного вращения последнего;&lt;/li&gt;
&lt;li&gt;Бот. Просто бот. Стреляет вместо вас. Ходит вместо вас. Может набивать счет на всяких там Save, RPG, LVL-модах пока вы спите;&lt;/li&gt;
&lt;li&gt;Хукбот. Судя по названию — хукает других игроков. Хорош под дробовик;&lt;/li&gt;
&lt;li&gt;Спидфайр. Позволяет быстро стрелять не кликая постоянно мышкой;&lt;/li&gt;
&lt;li&gt;Автопереключение оружия при отсутствии патронов etc;&lt;/li&gt;
&lt;li&gt;Подсчитывание количества патронов для каждого оружия&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8pxEyr0-n3Nmn8SsngL1EWyUfHScguGwBRnH6Rj4pb4XdOQeZ4r-_IXL9fah1wI4ZRq97mh0-w6LJeKGx0qflFbw6kqv9s-iHqjVADklzwXfgAA58CS0WQW3qckaAH-sm5rbJgHEgedHQ/" /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Отключение графических эффектов (к примеру, от оружия вроде дыма от гранаты);&lt;/li&gt;
&lt;li&gt;Мапхакинг легкий — замена ненужных квадов и тайлов на прозрачное изображение;&lt;/li&gt;
&lt;li&gt;Мапхакинг сложный — отрисовка только отдельных групп, квадов и тайлов. Также есть вариант с отрисовкой игрового слоя как в редакторе. Скрины: &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju5BQrU1dZaqVe8LVO6vlLKYX89e4n-6rx8hRl2uCWpU-WqgXIt0YqK6rS72xFpqJ-QMm4fqY1yRmfXS1ASvctLelXmzTbln2sngRy4wrciWuxmbV3RnhRlVPm7wpQU2tliJYTrPc-MeNz/s720/screenshot-101.jpg"&gt;ctf2&lt;/a&gt;, &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-wFA7syvbzI9o4W6v2GcydV3hEm2WmZ_W2b_mhC9nrbkwT9O6_XE-bmz5hRkW6MQRA09CBNDoSdFN_s681p9-0xF8DtIU7SYGSewgNIyjjAocs3TOGhww-MykUEs9MjRrOVJ5sWQnybqB/s800/screenshot-118.png"&gt;ctf1&lt;/a&gt;, &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsLdUwSGEhnTIGtYxci5Yauc8q1Oej29TaRLNPbsJLnyOkv3M7kjRv80SoIC7IUftvf6bNKhvEIqqLCnE68HRtCQulI3epd73T7Ghy6bQcmOMglMPcBbiLqD6B0dqbSkfAkR4T5GHFGN8z/s720/screenshot-110.png"&gt;ctf_space&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglm5LkF5OWvXUIbWQBcSQSlGjM8nm6xaDBUnTbvxQ20cFSMrKyc_ON2tk0df-J5w3v_kTYcGUqkwz567V8NWTGfLJk7nLFyUvG7iMJB4HaWI2nJtFbNWbfgO9UDbCqJ6lDcqoWnV9aEGO9/s800/screenshot-172.png"&gt;&lt;img src="http://lh4.ggpht.com/_AsInpWosTIg/S9sZ6OLMSSI/AAAAAAAAAkg/vi_VzfUwBU0/thumb.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Зум в игре, увеличенная динамическая камера. Позволяет видеть намного больше...&lt;/li&gt;
&lt;li&gt;Flagdirection — определение позиции флага и отрисовка направляющих&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0UQKAIXEmNzqQ6jzDVc_2XyS3v96puzBPBdnnQ_OCMXUd3tsrLR9WJim77ViEfvy_1dntqfm3_8fu-hgA87-AFaO6mcv6Pjc6LQfvZYNWsElA4ZsfII72OPfmcTOAJcQCSXtsLXJGhz25/" /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Спидхак/антигравитация. Применяется для быстрого разгона с помощью частого использования хука. Также используется для прохождения участков race карт, где сверху и снизу расставлены смертностные блоки/телепорты;&lt;/li&gt;
&lt;li&gt;Антипинг. Показывает реальное положение врага и гранат с учетом пинга. При пинге ниже 80 — мешает. Не запрещен разработчиками (см. &lt;a href="http://www.teeworlds.com/forum/viewtopic.php?id=5873"&gt;форум&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;Динамическая камера по клавише (работает пока нажата клавиша) и различные вариации.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object height="230" width="306"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/UBuEeCRtHB0&amp;hl=ru_RU&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube-nocookie.com/v/UBuEeCRtHB0&amp;hl=ru_RU&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="306" height="230"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link href="http://nsinreal.blogspot.com/feeds/1899873834433482822/comments/default" rel="replies" title="Комментарии к сообщению" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/6662027946087430531/1899873834433482822" rel="replies" title="Комментарии: 4" type="text/html"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/1899873834433482822" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/1899873834433482822" rel="self" type="application/atom+xml"/><link href="http://nsinreal.blogspot.com/2010/04/teeworlds_3388.html" rel="alternate" title="Teeworlds → Читы в Teeworlds" type="text/html"/><author><name>nsinreal</name><uri>http://www.blogger.com/profile/13058058195552403712</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLDXMOfrgaveRtlL6A_P1SxYe1Es2QgoylKOBzPGk4VkEysyFR2vOoXYST3PBNqoZZiJP69SzbF_IVVoV6O-h9u-Uikcph1OJ0E8qcVUmoGlb_rg891zmfZ4EctXCXS67pqKxtUyft4y1d/s72-c/chatcheat.PNG" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6662027946087430531.post-9103262418776603410</id><published>2009-11-03T13:34:00.007+02:00</published><updated>2010-12-06T20:26:07.080+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ajaxplorer"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><category scheme="http://www.blogger.com/atom/ns#" term="информационная безопасность"/><title type="text">Не веб-безопасностью единой или почему не стоит забывать про окружение</title><content type="html">&lt;b&gt;Безопасность&lt;/b&gt;. Нет, неправильно. Нужно так: &lt;b&gt;Веб-безопасность&lt;/b&gt;! Сайт защищен от всех веб-атак. На сайте нет XSS, CSRF, PHP- &amp;amp; SQL-injection. Скрипт один — браузерный файл-менеджер. Никаких дырок в веб-безопасности,  которые помогли бы выполнить какие-то действия на сервере, запустить произвольный php-скрипт или украсть пароль администратора. Все протестировано на *nix-системах. А вот на Windows сломали. Самое обидное, что это даже не баг и не дырка системы, а просто фича, недокументированная возможность.  Просто ввели встроку волшебный набор символов в текстовое поле... Нет, это не страшная особенность Windows, позволяющая удаленно исполнять код.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Началась эта история с того, что я увлекся сканированием сети своего провайдера на наличие расшаренных ресурсов. То попадутся базы 1С, то какой-то веб-сервер или админка модема, то пароли от вконтакте и прочих сайтов. Можно было что-то наскребти и что-то с этим сделать, но это добро просто лежало у меня долгое время, после чего я его удалил. И однажды я заметил веб-сервер на котором лежала куча фильмов. А еще был «домашний» каталог, в котором можно было редактировать и удалять файлы. Я попробовал переместиться на уровень выше: &lt;i&gt;&lt;b&gt;\..&lt;/b&gt;&lt;/i&gt; … Не получилось. И тогда я вспомнил про свои недавние эксперементы с windows и её файловой системой. Ввел определенную комбинацию символов... и попал прямо в корень «сайта». И я по прежнему мог редактировать файлы.&lt;br /&gt;
&lt;br /&gt;
Я быстро переписал ауторизацию под себя — и вуаля, теперь я еще и администратор. Теперь я мог подключить любой каталог на сервере как репозитарий и удобно работать с ним из браузера. Разведка показала, что сервер по совместительству является персональным ПК, пользователь которого работал под администратором. Ну и, естественно, у php не было никаких ограничений на исполнение команд. Захади, дарагой, бери что хочешь! Я быстренько написал текстовой файл с предупреждением о дыре и ушел... Также я написал письмо разработчикам о найденной «дырке». Через несколько месяцев я обнаружил этот сервер и опять смог получить доступ к системе. Ну ладно, речь не об этом.&lt;br /&gt;
&lt;br /&gt;
Тем самым дырявым скриптом оказался довольно известный AjaXplorer. А вот особенность работы Windows с файловой системой интересна. Как все мы знаем, нельзя создать каталоги &lt;i&gt;&lt;b&gt;con&lt;/b&gt;&lt;/i&gt;, &lt;b&gt;&lt;i&gt;com1&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;lpt1&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;nul&lt;/i&gt;&lt;/b&gt; и другие. Но помимо этого «нельзя» создать каталог с одной-двумя точками в конце. Каталог создается, но без точек в названии. А вот из консоли (cmd.exe) можно выполнить команду “&lt;b&gt;&lt;i&gt;mkdir abc..\&lt;/i&gt;&lt;/b&gt;” и такой каталог будет создан. Но без последней точки. Т.&amp;nbsp;е. нужно поставить еще одну лишнюю точку. Пытаемся зайти в такой каталог — невозможно. А теперь создадим каталог ”&lt;b&gt;&lt;i&gt;abc&lt;/i&gt;&lt;/b&gt;”. Заходим в него, создаем файл. После пытаемся зайти в каталог “&lt;b&gt;&lt;i&gt;abc.&lt;/i&gt;&lt;/b&gt;”... и попадаем в каталог &lt;b&gt;&lt;i&gt;abc&lt;/i&gt;&lt;/b&gt;. Забавно, да? А что будет, если создать каталог только из точек? Сказано — сделано. Получили каталог “&lt;b&gt;&lt;i&gt;...&lt;/i&gt;&lt;/b&gt;” (три точки). Попытаемся в него зайти, к примеру, из Total Commander'а... и вылетам в корень диска. А вот на AjaXplorer это подействовало немного по-другому — был переход на уровень выше. &lt;br /&gt;
&lt;br /&gt;
Уязвимость, будучи найденной в версии 2.3.9, работает и &amp;nbsp;в версии 2.5.4, несмотря на отправленное разработчикам письмо.&lt;br /&gt;
&lt;br /&gt;
Позднее я повторил взлом (но уже на своем веб-сервере) и записал видео. Также в видео показан принцип защиты windows-системы без редактирование исходного кода.&lt;br /&gt;
&lt;object height="324" width="400"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/YZ5Jti1VqiU&amp;hl=ru&amp;fs=1&amp;rel=0&amp;hd=1&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube-nocookie.com/v/YZ5Jti1VqiU&amp;hl=ru&amp;fs=1&amp;rel=0&amp;hd=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="324"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Помните&lt;/b&gt;: программист должен всегда ожидать неправильного ввода и неправильной работы софта (компилятора, интерпретатора, веб-сервера, ОС). Задача программиста заключается в том, чтобы его приложение, не смотря ни на что, работало правильно. Лучше лишний раз перестраховаться.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;Внимание!&lt;/b&gt;&lt;/span&gt; &lt;b&gt;Информация, приведенная в этой статье, предназначена лишь для ознакомления и не должна использоваться для действий, нарушающих законодательства любых стран!&lt;/b&gt;</content><link href="http://nsinreal.blogspot.com/feeds/9103262418776603410/comments/default" rel="replies" title="Комментарии к сообщению" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/6662027946087430531/9103262418776603410" rel="replies" title="Комментарии: 1" type="text/html"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/9103262418776603410" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6662027946087430531/posts/default/9103262418776603410" rel="self" type="application/atom+xml"/><link href="http://nsinreal.blogspot.com/2009/11/blog-post.html" rel="alternate" title="Не веб-безопасностью единой или почему не стоит забывать про окружение" type="text/html"/><author><name>nsinreal</name><uri>http://www.blogger.com/profile/13058058195552403712</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry></feed>