Наш опыт участия в 10К Apart, часть вторая: жмем дальше
Как
мы уже писали
, для соревнования 10K Apart, мы сделали настоящий rogue like rpg — «
Mario The Fontanero
».
В комментариях нам дали несколько очень дельных советов, которые позволили нам сэкономить еще некоторое количество драгоценных байт. Добавив к ним пару собственных оптимизаций, мы выгадали достаточно места для того, чтобы добавить в игру несколько новых фич, по прежнему оставаясь в пределах 10 Кбайт:
А теперь, по традиции, поделимся с хабрасообществом описанием оптимизаций, которые помогли нам все это сделать:
Итоговый размер игрушки остался практически прежним — 10231 байт, но играть в нее теперь стало намного веселее.
В комментариях нам дали несколько очень дельных советов, которые позволили нам сэкономить еще некоторое количество драгоценных байт. Добавив к ним пару собственных оптимизаций, мы выгадали достаточно места для того, чтобы добавить в игру несколько новых фич, по прежнему оставаясь в пределах 10 Кбайт:
- Действие «Throw» . Теперь вы можете кидаться едой во врагов. Попадая в монстра, она наносит ему повреждение, но при этом исчезает.
- Алхимия. Теперь можно смешивать еду с питьем в надежде получить что-нибудь новое. Так, «Jelly» + «Milk», например, даст в результате «Book of Healing» (этот рецепт вам очень пригодится на нижних этажах подземелья.)
- В битве с кроликом придётся применить смекалку . Кролик теперь не нападает сам, а мирно пасётся. Но убить его стало гораздо сложнее!
- Добавлен эффект confuse. Иногда главный герой конфузится от выпитого или в результате неудачных экспериментов.
- Новый тайл для отображения починенной трубы . По многочисленным просьбам, мы добавили его, чтобы можно было отличить починенную трубу от сломанной.
А теперь, по традиции, поделимся с хабрасообществом описанием оптимизаций, которые помогли нам все это сделать:
- whoozle переписал упаковщик в png так, чтобы он использовал greyscale png, в котором отсутствует палитра (это дало очень большую экономию, порядка 300 байт).
- Парадоксально, но факт — увеличение ширины png дало значительный эффект! Мы увеличили png до 1024x17 и сэкономили ещё. И здесь опять IE9 подложил нам свинью: он перестал правильно определять размеры png и начал возвращать в скрипт странные размеры: 127x127. Пришлось жестко прописать размеры картинки прямо в загрузчике.
- По совету bolk , мы отказались от pngcrush в пользу связки optipng+pngout, которая действительно даёт большую экономию за счёт своих продвинутых алгоритмов перепаковки.
- Также lahmatiy нам подсказал, что замена «this.» (вместо слова «this») и «.length» на 1-2 буквенные символы (` и @@ соответственно) даст ещё больший выигрыш.
- Ну и, в конце концов, мы просто переписали часть кода.
Итоговый размер игрушки остался практически прежним — 10231 байт, но играть в нее теперь стало намного веселее.
комментарии с хабра ( 70 )
ответить
ответить
ответить
ответить
ответить
ответить
В общем, будем считать, что это приложение не для пользователей опера турбо/опера мобайл и других сжимающих прокси.
ответить
easy=(hp,dmg)
normal=(hp,dmg)*2
hard=(hp,dmg)*3
можно также реализовать факелы как в классической мории
ответить
Если я выбрал какое-либо действие с предметами из инвентаря,
например, кинуться яблоком, то я не могу его отменить?
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
ответить
Got $199263280
Being dead 0 times.
ответить
ответить
ответить
Подскажите тогда адрес багтрекера, у нас есть ещё пара багов в заначке. :D
ответить
ответить
ответить
The content that you requested cannot be found or you do not have permission to view it.
If you believe you have reached this page in error, click the Help link at the top of the page to report the issue and include this ID in your e-mail: b878010d-8df6-4416-ad77-1ba20b052a5f
ответить
ответить
позаменять всякие там return'ы например на тильду (51 раз) — ещё 300 байт js'a
и например имя переменной distance удивляет: )
ответить
ответить
ответить
ответить
Надо еще придумать что-то вроде индикатора хитпоинтов у монстров а то я кролика коцалкоцал на 1 хп, а скока осталось не понятно же
ответить
ответить
А мне вот вспоминается опыт программирования j2me midp1 под очень старые девайсы, сжатие и оптимизации на каждом шагу и тп
ответить
— Цвета пожаты до предела.
— Все картинки сброшены в один файл.
— Если в игре экранный буфер не нужен, а в меню — нужен (крайне редко — тем не менее, нашлась одна такая игруха), при нажатии на кнопку «Меню» отгружаются игровые данные и заводится этот самый буфер.
— Меню предельно простые, неигровая графика большей частью векторная.
Ну разве что грузилась быстро, укладывалась в «законные» пять секунд, на которые не обязательно ставить строку прогресса, достаточно индикатора «Ждите».
ответить
— Если есть тригонометрическая таблица — в файл её!
— Ну и, конечно, персонажи резались на мелкие кусочки, а потом в самописном софте из них собирали целые анимации.
ответить
ответить
ответить
ответить
Хорошо придумали с кроликом-убийцей.
ответить
www.youtube.com/watch?v=XcxKIJTb3Hg
ответить
Да, додумался быстро, подсказки рядом.
ответить
ответить
ответить
ответить
ответить
ответить
ответить
Осталось порядка суток, не думаю мы что успеем. :)
ответить
ответить
+ все переводы строк можно было убрать в результирующем файле
+ массивы можно было записывать строкой, а потом ее разбирать
P.S. так и не понял, как картинки/стили подгружаются
ответить
Только что проверил — замена indexOf на `` дало ровно 1 (один) байт выигрыша. Бесполезняк )
ответить
$('head').append($('<style>....
А картинки подгружаются сами после подключения css.Кстати, мы пробовали укоротить эту строку со стилями за счет автоматической подстановки вендорных префиксов ("-moz", "-webkit", "-o") у свойств border-radius, box-shadow, transform и т.п. Вроде сэкономили 100 байт, но после зипа наоборот стало весить больше, чем до оптимизации.
ответить
ответить
ответить
ответить
habrahabr.ru/blogs/personal/116811/
ответить
ответить
Сам собрался с силами и так же обновил свой «10k World», исправив ошибки с отрисовкой и перевод.
ответить
ответить
ответить
ответить
ответить
ответить