tgoop.com/logofalprog/84
Last Update:
Байка про кранчи и хаки
#лайт
Признаюсь честно, был очень велик соблазн в последнем посте 2018-го подвести какие-то итоги года. Но потом я подумал: да какие могут быть итоги календарного года в геймдеве? Итоги стоит подводить, когда завершён какой-то действительно важный этап или проект, а новый год для разработчика, что для лошади свадьба. Праздники для нас зачастую означают лишь дедлайн тематического обновления, что нередко перерастает в кранчи. Так что запах хвои и мандарин непременно навевает мне и о переработках.
В этом году конец года выдался спокойный, хотя я и планирую поработать немного на каникулах, но вот два года назад бой курантов чуть не застал меня в дебагере. Я был тогда в маленькой инди-команде и мы большой рождественский апдейт, планируемый к 25 декабря, выпустили только 30-го числа, а потому большую часть 31-го занимались мониторингом ошибок и хотфиксами. Мы закончили работать лишь в 22:00 (и я даже успел приехать на торжества), а у остальных ребят в другой таймзоне на часах было и вовсе 23:00. Забавно было потом читать комментарии игроков о том, почему апдейт, который в том числе добавлял шапки Санты, вышел в канун нового года, а не на рождество. Они даже нагуглили, что разработчики из России, а православное рождество отмечается 7 января, на чём и сошлись. Но мысль о том, что мы просто не успели к 25-му декабря, никому в голову даже не пришла.
Впрочем, байка будет не про это. Мысли о кранчах навеяли мне другой случай, это будет история о моём самом злостном хаке за всю карьеру игрового программиста. Я тогда ещё был зелёным студентом и профессионально работал меньше года на полставочки. А меня взяли и отправили сразу с места в С++, портировать одну из наших матч3-игр на первый iPad, который только что представил Стив Джобс в Сан-Франциско. Ну хотя как портировать? По сути заново переписать с Делфи на кресты. А я и то и другое до этого только в универе на лабах-то и видел по большому счёту. Благо хоть не в одиночку на проект бросили, а со старшим товарищем.
Цимес ситуации в том, что iPad анонсировали 27 января, а уже 3 апреля начинались его продажи; и те приложения, что успевали к открытию, получали огромные ништяки в плане фичеринга. И вот мы сидим в последнюю ночь, кранчуем. Уже, вроде, всё сделали, но остаётся один странный баг.
Среди всего прочего, я отвечал за человечков, которые ходят снизу игрового поля и уносят с него строительный материал, который вылетает с поля во время игры. Это была чисто декоративная функция, но добавляющая живости в игру. В конце каждого уровня выпадал большой камень, который тащить человечки могли только втроём. На скрине выше как раз запечатлен этот момент. Так вот, несмотря на то, что при падении этого камня на пол в коде было явно захардкожена цифра 3 для спауна новых работников, иногда почему-то из домика выходило только двое. Они подходили к камню и вечно стояли там без дела, дожидаясь третьего товарища, который почему-то не хотел выходить из дома.
Дело уже к третьему часу ночи, общими усилиями найти баг не можем, но версию нужно отгружать. Что делать? Ну, в общем, я просто беру и пишу костыль, что после спауна 3 человек, начинаю отсчитывать время, и если через 10 секунд камень не начали тащить, то я спауню ещё одного человечка, через 10 секунд ещё одного и так далее, до тех пор, пока камень не сдвинется с места… И это ушло в релиз.
На следующий день старший товарищ нашёл баг в моём коде. Разумеется, я просто по неопытности покараптил память, запихав длинную строчку в маленький массив. Мы исправили косяк в ближайшем апдейте, но то решение навсегда останется со мной, как самый злостный хак в карьере. А какой костыль у вас был самым диким? Поделитесь в комментариях.
BY Log of Alprog
Share with your friend now:
tgoop.com/logofalprog/84