Для какого жанра игра: Тower defence На каком движке/конструкторе: Game Maker В каком пространстве: 2D Какой вид в игре: Сверху Какие есть похожие игры: Очень много Сроки разработки: с 1 августа по 11 октября Состав имеющейся команды: Сам
Краткое описание:
Вы директор научно-исследовательской деревни, занимающейся спецпроектами оборонной промышленности. Землю, понятное дело, захватили злобные пришельцы. Все военные базы и крупные города разрушены, любое сопротивление подавлено. Ваша деревня расположена в такой глуши, что о событиях в мире никто не знает.
По необъяснимому стечению обстоятельств ваша деревня не уничтожена, и более того, ученые как раз закончили разработку турели нового поколения и даже выпустили один опытный образец. И даже ухитрились не сломать его по дороге на полигон.
Вот тут-то пришельцы вас и заметили. И как оказалось, турель не такая уж и плохая, а детали остающиеся от врага, вдохновляют ваших ученых на новые изобретения.
Особенности
* "Рисованый" интерфейс * 10 различных карт, с разными уровнями сложности * 5 видов башен * Возможность обновить башни до 15 уровня * Дополнительные возможности башен * Разнообразие врагов (наземные, воздушные, босы) * Изменение пути врага в процессе игры
Скриншот:
Некоторые подробности:
Турели:
* Пулевая турель - средний урон, поражает 1 врага, средняя дистанция, малое время перезарядки. С 10 уровня вооружается самонаводящими ракетами большой разрушительной силы.
* Лазерная турель - малый урон, поражает 1 врага, большая дистанция, постоянный урон. С 10 уровня взрывает уничтожаемого врага, нанося урон всем в зоне взрыва.
* Энергетическая турель - большой урон, поражает нескольких врагов, малая дистанция, большое время перезарядки. С 10 уровня начинает активно разрушать броню всех монстров в зоне атаки.
* Магнитная турель - замедляет врага, поражает 1 врага, средняя дистанция, среднее время перезарядки. С 10 уровня начинает замедлять всех врагов в зоне действия.
* Огненная турель - малый урон, поражает 1 врага, средняя дистанция, урон продолжается некоторое время после выхода врага из зоны. С 10 уровня враг некоторое время после смерти продолжает гореть, зажигая остальных.
Враги:
* Путь наземных и воздушных врагов будет отличаться - воздушные игнорируют некоторые препятствия.
* Босы смогут разрушать некоторые препятствия.
* Некоторые враги смогут уничтожать турели.
Карты:
* Мосты и тоннели - прячут и защищают врагов.
* Ямы и трамплины, естественные препятствия - изменяют скорость врага.
Программирование: - Разобрался с жизнями врагов - Сделал полностью рандомный креатор врагов с учетом всех возможных параметров - Закончил со стрельбой пулевой турели. Правда, не очень нравится, что пули самонаводящиеся, возможно, сделаю стрельбу с расчетом будущей позиции врага - Реализовал правильное отображение инвентаря - Разобрался с временем жизни пуль - Разобрался с расстановкой турелей - Дал врагам возможность стрелять - Сделал турели уничтожаемыми - Сделал управление башней (ремонт, апгрейд, уничтожение)
Играбельность: - Рассчитал баланс пулевой башни - Определился с зависимостью стоимости врагов от их характеристик
Проблемы:
- Музыка, соответствующая графическому стилю - Комиксы между уровнями
Новые идеи:
- [сделал] Сделать броню монстрам, с отдельным индикатором типа жизни, гасящую силу удара и разрушающуюся в процессе. - Энергетической башне сделать возможность разрушать броню всех монстров в зоне атаки. - [сделал] Дать монстрам возможность разрушать башни. Ввести такое понятие, как ремонт башни. Сделать возможность за определенную сумму купить авторемонт (чтобы башня постепенно сама восстанавливалась), или придумать еще какую-то башню, которая будет ремонтировать остальные.
В кратце суть проблемы: при расстановке башен мышью они игнорируют столкновения с объектами.
Теперь подробнее. Upor – невидимый объект, которым я маркирую занятые области. Inventar – окно инвентаря. В зависимости от индекса меняется тип башни, которую оно создает. По клику создает объект Osnovanie. Osnovanie – промежуточный объект, который привязан к курсору мыши для расстановки башен. Он проверяет свободные области.
Для проверки я пока написал, чтобы Osnovanie рисовал фиолетовую окружность, когда нет столкновения и красную, когда есть. В итоге он всегда рисует красную. Я даже понял почему: несмотря на то, что проверка столкновения стоит в объекте Osnovanie, проверяется почему-то столкновение объекта Inventar. Т.е. как только я убираю Upor из-под инвентаря – круг становится фиолетовым.
speed = 8; alarm[0] = room_speed*кол-во_секунд действия бонуса;
Но, чтобы сделать механизм универсальным, ты все равно должен продумать, какие бонусы у тебя будут.
Объект бонус можно сделать 1. Отличаться между собой бонусы будут индексом.
1. Скорость 2. Сила 3. Размер .. 9. Невидимость и т.д.
Рисуем все бонусы в 1 анимированый гиф и выводим спрайт бонуса так:
draw_sprite_ext(bonus,index,x,y,1,1,image_angle,c_white,1) // бонус - название спрайта, индекс - номер кадра в спрайте.
Предположим, что параметры этих бонусов заранее не известны, изменяются случайным образом. Тогда нужно их как-то получать из самого бонуса при столкновении.
В итоге код в событии Collision персонажа (а не бонуса!) будет следующим:
switch (other.index) // проверяем переменную индекс другого объекта, участвующего в столкновении { case 1: // скорость old_speed=speed; speed=other.new_speed; alarm[1]=other.time; break; // запоминаем текущую скорость, присваиваем нашему персонажу новую скорость
case 2: // сила old_power=power; power=other.new_power; alarm[2]=other.time; break; // запоминаем текущую силу, присваиваем нашему персонажу новую силу
..
case 9: // невидимость invisibility=true; alarm[9]=other.time; break; // включаем невидимость
}
А в соответствующих Alarm восстанавливаешь значения, бывшие до бонуса
Alarm[1]: speed=old_speed;
Правда, здесь я не продумал действие 2 одинаковых бонусов взятых подряд. Есть несколько вариантов - самый простой и логичной, завести еще флаги по типу: если такой бонус взят, то пока его не брать, а алярме флаг убирать при восстановлении параметра.
Я так понял, что вопрос не в том, как на какое-то время изменить переменную
Скорее всего его интересует универсальных механизм бонусов, о которых ты заранее не знаешь, что он в себе содержит.
Типа ситуации: взял ускорение, когда оно почти закончилось, взял еще одно ускорение - время ускорения продлилось, а потом взял еще и невидимость - ускорение закончилось, а невидимость все еще есть. 2D NoteWar
Если пуля вылетела из башни дальше определенной длины - она уничтожается. Изначально измерял расстояние до ближайшей башни. if (distance_to_object(instance_nearest(x,y,turel)) > dlina_poleta ) instance_destroy()
Но с увеличением мощности башни это уже не срабатывает, т.к. пуля успевает пролететь до другой башни и та становится ближайшей.
При создании пули я сохраняю ID башни, которая ее создала: id_puli=instance_create(x,y,pulia) id_puli.id_tureli=id
Как мне изменить код, чтобы мерять длину до нужной мне башни?
alarm - это таймер. Т.е. он служит, чтобы какое либо действие выполнялось через определенное время.
Подожди... Если я правильно понял, то alarm - это не задержка (ну, типа delay). Т.е. я его инициирую в любой части кода, и через нужное мне время выполнится то, что прописано в самом alarm? Вот же блин... А то я все думаю, чего мне им так пользоваться неудобно 2D NoteWar
1. Он задерживает весь объект или только то событие в котором размещен? 2. Зачем их так много. 3. Можно ли используя аларм сделать такую задержку, чтобы объект не стрелял, но перемещение врага отслеживал. 2D NoteWar
К дочерним обьектам можно обращаться через обьект родитель или же как ко всем другим обьектам через айди. Что конкретно не понятно
1. Не понятно, как создать дочерний объект. Например, у меня есть враг. Ездящий. Как на его основе создать врага летящего? 2. Как башня, которая стреляет только по летающим, будет их отличать? 2D NoteWar
Не, не получится. И с уничтожением я тоже ошибся. Думал использовать position_destroy(x,y), но он проверяет конкретную точку, а мне нужно на дистанции поражения, т.е. все объекты, попадающие в окружность. Не могу продумать, как это организовать.
1. Есть башня, которая стреляет по всему, что попадает в зону ее поражения. 2. Поражать она может, например 5 объектов. 3. При поражении переменная, отвечающая за жизнь врага уменьшается на определенную величину. 4. Шестой объект не поражается. 5. Башня перезаряжается определенное время.
Как сделать, чтобы враг, попавший между 2 такими башнями, получал поражение от каждой из них соответствующее уровню развития башни.
Добавлено (08.08.2011, 23:50) --------------------------------------------- И еще с наследованием не понятно.
Если есть объект, как на его основе создать потомка и как к ним потом обращаться?
Как организовать одновременное уменьшение жизни у определенного количества врагов в зоне достижимости объекта? Как убить всех в определенно радиусе - разобрался, а как уменьшить переменную отвечающую за жизнь у определенного количества врагов не могу придумать. 2D NoteWar