zHz00 Untitled

воскресенье, 25 декабря 2016
22:51 Mininim (Advanced Prince of Persia Engine)
oitofelix.github.io/mininim/

Вышел он ещё в феврале (2016), в марте выпустили обновление с некоторыми багфиксами.

Плюс в том, что можно поиграть в оригинального Принца Персии на современных платформах без шаманства с DOSBox и прочим.

И я наконец поиграл.

Что для меня Принц Персии (v1.3)? Это почти детство. Играл я в него в 9-10 классе, это где-то 2004 год. Это было на уроках информатики, после того, как я доделывал задание на урок. Чтобы на втором уровне сделать прыжок с разбега, я звал своего одноклассника, который умел делать это лучше, чем я. Потом, правда, оказалось, что можно было сделать обычный прыжок и зацепиться. Пройти первую половину третьего уровня -- это было очень сложно, а первый враг на восьмом казался непобедимым. Играло полкласса. Большинство -- с читами. Без читов забирался я максимум до четвёртого-пятого.

Потом я догадался, как можно было пройти первый уровень, не бегая за 5 километров за мечом. И это сработало! И идея с тем, что со скелетом на третьем можно поменяться местами и свалить -- тоже сработала!

В общих чертах я помню все уровни (почему-то кроме девятого...), а первые три -- помню очень подробно. Номер уровня для меня имеет нарицательные свойства. То есть, это не третий уровень, это Третий уровень. И я сразу понимаю, что это за уровень.

Что же теперь?

Третий уровень прошёлся вообще без проблем (зато кучу проблем доставил пятый). Первый противник на восьмом оказался очень простым. Чаще я умирал от гильотин и шипов. Джаффар лёг с первого раза. Играл без читов, естественно. Но с сохранениями (в 1.3 они тоже были). В конце осталось 11 минут (из 60). В чём же причина того, что мне стало настолько проще играть?
Во-первых, я стал круче, лол.
Во-вторых, свою роль сыграло то, что я помнил уровни.
И в-третьих в данной модификации есть несколько элементов, которые существенно упрощают игру.

В чём же отличия данной версии от Prince of Persia for DOS 1.3?

1) Меч можно достать в любой момент (не по шифту, а по энтеру). Это делает проще некоторые места, где противник стоит близко к краю экрана, что затрудняет бой с ним, т.к. если просто зайти на экран, сразу умрёшь, не успев достать меч.
2) Противники сами приходят с соседних экранов, если вы рядом. Это делает игру немного другой, хотя не делает её однозначно проще или сложнее.
3) При прыжке вверх на месте Принц не сдвигается в сторону на 1 пиксель. Это делает возможным сбивание одноразовых плиток на потолке без спрыгивания вниз. Это сильно упрощает игру в двух или трёх местах.
4) Сложилось впечатление, что разных глитчей, когда можно зацепиться за плиту, за которую зацепиться по идее нельзя, а также можно попасть под незадевающие тебя шипы, стало больше. Это тоже немного меняет игру без однозначного упрощения/усложнения.
5) Нету Hall of Fame. После титров у меня стартовал заново двенадцатый уровень, причём почему-то первая половина (при этом чекпоинт в середине двенадцатого уровня есть!).
6) Нету чекпоинта в середине третьего уровня. В 2004 году это меня бы очень опечалило.
7) Ясное дело, нету проверки лицензионности, проводящейся путём выпивания поушнов с буквами из мануала.

Короче говоря, штука очень достойная, рекомендую всем, кто хочет без шаманства вспомнить детство или просто узнать, во что играли деды.

P.S. Оказывается, слияние с тенью на двенадцатом уровне даёт дополнительную жизнь. Почему? Это та жизнь, которую тень выпила на пятом!

@темы: Игры

URL
суббота, 24 декабря 2016
22:13 Pixel Dungeon Remix: Королева Пауков, Лич, Некромант, Предметы Хаоса
(развернуть список моих статей по Pixel Dungeon и форкам)

Я не играл в пиксель дужеон ремикс года полтора (с версии 18.4). За это время в ремиксе всё некисло так изменилось. В целом стало чуть-чуть проще (в первую очередь из-за двукратного увеличения ресурсов в первой половине игры -- до Тэнгу) и гораздо интереснее. Ниже я опишу то, что обнаружил. Актуально на версию 25.5 бета.

Сначала смешные картиночки (кликабельно):




Вы видите главного героя?
А он есть.



Стенка на стенку.



Последний ход перед смертью.



А теперь -- барбекю.



Капли росы построились свиньёй.



О пользе кольца уклонения на +6.


Основные нововведения:
1. В дунжеоне есть три новые локации (и прямо сейчас идёт открытый бета-тест четвёртой, про неё пока не пишу).
а) Паучье гнездо начинается на 5 уровне. Ответвление. 5 уровней.
б) "Некрополь" начинается на 7 уровне. Ответвление. 5 уровней.
в) дунжеон продлевается на 5 уровней после Демон Холлз ("палаты демонов"? не помню как в русском перевели). Дальше идёт очень жестокое "Гнездо демонов". +1 магазин, +1 квест.
2. Три новых локации -- три новых босса! Королева пауков в паучьем гнезде, Лич в Некрополе. На 25 уровне вместо Йог-Дзевы тусуется Владыка Теней, а Йог-Дзева переехал на 31-й.
3. Новая комната -- "оружейная". Там много стрел, дротиков и прочего. И бочек. Бочки отдельная тема. По уровню распиханы, можно ограниченно их перемещать. Если кинуть в них чем угодно, взрываются и горят (когда я играю за Эльфа, для этих целей я больше всего люблю использовать Том Мастерства, т.к. он не горит). Можно их использовать тактически.
4. Предметы хаоса -- саморазвиваются и самодеградируют
5. Новый класс -- Некромант.
6. Питомцы. При помощи нескольких механизмов можно получить врага к себе в питомцы. Он будет сражаться за вас. Некромант может генерировать питомцев из ничего.
7. Уровни сложности -- лёгкий, обычный с сохранениями, обычный и эксперт.

(новые советы по новым боссам)

(новые локации)

(предметы Хаоса)

(некромант)

(о питомцах)

(об уровнях сложности)

@темы: NetHack, Статьи

URL
пятница, 23 декабря 2016
23:53 Добровольно-принудительно

Необязательная галочка, которую нельзя сбросить! И это не вижал студио экспресс.

@темы: Программы, Программирование

URL
четверг, 22 декабря 2016
23:51 Он первый начал!
Допустим, кто-нибудь накосячил. Серьёзно. Его вышестоящее руководство (или родители :D) начинают ругать. Что же он может сделать? Оправдываться, например. Или сказать:

-- Больше не повторится.

Это звучит хорошо. Убедительно.

Если это сказано твёрдо, честно и уверенно, руководство может даже принять этот "аргумент". Однако на самом деле смысл этой фразы -- точно такой же, как и детского ответа "я больше не бу-у-уду!". Но разница формулировок -- и разница интонаций -- многое изменяют.

@темы: Восприятие, Мысли

URL
среда, 21 декабря 2016
23:59 Не туда, часть 4
Все хотели посмотреть в микроскоп на одну фигню, но начальник никак не мог установить образец ровно. Все ждали.

Коллега по имени, допустим, Петя, задолбался. Говорит -- Ладно, я попозже зайду... и начал уходить. Уже полкомнаты прошёл!

Я решил над ним приколоться. Кричу ему -- Петя, Петя! Иди сюда скорее! (хотя смотреть было пока не на что)

Я рассчитывал на то, что он под влиянием моей интонации и эмоциональности повернёт обратно. Однако этого не случилось. Он не обратил на мой призыв никакого внимания и ушёл из комнаты окончательно.

У нас в отделе есть ещё один Петя.

Он как услышал, сразу прибежал: "Где, где?"

@темы: Случай из жизни

URL
вторник, 20 декабря 2016
23:58 Untitled [461]
Подумал, что сглаживание и сглаз -- однокоренные.

@темы: Восприятие, Тухлые идеи, Мысли

URL
понедельник, 19 декабря 2016
23:59 Untitled [460]
Коллега сделал схему для подключения к микроконтроллеру. Со светодиодом. Подключаю -- светодиод сгорает.

Несу ему -- говорю -- в твоей схеме горит светодиод. И тут я понимаю, что из моей фразы непонятно, в каком смысле он горит.

Я поясняю: "горит" в смысле "burn", а не "light".


***

С мультиметром творятся удивительные чудеса. Он меряет напряжение в диапазоне от -3 до 3 вольт, а если подать 5 вольт (проверяется другим мультиметром), показывает ноль.

@темы: Случай из жизни, Электроника

URL
воскресенье, 18 декабря 2016
23:59 Кто все эти люди?
В Pixel Dungeon Remix добавили новый свиток -- свиток проклятья. Он проклинает все надетые на игрока вещи, так что тот не может их снять (зачарование, слава богу, с них не слетает).

В связи с этим я стал снимать с себя все вещи, прежде чем читать незнакомый свиток. Но об'ём инвентаря в Pixel Dungeon ограничен 24 предметами. 20 на обычные предметы и 4 -- на надетые. Если предмет снять, он попадает в обычные, а слот для надетого становится пустым.

У меня не было места в инвентаре, куда можно было снять предметы. Поэтому я снял с себя оружие, броню, кольца и выложил их на пол. Так они не пострадают. И прочитал незнакомый свиток.

Это оказался свиток телепортации!

И я оказался на другом конце уровня без брони и оружия...

@темы: NetHack

URL
суббота, 17 декабря 2016
23:30 Ну что, как поплавали?
Видел в метро на эскалаторе мужика в водолазной маске. Ехал вверх.

@темы: Случай из жизни, Общественный транспорт

URL
пятница, 16 декабря 2016
23:58 О лицензиях
Только когда разрабатываешь проприетарный софт, начинаешь понимать, что свободная лицензия типа GPL на самом деле вовсе несвободная. Она как болезнь заражает различный софт, принуждая распространять его вместе с исходниками.

Или не использовать библиотеки, которые под ней распространяются.

По-настоящему свободная лиценизя только одна. Public Domain.

@темы: Программирование, Мысли

URL
четверг, 15 декабря 2016
23:52 Life is Strange (2015)
Вчера я видела оленя...
(С) ГлаДОС из Портал 2


Our reports showed a massive anomaly
in the timespace continuum.
Timelines jumping left and right,
stopping and starting...
(C) Sans из Undertale


Это -- интерактивное кино. Детектив. С возможностью отмотки времени назад. Ничего особенного в этой возможности бы не было, если бы не два дополнения:
1) Положение главной героини в пространстве остаётся неизменным при перемотке,
2) Предметы, которые она добыла, остаются при ней.

Собственно говоря, написанного выше, мне кажется, достаточно, чтобы определить для себя, стоит в это играть или нет. Для меня, как любительницы путешествий во времени и визуальных новелл (а визуальная новелла и интерактивное кино близки как жанры), показания были однозначные.

Игра на самом деле простая как валенок и рельсоподобная. Почти нет ничего скрытого и неочевидного, что можно было бы обнаружить только облазивая каждый угол и пробуя все возможные комбинации действий.

Играю я за девушку со странным именем Максина. Изначально она у меня вызывала неприязнь. Это э... педовка? хипстерша? с ОБВМ и ТКП. На уроке трясущимися руками делает селфи на поляроид. Над ней ржут. Выходит на переменку, надевает наушники и отключается от общества. Социофобия. Но потом мне дают управление (хотя не настолько свободное, как я хотела бы) и дальше я уже сживаюсь с ней. Кроме того, она становится всё круче и круче, что может вызвать только положительное отношение.

"Вы полили цветы"
"У ваших действий будут последствия"

Вот тут я испугалась...

Данная игра вызвала у меня ассоциацию с целым рядом игр. Обычно ассоциации у меня возникают только с парой-тройкой, а тут целая куча: Farenheit, Silent Hill, Master Reboot, The Path, Ib (которую я прошла, но отзыв ещё не написала), Ever17 (!), To the Moon, Max Payne.

Вживание в персонажа вызывало во многих местах лютый восторг, как будто это бы Я спасла кого-то/добилась чего-то, а не главная героиня. Особенно во втором эпизоде, если вы понимаете, о чём я. Первые четыре эпизода были просто шикарными, а вот пятый подкачал. Сначала я думала, что эпизод просто хуже, чем предыдущие, но теперь я думаю, что эпизод тоже очень клёвый, но концовка слита. Обе концовки.

Авторам перед созданием игры следовало ознакомиться с таким жанром, как визуальные новеллы. Тогда бы игра могла получиться гораздо, гораздо круче. И уж что точно следовало им взять от визуальных новелл -- так это возможность проматывать ВСЕ кат-сцены, а не только уже виденные. Или сделать глобальное сохранение просмотренных кат-сцен, чтобы если начать новую игру, можно сразу было проматывать то, что видел в других играх.

А теперь о таком явлении, как фотография. Эта игра хорошо показывает, что надо ловить момент и ракурс, чтобы снять что-нибудь интересненькое, хотя фотографии Макс, в основном, меня не впечатляют. Я не фотограф. Но иногда я всё же вижу какие-то вещи, которые можно снять и будет круто. Но вижу я их очень редко и плохо. А даже если вижу, могу не сфоткать по каким-либо причинам (лень, холодно руки из карманов доставать). И тут, мне кажется, действительно надо ориентироваться на мистера Джефферсона, который сказал -- always take the shot.

(спойлеры)

@темы: Игры

URL
среда, 14 декабря 2016
23:58 Езжай за этой машиной
Я опоздал на автобус. Но за ним шёл другой. Он мне не подходил, но часть маршрута у него совпадала. И, кроме того, он шёл позже, чем должен был идти по расписанию. То есть, опаздывал сам.

Я сел на него. Через 3 остановки он обогнал тот, на который я опоздал. Я вышел и пересел! Очень классное ощущение.

@темы: Общественный транспорт

URL
вторник, 13 декабря 2016
23:51 Untitled [459]
Самый надёжный способ сохранить пароль в тайне -- это забыть его.

@темы: Мысли

URL
понедельник, 12 декабря 2016
23:59 Тупоконечники
Ошибка в документации. Написано, что устройство должно в качестве конца сообщения присылать сигнатуру 0xA5A4A3A2. И особо указано, что менять порядок байт запрещается!

Хорошо, что приведён пример пакета. В пакете указано:
байт 60: 0xA5
байт 61: 0xA4
байт 62: 0xA3
байт 63: 0xA2

Однако и устройство и контроллер используют обратный порядок байт (это известно по описанию некоторых команд). То есть, с обоих точек зрения это число 0xA2A3A4A5. А я думаю, почему это оно не реагирует.

@темы: Программирование

URL
воскресенье, 11 декабря 2016
23:59 Ещё про упаковку
Я написал о проблеме, которая может возникнуть из-за неожиданного выравнивания полей структуры, но не написал, что же с этим делать.

Сначала несколько важных замечаний:
  • Встретил я указанную проблему в компиляторе GCC под ARM.
  • По документации результат #pragma pack распространяется на упаковку полей структуры, описание которой идёт сразу после директивы. То есть, по идее, значение упаковки не должно было переноситься на дальнейшие структуры. Однако оно переносилось.
  • #pragma pack -- микрософтовская штучка и была добавлена в GCC для совместимости. В компиляторах от микрософт она может работать несколько иначе. В GCC есть более мощный аналог -- __attribute__((packed(...)))


Решение такое. Надо просто принудительно при описании каждой структуры перед ней прописывать желаемую упаковку. Однако тут появляется проблема -- если после нашей структуры будут другие структуры, они получат уже новую упаковку, что потенциально попортит жизнь библиотекам, заголовочные файлы которых включены после нашего. Попортят тем же способом, каким кто-то попортил жизнь нам. Однако разработчики предусмотрели на этот случай возможность сохранения и восстановления значения упаковки. Итак, вот что надо делать при описании каждой структуры:

#pragma pack(push)
#pragma pack()
//#pragma pack(N)
struct A
{
//...
};
#pragma pack(pop)


pack(push) в начале сохранит, а pack(pop) в конце восстановит старое значение упаковки (вдруг оно будет кому-то нужно?).

pack() без параметров установит значение упаковки по-умолчанию, которое можно настроить перед началом компиляции (подробнее тут), что позволит гибко настраивать упаковку для различных архитектур. Если же нужна конкретная упаковка для данной структуры, можно написать #pragma pack (N), где вместо N должно стоять число 1, 2 или 4 (компиляторы микрософт для 64-битных систем также поддерживают 8 и 16). Идентификатор, сделанный через #define, вместо N подставить нельзя.

@темы: Программирование

URL
суббота, 10 декабря 2016
22:57 Untitled [458]
Обнаружил, что на множестве магазинов и иных учреждений появились таблички с надписью "2017". Удивительного тут мало, кроме того, что они почти все одинаковые. Красные с узорчиком. И кроме "2017" ничего не написано, типа все и так знают (а в некоторых местах написано). Когда об'явления о дне города были одинаковыми -- это было понятно. А про новый год что, тоже централизованно распространяют?

@темы: Наблюдения

URL
пятница, 09 декабря 2016
23:56 Пилат и Иешуа
Постоянно иду с обеда -- навстречу мне ходит женщина с ребёнком (ведёт его из школы?). В очках. Ребёнку лет 7-8. Женщина всегда идёт уткнувшись носом в землю, а иногда у неё в руках телефон, и тогда она идёт уткнувшись носом в него.

А ребёнок идёт в 10 шагах сзади и немного сбоку. Обычно тоже уткнувшись носом в землю.

А сегодня она вела его за ручку и разговаривала с ним!

@темы: Случай из жизни

URL
четверг, 08 декабря 2016
23:44 Untitled [457]
...у него был чёрный пояс по радиоэлектронной борьбе.

@темы: Викторика, Мысли

URL
среда, 07 декабря 2016
22:37 Untitled [456]
Если на вопрос, почему ты туда-то и туда-то не придёшь, ответ "не хочу" собеседник не принимает или начинает допытываться "почему не хочешь", можно сказать, что у тебя на это время назначен приём у психиатра.

@темы: Лайфхак, Тухлые идеи

URL
вторник, 06 декабря 2016
23:58 Первый -- шаг вперёд, и в рай
Удивительную вещь встретил. Передаю в функцию указатель на экземпляр структуры, а приходит вместо исходных значений -- мусор.

Смотрю, адреса в памяти совпадают, т.к. указатель передался правильно. Смотрю значения в памяти -- не меняются. Так почему же я передаю одни значения, а получаю другие?

Значит, они по-разному интерпретируются! Но структура одна же. Я включил её определение в .h файле в два .c файла -- в главный файл и в файл с определением функции, которую я вызываю.

Я попробовал поменять типы данных с однобайтных на двухбайтные. И оказалось, что теперь половина значений доходит правильно, но располагается в других переменных!

Короче говоря, дело было в выравнивании данных в памяти. В главном файле где-то в начале (или в одном из заголовков) было установлено #pragma pack(2), а во втором файле -- #pragma pack(4). И уже ПОСЛЕ этого был включен мой заголовочный файл и описанием структуры. В итоге главный файл думал, что выравнивать поля надо по 2 байта на переменную, а второй файл, что по четыре! Т.е. структуры имели одинаковое имя, но были несовместимы двоично! Я непосредственно перед описанием структуры в заголовочном файле поставил #pragma pack(4) и всё стало зашибись.

(пример, иллюстрирующий #pragma pack для тех, кто не в курсе)

@темы: Программирование

URL