Void Loop

небольшая игра для проверки идеи

Ученому перед сном пришла идея как перемещаться между пространством и временем.
Ночью он отправляется в лабораторию чтобы попробовать.
Наконец, настроив пространственно-временную камеру, он открывает двери, входит внутрь и…

платформер-пазл-метроидвания, без слов

3 слота сохранений, но игра всегда сохраняется сама в определенных местах, всего 3 концовки.
На всякий случай оставил возможность сохраняться/загружаться самому кнопками F5/F8, затирая автосейв.
pageup / pagedown — сделать окошко больше / меньше, специально для обладателей огромных мониторов.

Рисовать не люблю, поэтому сначала делал игру на конкурс lowrezjam, не успел, решил доделать. Поэтому картинка 64×64 пикселя.
Не умею делать нормальную музыку — взял из фильма «Пыль», поскольку при прослушивании этого саундтрека и возникла идея игры. На самом деле это просто нарезка звуковой дорожки с фильма, так не удивляйтесь посторонним звукам.
Звук тикающих часов взял отсюда.

страница с windows и web-сборкой

В веб-версии после надписи «Running…» браузер может подвиснуть на 5−10 секунд, потому что долго грузится музыка. Если браузер скажет что JavaScript завис, жмем кнопку «продолжить сценарий».
Тут хотел написать что «сохранения в веб-версии, разумеется, работать не будут», однако почему-то работают (во всяком случае у меня, на старом Firefox).

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

В середине июля увидел инфу о конкурсе lowrez jam.
Решил — а почему не попробовать хотя бы демку сделать, это отличный шанс почти не рисовать, то что я не люблю делать.
Планировал закончить демку к концу августа, но не рассчитал сил, появились новые идеи и поскольку еще не устал от разработки — решил не делать демку, а допилить игру до конца.
На этот раз сперва сделал весь геймплей, а потом приступил к уровням.

И все равно допустил несколько ошибок.
В Tri0 у меня все локации хранились в 3-х двумерных массивах (задний план, передний, объекты). Но объекты при загрузке переносились в обычный список и брались уже оттуда. Связано это было с тем, что была необходимость ходить по трупам, чтобы в одной клетке могло находиться больше одного объекта.

В этот раз я решил оставить объекты в массиве и стокнулся с проблемами:
1) Перемещение объектов пришлось делать созданием второго массива со ссылками на объекты и их копированием обратно после перемещения
2) Возникли проблемы с коллизиями (нельзя было чтобы в одной клетке было 2 объекта, иначе один из них удалялся).
3) В связи с первым пунктом чтобы удалить объект — его надо удалять в обоих массивах.

Еще одна ошибка — разделение на экраны.
Из-за этого пришлось:
1) следить чтобы на за границами экрана не было никаких сюрпризов.
2) делать индикатор, обозначающий что за границей экрана ничего нет (при свободной камере это легко понять по остановке камеры).
3) обновлять объекты только на текущем экране, а противников ставить в середину (чтобы мы не столкнулись с врагами при переходе границы экрана)

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

Понял что в свою игру нельзя играть. Только тестировать то, что только что сделал, на предмет работоспособности. Ну и пройти пару раз, опять же — для поиска ошибок.
А когда именно играешь в свою игру, то уже на 3−4 раз игра перестает нравиться потому что ты в нее уже наигрался и поэтому можно решить что «получилась фигня, надо бросить».

Blank