Содержимое репозитория не является законченынм продуктом и лежит тут скорее для истории. Код оставлен в том состоянии в котором он был в момент, когда я понял, что дальше продолжать нет смысла.
По изначальной схеме отрисовки под всю графику нужно было 14 держателей спрайтов. Память для них выделяется динамически библиотекой sp1. Однако при попытке собрать игру со всем минимально необходимым количевом ресурсов (уровень, спрайты и прочее) памяти хватало только на 12. Как уйти от динамической аллокации или снизить общее потребление памяти я за приемлемое время не разобрался. Что я пробовал:
- Варьировать прагмы компиляции -- 0 успеха
- Перейти на отрисовку плитками -- игра становилась дико нестабильной по непонятным мне причинам
- Делегировать это более умному человеку -- ¯\(ツ)/¯
Что я не пробовал:
- Сжимать и распаковывать данные
- Перейти на 128к
- Перейти с sp1 на другую либу с отрисовкой
- ... и многое другое
Скорее всего ради лулзов я реализую концепт под другую платформу. Можете смело использовать этот хлам в своих целях или не использовать вовсе.
compile.sh
Крыло звездолётов пытается покинуть систему после выполнения опасной миссии. Прыгая от маячка к маячку, сражаясь с перехватчиками и получая помощь из самых неожиданных мест они прорываются к главным вратам из этого недружелюбного места
Мы управляем крылом из нескольких (до 5 звездолётов). В самом начале у нас 3 Т1 корабля (может и другие старты, если придумаем какие). Прыгая вперёд по маячкам мы должны долететь до главных врат, чтобы убраться из этого сектора. На каждом маячке будет одно из:
- Случайное событие (Не факт что успеем сделать)
- Сокровище (Скорее всего успеем сделать)
- Станция
- Вражеское крыло
У кораблей бывают такие характеристики:
- Здоровье
- Атака
- Особая сила (SP)
Корабли бывают следующих типов:
Название корабля | Особая способность | Особое действие | Над каким типом преимущество |
---|---|---|---|
Перехватчик | Отступая наносит вражескому лидеру урон равный своей SP | Поменять любой вражеский корабль с лидером местами | Торпедоносец |
Торпедоносец | Каждый ход наносит лидеру вражеского крыла 1 урона | Нанести выбранному кораблю во вражеском крыле урон = SP | Эсминец |
Эсминец | Снижает входящий урон на SP (применяется после множителя) | Отступить на вторую позицию и принять на себя следующую атаку (именно атаку) | Перехватчик |
Поддержка | Каждый ход восстанавливает всем союзным кораблям 1 здоровье | Восстановить выбранному союзному кораблю SP здоровья | - |
При встрече с противником начинается бой. Перед боем игроку показывается вражеское крыло. В этот момент можно перетасовать корабли в своём крыле. После этого корабли во вражеском крыле и начинается бой.
Первоначальная система
Бой проходит автоматически по следующим правилам:- Каждый раунд первые корабли из каждого крыла обмениваются выстрелами.
- Если у корабля осталось меньше половины корпуса он отступает в конец крыла и на его место приходит следующий корабль
- Иногда по триггерам срабатывают особые способности.
- Это продолжается пока не останется только одно крыло.
Бой проходит по следующим правилам:
- Каждый ход лидер крыла выбирает одно из 3-ёх действие
- Атаковать. Тогда вражескому лидеру будет нанесён урон = атака корабля * множитель урона.
- Отступить. Корабль отступает в конец крыла. Лидером крыла становится второй корабль.
- Применить особую способность. Зависит от типа корабля
- Стартовый базовый множитель урона 1.
- Каждые 10 ходов к базовому множителю урона добавляется 1
- Если у корабля преимущество то к итоговому множителю урона добавляется 1
- Иногда по триггерам срабатывают особые способности
- Сражение идёт пока не останется только 1 крыло.
- В конце сражения базовый множитель урона сбрасывается до 1
Пример
На 1 ходу перехватчик будет атаковать эсминец с множителем 1, а торпедоносец с множителем 2.
На 22 ходу он же будет атаковать эсминец с множителем 3, а торпедоносец с множителем 4.
Компьютер (за исключением боссов) всегда действует так:
- Если у противника хп на 1 удар (без учёта брони), то атакует
- Если у своего корабля меньше половины хп, а у следующего в крыле больше половины, то отступает
- В остальном в половине случаев атакует, а в другой половине способность на самого битого в своём или чужом крыле.
После победы над противником даются кредиты и все корабли в крыле исцеляются на 1/4 своего хп. Кредиты можно тратить в магазине на улучшения и новые корабли. За победу над особо сильными крыльями бонусы.
За каждое перемещение между маячками срабатывает пассивный отхил от кораблей поддержки. В каждом магазине предлагают для покупки 3 случайных бонуса. Каждый бонус в одном магазине можно купить лишь раз. Любой бонус в одном магазине может встретиться любое число раз. Исключение -- лечение. Оно для каждого магазина может выпасть только раз. При перемещении конкретный состав вражеского крыла не виден, но видна его примерная сила.
В конце каждого пути -- босс. Всего будет 2 босса:
- Босс призыватель. В свой ход вместо атаки призывает Т1 - перехватчик + случайный Т1 корабль и отступает в конец. Если места в крыле нет ставит моды по числу недостающих кораблей. Перехватчик должен усложнять стратегию с танчящи тир-2 бомбером
- Босс переманиватель. В начале боя переманивает один, самый сильный (в расчёте по лому) корабль игрока на свою сторону. Сражается в составе 3-ёх кораблей tier-1. Особая способность -- самый раненый корабль крыла игрока атакует сам себя
Основная идея: корабли первого уровня просто воюют и делают что-то ещё. Корабли второго чуть лучше воюют и ОЧЕНЬ ХОРОШО делают что-то ещё. Боссы провереяют крыло игрока на некоторые экстремальные условия.
Тип | Tier-1 | Tier-2 |
---|---|---|
Перехватчик | Наносит высокий урон, быстро сбивает бомберы, становясь лидером царапает противника | Наносит очень высокий урон, мгновенно сбивает бомберы, вылетая фактически делает бесплатную атаку. |
Бомбер | Относительно быстро сбивает эсминцы. Добивает раненых. | Практически мгновенно сбивает эсминцы. Наносит большой урон в дальнем бою |
Эсминец | Выдерживает много урона. Быстро сбивает перехватчики | Практически неуязвим для всего, кроме бомберов. Доминирует над перехватчиками |
Поддержка | Подлечивает из задних рядов. Иногда принимает удар на себя | Исцеляет. Даёт время передохнуть |
Босс | Фича |
---|---|
Призыватель | Тест выносливость, либо приоритезация |
Переманиватель | Не складываем все яйца в одну корзину |
Название корабля | Атака | Здоровье | SP |
---|---|---|---|
Перехватчик - 1 | 3 | 10 | 1 |
Бомбер - 1 | 2 | 9 | 3 |
Эсминец - 1 | 2 | 12 | 1 |
Поддержка - 1 | 1 | 8 | 2 |
. | . | . | . |
Перехватчик - 2 | 6 | 11 | 6 |
Бомбер - 2 | 3 | 13 | 5 |
Эсминец - 2 | 4 | 19 | 2 |
Поддержка - 2 | 1 | 16 | 7 |
. | . | . | . |
Призыватель | 0 | 40 | 0 |
Переманиватель | 8 | 35 | 0 |
Название | Что делает | Стоимость |
---|---|---|
ATK | Мод. + 2 ATK | 3 |
HP | Мод. + 3 ХП | 3 |
SP | Мод. + 1 SP | 3 |
MSL | Мод. Корабль даёт вклад по торпедам | 3 |
SUP | Мод. Корабль даёт вклад по ремонту | 3 |
ARM | Мод. Корбаль получает на 1 урон меньше | 5 |
REB | После подрыва корабль перерождается и теряет этот мод | 7 |
HEAL | Излечить все корабли в крыле | 1 |
UPG | Улучшить корабль с сохранением модов | 10 |
NEW | Добавить Тир-1 корабль в крыло | 5 |
За победу над вражеским крылом мы получаем (уровень столкновения) + 1 кредитов и лут Лут выдаётся за сбитые в процессе боя корабли (и свои и чужие). За сбитый тир-1 корабль 7 очков лома, за тир-2 -- 13. За установленный модуль ещё 3. Т.е. сбитый тир-2 корабль с 1 модулем даст 16 очков лома. За каждые 20 очков лута бросается 1к4 (но не более 3-ёх костей). Результат суммируется, лут берётся из таблицы
Результат | Награда |
---|---|
1 | HEAL |
2 | MOD |
3 | MOD |
4 | HEAL + MOD |
5 | NEW |
6 | MOD |
7 | MOD + MOD |
8 | UPG |
9 | HEAL |
10 | HEAL + MOD + UPG |
11 | HEAL + ARM + UPG |
12 | HEAL + REB + UPG |
Столкновения уровней (0-2), (3-5), (6-8) (9) обозначены разными черепками
Уровень | Состав | Лом |
---|---|---|
0 | 2 T1 | 7 * 2 = 14 |
1 | 2 T1 + 2 M | 7 * 2 + 3 * 2 = 20 |
2 | 3 T1 + 2 M | 7 * 3 + 3 * 2 = 27 |
3 | 2 T2 + 3 M | 13 * 2 + 3 * 3 = 35 |
4 | 1 T2 + 4 T1 | 13 * 1 + 7 * 4 = 41 |
5 | 5 T1 + 4 M | 7 * 5 + 3 * 4 = 47 |
6 | 5 T1 + 7 M | 7 * 5 + 3 * 7 = 56 |
7 | 2 T2 + 3 T1 + 5 M | 13 * 2 + 7 * 3 + 3 * 5 = 62 |
8 | 4 T2 + 5 М | 4 * 13 + 5 * 3 = 67 |
9 | Босс | - |