Gaminator 9 :: Into the White (Завершено)
Однажды молодой ученый проводил эксперимент, результаты которого обещали стать чрезвычайно важными для жизни всего человечества. Но, естественно, что-то пошло не так, и вся экспериментальная зона буквально пропала из виду. После некоторых раздумий ученому все же удается найти вещество, способное вернуть лаборатории ее прежний вид. Для этого требуется доставить это вещество в самый «эпицентр» произошедшего. Но так как отправляться самому в эту зону несколько небезопасно ввиду наличия в ней большого количества смертоносных экспериментальных установок, он отправляет туда помощника — существо, способное мгновенно регенерироваться.
Основная идея игрового процесса нагло украдена из всем известной, но так и не выпущенной игры.
Разработано на языке Python с использованием библиотек Pyglet и pymunk (Chipmunk), графического редактора Inkscape и текстового редактора snaked. Увидеть весь ход разработки можно здесь.
На самом деле, до реальной завершенности игре все же далековато. Я успел реализовать только два уровня, знакомящие игрока с основными элементами игры. Еще осталось много недореализованных идей и недоисправленных багов, поэтому игра, я думаю, получит свое развитие и после конкурса.
Для Linux и Mac OS X сборок нет, но пользователи соответствующих ОС могут скачать исходный код, интерпретатор Python 2.7, библиотеки pyglet и pymunk и тоже оценить данную игрушку.
Управление: WASD + мышь, R — перезапуск уровня (иногда нужен, особенно во втором уровне, но советую не злоупотреблять, ибо имеет место один весёлый баг)
- 11 марта 2012, 00:07
- 00
Раз заявляешься в последний момент, сложно было мне описание и картинку в личку бросить? С картинкой разобрался, а в качестве описания беру первое предложение, если чего лучше в личку не пришлёшь.
Забавно.
Черт, я же по капелькам и жидкостям утекаю.
И можно подробностей, как это сделано? Внутренняя кухня, так сказать.
В принципе, исходный код открыт, можешь поизучать. Он, конечно, далеко не идеален, но в целом все понятно.
Если вкратце, то сначала с помощью FBO на текстуру рисуются кляксы, а потом в режиме блендинга glBlendFunc(GL_ZERO, GL_SRC_ALPHA) сверху рисуется маска. Может, есть способ лучше, но это первое что пришло мне в голову (:
Чувак, ты крут.
Что скажешь про Bitbucket, кстати?
Спасибо конечно, но круче б было, если бы я все-таки закончил (:
Ну вообще, выбор был между Bitbucket и Github, но я выбрал первый в основном потому, что мне Mercurial понравился гораздо больше, чем Git. Так в целом интерфейс неплох (особенно нравится продвинутое отображение коммитов), хотя местами чуть менее вылизан, чем гитхабовский. Но работа идет довольно активная, так что есть все предпосылки. Большой плюс в том, что есть бесплатные приватные репозитории. Минус — в некоторой медлительности, но некритичной.
Ты говоришь про два уровня. То есть можно пройти что-то?
Я зашел, поклякал жидкостью (кстати, очень понравилось как это реализовано, и приятен сам процесс создания клякс, без всякого геймплея вообще). И походил персом. Попрыгал по созданным блокам некоторое время и вышел.
В игре есть еще что-то?
Ну там есть довольно большой мир. На уровнях раскиданы триггеры (не знаю, как еще назвать), при выстреле по ним уровни меняются — проходы появляются, всякие колесики...
слишком шутрый гг , но в остольном понравилось +)
Завис на 5 шестеренках на склоне - это баг?
Не-а. Видишь колбочки сверху? Вот надо в определенную попасть, тогда колесиков не будет.
Перезагрузка уровня — R.
Да, уже третий человек, кто отписывается о непонятности этого момента. Видимо, надо было все-таки прямо в игре пояснить о возможности перезапуска, несмотря на то, что это указано в readme.
Блин, чего-то не запускается.
Интересно. Если через консоль запустить, что пишет?
В смысле, через командную строку?
Или по-другому?
Ну да, чтоб видно было Traceback, если он конечно есть.
Я не знаю, что такое Traceback.)
При запуске хоть через консоль, хоть так - открывается батник, что-там пишется, запускается на долю секунду окно игры, потом все само закрывается.
Получить вывод трейсбека на консоль, скорее всего, можно только запуская скрипты через python run.py, который я видел в репозитории.
Так что либо тебе, Ден, придётся качать интерпретатор и все модули, либо pevzi сделает генерацию логов, слава богу, в пайтоне это очень просто.
Не, он наверное имеет в виду cmd, запусти cmd через "выполнить", если у тебя игра не на диске С, напиши диск, потом "cd ", потом имя_файла.exe
А, вы тут про питон вообще разговариваете
logging + перехват stderr решает такие проблемы
Очень понравилось.
Пожалуйста, доведи проект до конца ;)
Обязательно.
Клёвая штука! И всего 1000 строк кода!! Ща буду изучать :)
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 314, in 'calling callback function'
File "/usr/local/lib/python2.7/dist-packages/pymunk/__init__.py", line 521, in cf
return func(self, arbiter, *args, **kwargs)
File "/home/sasha/Source/pevzi-into-the-white-79ab14cf9387/itw/level.py", line 102, in on_ball_land
player = choice(Sounds.splashes).play()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 396, in play
player.queue(self)
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 797, in queue
self._begin_source()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 893, in _begin_source
self._fill_audio()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 724, in _fill_audio
self._audio.write(audio_data)
File "/usr/lib/pymodules/python2.7/pyglet/media/drivers/alsa/__init__.py", line 155, in write
raise ALSAException(asound.snd_strerror(samples_out))
pyglet.media.drivers.alsa.ALSAException: File descriptor in bad state
ALSA lib pcm_pulse.c:734:(pulse_prepare) PulseAudio: Unable to create stream: Too large
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 314, in 'calling callback function'
File "/usr/local/lib/python2.7/dist-packages/pymunk/__init__.py", line 521, in cf
return func(self, arbiter, *args, **kwargs)
File "/home/sasha/Source/pevzi-into-the-white-79ab14cf9387/itw/level.py", line 102, in on_ball_land
player = choice(Sounds.splashes).play()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 396, in play
player.queue(self)
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 797, in queue
self._begin_source()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 893, in _begin_source
self._fill_audio()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 724, in _fill_audio
self._audio.write(audio_data)
File "/usr/lib/pymodules/python2.7/pyglet/media/drivers/alsa/__init__.py", line 155, in write
raise ALSAException(asound.snd_strerror(samples_out))
pyglet.media.drivers.alsa.ALSAException: File descriptor in bad state
ALSA lib pcm_pulse.c:734:(pulse_prepare) PulseAudio: Unable to create stream: Too large
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 314, in 'calling callback function'
File "/usr/local/lib/python2.7/dist-packages/pymunk/__init__.py", line 521, in cf
return func(self, arbiter, *args, **kwargs)
File "/home/sasha/Source/pevzi-into-the-white-79ab14cf9387/itw/level.py", line 102, in on_ball_land
player = choice(Sounds.splashes).play()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 396, in play
player.queue(self)
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 797, in queue
self._begin_source()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 893, in _begin_source
self._fill_audio()
File "/usr/lib/pymodules/python2.7/pyglet/media/__init__.py", line 724, in _fill_audio
self._audio.write(audio_data)
File "/usr/lib/pymodules/python2.7/pyglet/media/drivers/alsa/__init__.py", line 155, in write
raise ALSAException(asound.snd_strerror(samples_out))
pyglet.media.drivers.alsa.ALSAException: File descriptor in bad state
ALSA lib pulse.c:229:(pulse_connect) PulseAudio: Unable to connect: Connection terminated
python: pcm_params.c:2286: snd_pcm_hw_refine: Assertion `pcm && params' failed.
Аварийный останов
Это, конечно, ПУЛЬСОПРОБЛЕМЫ, но всё равно неприятно.
Хм, под убунтой оно у меня вообще виснет почему-то. Под арчем все нормально, под которым собственно и разрабатывалось.
Pulseaudio, скорее всего.
Твоё великое счастье, что ты не знаешь, как оно под виндой.
Не понятно, что делать. Но выглядит, вроде, интересно. Пройти не удалось даже первый уровень, как играть не поняла и не нашла.
Приятное заляпывание ориентировочностью. Вот бы Tag2D такой задумать с разноцветностями функциональными, как усиление прыжка, прилипательность, разгон, что во второй Портал наутаскивали...
Прыжок вот только непрост разгоночный, да при нащупывании траектории нередко кликаешь за окно, залипает отчего передвижение. На слабом ноутбуке не запускалось. Недостаёт счётчиков расхода чернил и крови =]
Быть может, какой стрелковый враг пригодился бы, чьи снаряды можно было бы кляксами отбивать - уж очень баллистика занятная каплеметания.
Второй то уровень прошастал вправо, уже зная про рестартность, ронял кубик рикошетами, возвёртывался влево посль жатия триггера (раз падал туда, невмочи вылезть, начинал заново). Пропасть пятипильную, однако, не понял, как преодолеть.
Спасибо за развернутый комментарий.
Разноцветности есть в планах, но пока сомневаюсь, нужно ли делать функциональность, как в Tag и Portal 2. Хватит и одной спёртой идеи (: точно будут ограниченные чернила и стреляющие враги. Главное — грамотно продумать дизайн уровней, чтоб хорошо раскрыть эти фичи. Тех нескольких дней, которые у меня остались на дизайн во время конкурса, не хватило на нормальные уровни, если честно.
Насчет прыжка я подумаю, что можно сделать, и захват мыши окном тоже будет. На слабом ноутбуке, подозреваю, могло не запуститься из-за отсутствия GL-расширения FBO, например.
Триггер во втором уровне, (который справа) именно рикошетами и нужно активировать. Считай задумка такая (: пропасть слева открывается и заполняется пилами только если активируешь какой-либо из «плохих» триггеров на экране с горкой. Видимо, активировались случайно какими-нибудь отрикошетившими шарами. Надо бы там стенку поставить наверху, чтоб такого не было.
Работа над игрой продолжается, правильно?
Не в данный момент, но вообще да, планирую допилить.
Очень красиво! Зачётные кляксы! :)
Дошел до баночки под навесом, куда не надо падать. Упал, дальше не нашел в себе силы продолжать, т.к. уже был вымотан постоянным переключением окна из-за потери фокуса, перемешанными ярлыками на рабочем столе и фрустрирующей медлительностью и неуправляемостью прыжка. Ещё притормаживает наложение клякс, увы.
Визуально очень эффектная игра, явно имеет огромный потенциал, решить бы технические проблемы, а геймплей тут можно бесконечно наращивать. Даёшь новые версии!
P.S. Отличные переключатели! :)
Спасибо, учту пожелания (:
Кстати! На роль главного героя отлично подошел бы яйцменчик. :)
Подписываюсь. Разве что, меня это всё-таки не так выматывает.
Под дальнейшим тоже подписываюсь.
Мой друг научился в прыжке забираться на недостижимую высоту не подгоняя кубики. И даже вылезал в правой комнате с триггером во втором уровне. Сам это видел, но на себе пока не попробовал. Кстати, это оказался полезный баг, поскольку вытаскивать кубик рикошетами и включать ими триггер в правой комнате ему, как мне показалось, было не так интересно.