Як пройти тетріс?
Привіт друзі! Кілька місяців тому інтернетом широко поширилась історія про хлопця, який перший в історії зміг пройти тетріс* (мається на увазі конкретний тетріс на приставку NES). Гру, яку фактично неможливо пройти, розробники не закладали такої можливості — блоки просто починають падати з такою швидкістю, що гравці зазвичай не встигають їх розставити і програють.
Але, на щастя, в світі багато допитливих і терплячих людей (ідеальні якості для QA), які вирішили, що якщо грати в гру достатньо довго, то з великою імовірністю вона закрешиться сама, через старий та неоптимізований код. Це й буде метрикою успішного проходження. Головна задача — не програти завчасно.
Люди грали, але на певному рівні швидкість блоків ставала настільки високою, що контроллер не встигав реагувати на натискання кнопок! Для абсолютної більшості це був би кінець. Особисто я забив би.
Але один винахідливий хлопець придумав спосіб пришвидшити введення команд з контроллера — замість натискання на кнопки, він придумав Hypertapping — спеціальні постукування по контроллеру, що той інтерпретує як натискання кнопок. Мене такі історії надихають — придумати робити незвичні дії зі звичними речами, щоб обійти певні програмні чи апаратні обмеження. Бачу ціль, не бачу перешкод.
Через деякий час більшість професійних гравців (професійні гравці в тетріс! Ми живемо у фантастичному світі) стали використовувати такий спосіб гри. Але деяким гравцям навіть отриманої переваги стало замало, і був придуманий ще швидший метод введення — Rolling, що давав змогу, при тренуванні навички, досягати швидкості введення у 20 команд на секунду (дякую Олександру Хотемському за підказку)! Я дивлюсь ігри професіоналів у Starcraft 2, де однією з метрик є APM (actions per minute), і там топові гравці мають цей показник в районі 400, тобто ~6 команд на секунду.
Далі, коли в гру стало можна грати довго, ком’юніті почало дебажити та аналізувати код, щоб зрозуміти, як його можна закрешити (привіт, static analysis та white box testing). І врешті-решт, знайшли, що якщо на певних рівнях набрати певну кількість балів, гра впаде. А коли всі передумови багу і кроки відомі, залишається лише дрібничка — відтворити. Що і було зроблено!
Сподіваюсь, така винахідливість та цілеспрямованість вас змотивує на крутий root cause analysis! Never give up!
P.S. Подивився архів постів у блозі — роки 4 тому я дізнався про таку кібер-спортивну дисципліну як speedrun (швидкісне проходження гри). Як зрозуміло з назви — гравці змагаються один з одним, хто зможе швидше пройти гру. Витрачаючи на це сотні, якщо не тисячі годин! Найбільш видовищна для мене дисципліна спідрану — Glitch speedrun. Тип гри з використанням відомих багів та глюків гри. Гравці витрачають години, досліджуючи ігри і знаходять баги, які пропустили тестери і використовують їх для пришвидшення гри. найтиповіший баг — місця, в яких можна пройти крізь текстури та пропустити частину гри. Виснажлива тестерська робота, що також вимагає розуміння механіки ігор. Є навіть спеціальні техніки, що допомагають шукати подібні баги. Вірю, що вони вже використовуються компаніями-розробниками. Так спорт рухає науку вперед :)
P.P.S. Окрема розвага — уявляти, як розробники консолей та ігор дивляться на гравців, що спідранять та придумують свій спосіб взаємодії з їх іграми
7 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів