Agate Island Nights

Форум для проектов, находящихся на стадии Альфа и Бета. В них ещё не реализована вся задуманная автором функциональность, а значит идёт активная разработка.

Модераторы: Sanja, Максим Кич

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Agate Island Nights

Сообщение Anfeir » 28 окт 2019, 09:12

UPDATE: в разработке, демки ещё нет

Делаю небольшой рогалик, для разнообразия немного поотписываюсь о прогрессе.

Интерфейс
Заточен для мобильника, с тайлами - сейчас это по сути стабы. Аскии может тоже добавлю.
Минимум текста, максимум тыкания мышкой/пальцем, зум.
Перемещения визуально плавные, там где несколько перемещений можно объединить в одно, так и происходит (последовательный показ бывает уместен при взаимной атаке, чтоб монстр не начал двигаться до того, как в него попала стрела).

Строение карты
Локации намеренно небольшие, максимально 24х24. Зато их много, и по ним можно путешествовать по мини-карте.
Причем, путешествие по мини-карте физически происходит внутри локации. Ну и направления путешествия ограничены разведанными путями.
Некоторые локации перма-рандомные. Размер мини-карты - 100х100х5, один уровень поверхность, два вглубь, два вверх. Сейчас большая часть сосредоточена в поверхностном уровне.

Мир
Несколько континентов, начинаем на одном, находим карты на другие. Попутно находим/строим корабль, чтоб путешествовать по воде. (аналогия с оригинальным и русским King's bounty). Последний континент, собственно сам Agate Island - до него я в первых релизах не дойду.
Мир предполагается рандомным с сохранением тематики континентов, но пока "внешний вид" континентов задан хардкорно. Но потом наверно их буду генерить тоже.

Процесс
Эксплорить, мочить монстров. Собирать сокровища, мочить редких монстров за которые дают очки рангов - для роста навыков. Собирать ресурсы в "mines" (шахтах). Из которых потом крафтить итемы в городах. Один из ресурсов - terrain knowledge. например, forest knowledge, mountains knowledge - измеряется в штуках, тратится на поиск скрытых путей (скорей всего автоматом при приближении), получается в библиотеках, например.

Состояние разработки
Пилится не спеша где-то в районе полугода уже. Есть мир с простой генерацией локаций. Собственно, есть план, я бы сказал, оптимистичный, вот такой:
Скрытый текст: ПОКАЗАТЬ
I: Basic features <done 02/10/2019>
II: World generation <in progress> [1.5 months, till mid Nov]
III: Basic activity [1.5 months, till Jan]
IV: Abilities [2 months, till March]
V: Objects [1 month, till Apr]
VI: Extended activity [1 month, till May]
VII: Test and alpha release [1 month, till June]
Написаны спеки - по локациям, абилкам, наполнению, и т.п., которых в принципе придерживаюсь. Недавно "нарисовал" всех монстров (если это можно так назвать). Хотя изначально хотел стабы тайлов сделать - буква в кружочке. Размер исходного кода в данный момент ~700кб, плюс 400кб редактор. (Ммногое реиспользовалось из предыдущих проектов.)

Собственно, первое, на что сам хочу посмотреть - это рабочий POC, чтоб выяснить, нравится ли мне самому в такое играть. Будет через N месяцев.

Скрины:
Скрытый текст: ПОКАЗАТЬ
1.PNG
1.PNG (110.84 КБ) 4863 просмотра
2.PNG
2.PNG (246.92 КБ) 4863 просмотра
3.PNG
3.PNG (124.86 КБ) 4863 просмотра
4.PNG
4.PNG (46.75 КБ) 4863 просмотра
5.PNG
5.PNG (59.57 КБ) 4863 просмотра
Последний раз редактировалось Anfeir 12 ноя 2019, 08:49, всего редактировалось 1 раз.

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 28 окт 2019, 09:17

Графика огонь, конечно. На мобильном ярко смотрится. Наверно, аскии тоже запилю потом.
6.PNG
6.PNG (240.96 КБ) 4862 просмотра

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 933
Зарегистрирован: 27 ноя 2006, 12:16

Re: Agate Island Nights

Сообщение BreakMT » 29 окт 2019, 11:12

Интересно, буду следить :)

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 30 окт 2019, 17:57

Добавил простейшую генерацию для всех областей. Потом можно будет улучшать.
"Заселил" два континента (из шести) монстрами, боссами и некоторым барахлом.
Это порядка 40 областей, некоторые из которых квестовые и сейчас почти пустые.
Скрытый текст: ПОКАЗАТЬ
7.PNG
7.PNG (152.13 КБ) 4804 просмотра
BreakMT писал(а):
29 окт 2019, 11:12
Интересно, буду следить :)
:)

Аватара пользователя
tangar
Сообщения: 551
Зарегистрирован: 05 мар 2015, 17:33
Контактная информация:

Re: Agate Island Nights

Сообщение tangar » 31 окт 2019, 17:44

идея с небольшими локациями мне нравится, в этом есть что-то теплое и ламповое
https://discord.gg/RuMDQHj - русскоязычный рогаликовый discord-чат
youtube.com/StreamGuild — стримы на русском // youtube.com/GameGlaz — стримы на англ. // tangaria.com — MMO-рогалик

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 04 ноя 2019, 07:59

Завершил генерацию мира, её основу. Для начала вполне достаточно. Перешел к III части плана - базовая активность. Тут игровая модель, все основные атрибуты, эффекты и ещё много всего, не считая мелочей вроде инвентаря, поиска путей, fov (пока затенения нет, клюшка вполне устраивает).

Дальше немного тех. деталей.
Интересно, как обычно в рогаликах делают "плавность" отображения шага? Ну например, что монстр следует за героем одновременно с его перемещением. Я пришел к тому что при отыгрыше мира создаётся "анимация" с инфой кто чего и куда, которая проигрывается после реального хода. Здесь одна из сложностей - то, что при одном шаге игрока монстр по соседству теоретически может совершить много действий.
Первая мысль была вставлять паузы в процессинг хода и отображать то, что уже произошло. Но простейшая ситуация уже не вписалась в эту схему: когда при своём ходе монстр делает Wander(); Wander(); - между ними двумя пришлось бы уже что-то засовывать, чтоб разорвать процесс, и так везде за этим следить. Поэтому разбивка на фазы анимации целиком на совести самой анимации. Это всё работает, посмотрим дальше.

При запуске SDL приложения отъедается сразу 30мб оперативки оО. Куда рендереру 10мб на окошко 600х1000? На двойной-тройной бэкбуфер? Старые рефлексы программирования под дос срабатывают и хочется идти оптимизять там где надо и где не надо. Оставил на потом усилием воли .)

Иногда достаёт перфекционизм. В данном случае он нарушается графикой. АСКИИ совершенны, а (мои) тайлы - совсем нет. В плане тайлов это решаемо поддержкой собственно ascii, но вот эффекты всё равно придётся как-то рисовать (кто в кого попал, чем стрелял, сколько дамага получил и какого).

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 04 ноя 2019, 08:16

Атрибуты монстров и игрока.
- 'Level' - только для игрока
- 'Health' - дак
- 'Stamina' - усталость, тратится на навыки
- 'Aiming' - Used for melee and missile aiming, including some spell missiles
- 'Defense' - Used for melee and missile defense, including some spell missiles
- 'Alertness' - Used for avoid area and abilities with kind of sudden effect
- 'SpellFocus' - Used for many spell aim/defense
- 'Vision' -
- 'Hearing' - hearing works location-wide now, distance does not matter
- 'Stealth' -
- 'Armor' - works only for material damage. Can be reduced by Penetration of the impact object (weapon)

Скиллы - только для игрока (можно ещё для некоторых боссов сделать)
- Physique
- Concentration
- Elements
- Arcane
- Willpower

При старте все они 0. Их раскачивать за получаемы очки рангов - лимитированный ресурс. Навыки (их порядка 100) используют два или один из этих скиллов, чтобы был смысл раскачивать их в разных комбинациях. А вот например hps от этих скиллов не зависят.

Пример: 'Fire Bolt' Elements/Willpower. Elements отвечает за мощь заклинания , а willpower за расстояние и количество.
'Teleport' Willpower/Arcane
'regenerate' Physique/Concentration

Раньше я делал атрибуты монстра и игрока одинаковыми. Это весело, но добавляет реальных сложностей при заполнении мира и балансировании. Т.к. глядя на заданные свойства монстра сразу не скажешь, сколько он тебе ввалит, нужно ли его усилить или ослабить. Поэтому сейчас хочу попробовать для NPC их свойства задавать максимально прозрачно. Скажем, дамаг 3-5 электричеством, на расстояние 4, при пробитии возможно наложение эффекта шокирование.

Типы повреждений.
- 'MinorWounds' - ResistPhysical for all types, or Resist Arcane/Fire/Cold/Acid/Elec. Can be cured by resting on rest comfort places - beds, chairs, etc.
- 'CriticalWounds' - same as minor wounds. Rest comfort for curing required is much higher than minor wounds. Usually cured by items or spells.
- 'EssenseWounds' - ResistEssense, or Resist Undeath/Void/Darkness
- 'MindWounds' - ResistMental, or ResistSound/Psionic/Nightmare
- 'Fatigue' -

Все Wounds в итоге уменьшают HPs.
Резисты
Physical
ResistPhysical
ResistArcane
ResistFire
ResistCold
ResistAcid
ResistElec
ResistPoison
ResistLight

Essense
ResistEssense
ResistUndeath
ResistVoid
ResistDarkness

Mind
ResistMental
ResistSound
ResistPsionic
ResistNightmare

Ещё есть специальные типы атаки :
Blindness
Para
Stun
Hold
Confusion
Fatigue
Bleeding
Disease
Silence
Slowness
Fear

Ну и пара десятков эффектов наподобие Adsorbing, Reflecting, SpheresOfInvulnerability и т.п.

Аватара пользователя
Linker
Сообщения: 637
Зарегистрирован: 12 мар 2019, 14:45
Откуда: из прошлого

Re: Agate Island Nights

Сообщение Linker » 04 ноя 2019, 10:04

интересная вещь вырисовывается)
отдельным плюсом подмечу что на андроиде,пока там и выбор не оч большой годных рогаликов и требования к игре все тки поменьше у людей,ибо играют когда своб минутка есть или над время чем то занять.ну кст можно получит хоть какую то отдачу за счет рекламы.если получится вещь годная(самый безопасный способ чтоб не захейтили - просмотр рекламы для увеличения лута после победы на минибоссом например или еще для чего т такого,ну и некот др способы,главное по желанию). но до етого понятно еще далеко.
Здесь одна из сложностей - то, что при одном шаге игрока монстр по соседству теоретически может совершить много действий. - помнится году в 97м играл я в рогалик под назвнием рагнарок(скандинавская тема там была),ну так вот там был параметр скорость и решили довольно просто-баз скорость 100%,но у некот мобов была 200% и сответственно либо 2 действия либо 2 передвижения и так вплоть до 600% если я правльно помню,играть было вполне норм.мож попробовать чета такое?..
а насчет урона мож просто раскрасить его разными цветами- вот и тип урона сразу виден.
ну и плюсую тайлы еще) если чес даж на тел аски не оч радует мягко гря.
вобщем успехов в нелегком деле создания игры)

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 04 ноя 2019, 16:03

Linker писал(а):
04 ноя 2019, 10:04
вобщем успехов в нелегком деле создания игры)
;-)
Про пошаговость - строгое разбиение на ходы вполне норм вариант. Но у меня пока что в свой ход монстр может сделать неограниченное количество действий, да и скорость перемещения возрастает плавно.

Аватара пользователя
Linker
Сообщения: 637
Зарегистрирован: 12 мар 2019, 14:45
Откуда: из прошлого

Re: Agate Island Nights

Сообщение Linker » 04 ноя 2019, 21:39

Anfeir писал(а):
04 ноя 2019, 16:03
...в свой ход монстр может сделать неограниченное количество действий...
звучит страшно)
кст есть еще вариант использовать TU,то бишь условные временные промежутки,это интересней если способностей мног,однако ето гораздо сложней и оч мног работы,особенно когда рассчитываются ходы монстров

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 05 ноя 2019, 07:04

Linker писал(а):
04 ноя 2019, 21:39
Anfeir писал(а):
04 ноя 2019, 16:03
...в свой ход монстр может сделать неограниченное количество действий...
звучит страшно)
кст есть еще вариант использовать TU,то бишь условные временные промежутки,это интересней если способностей мног,однако ето гораздо сложней и оч мног работы,особенно когда рассчитываются ходы монстров
Ну я не заморачивался, взял структуру времени ещё со старого Rayel, там временная ось, и на один средний ход 100 таймюнитов. Там есть спелл разогнаться до скорости стрелы, вот тогда это ощущается . Будущие действия просто заносятся в будущее на временную ось, от 0 до 200 ходов (или более). Например, событие плодоношения яблони незачем проверять каждый ход, его пихаем в будущее. Ну и idle monsters далёкие от игрока тоже. Удалённые локации совсем "морозиться" не будут

Аватара пользователя
thefish
Сообщения: 31
Зарегистрирован: 18 июн 2012, 22:37

Re: Agate Island Nights

Сообщение thefish » 05 ноя 2019, 21:29

Anfeir писал(а):
04 ноя 2019, 16:03
Про пошаговость - строгое разбиение на ходы вполне норм вариант.
По поводу скорости/очередности ходов: предлагаю рассмотреть еще такой вариант, простенько и со вкусом.

Создаем deque со следующими значениями (простите, из старого проекта на питоне):

Код: Выделить всё

from collections import deque

self.phases = deque([3,4,2,7,5,1,6])
Далее, у пишем некий метод обработки хода монстров (включая скажем игрока):

Код: Выделить всё

class Game(object):

    //... какие-то другие штуки

    def process_phase(self):
        for obj in self.level.objects:
            if isinstance(obj, Mon.Player):
                continue
            if isinstance(obj, mob.Mob) and obj.ai is not None and obj.speed >= self.current_turn_speed:
                obj.ai_map.recalc(obj.x, obj.y) #recalc
                obj.ai.take_turn() #do turn for all objects with enough speed

        self.phases.rotate(-1) #shifting deque left
        self.current_turn_speed = self.phases[0]
        self.turns += 1
Как видно у каждого монстра есть метод take_turn - это когда монстр ходит, бьет, поднимает, заклинает итп. Каждое действие - ровно один ход (turn).
Но! Еще у монстра есть параметр speed.
Мы берем список всех монстров (как и в способе все-по-очереди), сраниваем по скоростью текущего хода. Если у текущего хода скорость равна или меньше скорости монстра - монстр ходит, а иначе в этот ход он курит бамбук. Сходили/пропустили всех монстров, сдвигаем deque влево (первый элемент становится последним, остальные сдвигаются влево). То что было головой deque становится скоростью следующего хода.

К чему это приводит? Есть тролль со скоростью 1, он будет ходить 1 раз из 7 - когда содержимое головы deque будет равно 1. Больной гоблин со скоростью 2 будет ходить 2/7 (случай скорости текущей фазы 1 и 2). Летучая мышь со скоростью 6 будет ходить 6/7 (всё кроме 7), это очень часто. Игроку предлагаю поставить 3 или 4 (если potion of swiftness найдет).
Таким образом обычная пошаговая "все за всеми" обработка становится системой где есть разница в скоростях NPC/мобов, с минимальной головной болью =) Что открывает интересные тактические возможности. Полет стрелы по тайлам так конечно не сделать, но подумайте - оно вам точно надо?
Последний раз редактировалось thefish 07 ноя 2019, 08:39, всего редактировалось 1 раз.

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 933
Зарегистрирован: 27 ноя 2006, 12:16

Re: Agate Island Nights

Сообщение BreakMT » 06 ноя 2019, 09:45

Как я понял у автора нет проблем с алгоритмом расчета скорости. Вопрос был именно в визуальном отображении этого действа. Хотя может быть я ошибаюсь :)
К чему это приводит? Есть тролль со скоростью 1, он будет ходить 1 раз из 7 - когда содержимое головы deque будет равно 1. Больной гоблин со скоростью 2 будет ходить 2/7 (случай скорости текущей фазы 1 и 2). Летучая мышь со скоростью 6 будет ходить 6/7 (всё кроме 7), это очень часто. Игроку предлагаю поставить 3 или 4 (если potion of swiftness найдет).
Я тоже использую похожий подход, только у меня нет понятия "скорость хода" (в данном примере 7), а все происходит относительно скорости героя. Во всяком случае мне это казалось логичнее, когда я это дело обдумывал ))

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 06 ноя 2019, 09:50

Стрела по тайлам это просто пример, что работает "из коробки". Выглядит примерно так:
viewtopic.php?f=7&t=379#p7245

По этому алгоритму нормально работали десятки тысяч активных (и полуактивных) объектов. Временные эффекты (stun, para, итд) по тому же принципу работают.

Да, с визуальным отображением поинтересней было ) .

Аватара пользователя
Anfeir
Сообщения: 876
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Agate Island Nights

Сообщение Anfeir » 09 ноя 2019, 13:35

Добавил повреждения, все типы.
Добавил путешествие на корабле.
Сейчас, наверно, буду добавлять "банды": группировки монстров, которых видно на мини-карте. Наверное, пока они будут статическими. По той причине, что всё, что перемещается на мини-карте, перемещается и по локациям. А как сделать красиво перемещение банды монстров, когда мы в локации (и надо это вообще или нет), пока до конца не решил. Наверно, все монстры из банды будут уходить из локации одновременно и приходить в другую локацию тоже одновременно, иначе получаем растянутую между двумя локациями банду, что само по себе неплохо, но может оказаться неважно с тактической точки зрения, при планировании перемещений. Ну либо один за другим монстры пересекают границу, пока не уйдут все (или некий кворум), только потом логически банда перемещается на соседнюю локацию, и так же один за другим монстры "заходят".

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 26 гостей