Хм... Сюжет не сюжет, но эта идея хорошо подходит для конкретно геймплея. Было бы интересно сражаться с Пинки под берсерком или Кибер-Демоном под Мегасферой.
У меня вопрос, а можно средствами gzdoom сделать простую таблицу для торговли как в oolite? Покупку продажу предметов осуществлять клавишами курсора или +-:
camper ACS в помощь. В основном работа с матрицами (точнее с массивами из которых делаются матрицы). Они хранят данные и легко индексируются. Мышь и кнопки так же через ACS (либо ZScript). Был пример инвентаря где-то через курсор. По поводу как это всё сделать, тут надо сидеть и думать. В принципе можно сделать проверки на выбор (ну то есть при нажатии будет внесение изменения в матрицу элементов страницы), а затем активация функции с переменными выбора (внесение изменений в матрицу базы данных). В то же время в фоновом режиме будет работать скрипт на имитацию работы биржи. Понимаю, объяснил сложно, но тут на самом деле творческий процесс, кто как хочет, так и может сделать. Я лишь вариант предложил.
Вы любите порталы? Или быть может параллельные реальности? Заманчиво?
Положа руку на сердце, стОит признать что концепции сочетания разных реальностей в едином пространстве-времени в играх встречаются не часто, а если и попадаются то не шибко зрелищные. Однако случаются и лютейшие вины, например как в весьма недооценённой Kult: Heretic Kingdoms. Тем кто играл, объяснения не требуются, для остальных же проведу ликбез.
Итак, суть в следующем.
I. Весь игровой мир представлен двумя параллельными реальностями независимыми друг от друга и не пересекающимися напрямую. Пространство каждой реальности почти полностью идентично таковому другой реальности, за исключением некоторых элементов: важных или секретных проходов И бестиария.
II. В то же время Игрок обладает способностью (на халяву или за ресурс (аммо\ману\кулдаун абилки)) в любой момент перемещаться из одной реальности в другую, НЕ меняя своего фактического положения во время перехода.
Иными словами, если Игрок стоя перед закрытой дверью "А" переместился в другую реальность, то по завершению перехода он также будет стоять перед дверью "А" но уже в параллельном мире, в котором эта же дверь будет вести в те же локации что и в другом мире... вот только в "зазеркалье" она может оказаться открытой например, но при этом с местной "стражей" поблизости.
III. Игрок видит и взаимодействует только с теми объектами которые присутствуют в текущей реальности. За исключением особых монстров, объекты из другой реальности также ограничены в собственных действиях рамками оной.
Иными словами, находясь в разных реальностях ни монстр ни Игрок не видят и не могут атаковать друг друга.
IV. Для геймплэя из предыдущих пунктов следует что:
1. Весь бестиарий условно делится на 3-4 категории:
Скрытый текст:
а) монстры обитающие в реальности 1 (Р1)
б) монстры обитающие в реальности 2 (Р2)
в) монстры обладающие той же способностью что и Игрок, способные преследовать его между реальностями. Опциональная категория. Какой-нибудь редкий класс монстров типа "кастеров" или "саппортеров" или уникальные монстры если брать концепцию мода с РПГ-элементами.
г) монстры одновременно обитающие в обеих реальностях! Концептуально это должны быть боссы (или какие-нибудь чемпионы, уники если брать концепцию мода с РПГ-элементами), которых нельзя обойти перепрыгнув в другую реальность.
2. Путь игрока может может проходить по одному из 5 сценариев:
Скрытый текст:
А) В обеих реальностях путь свободен
Р1: A-----------------------Б
Р2: A-----------------------Б
++++++++++++++++++++++++++
Б) В Р 1 путь свободен, в Р 2 - монстр
Р1: A-----------------------Б
Р2: A----------М2----------Б
++++++++++++++++++++++++++
В) В Р 2 путь свободен, в Р 1 - монстр
Р1: A----------М1----------Б
Р2: A-----------------------Б
++++++++++++++++++++++++++
Г) В обеих реальностях сидят монстры
Р1: A----------М1----------Б
Р2: A----------М2----------Б
++++++++++++++++++++++++++
Д) Путь преграждён МультиМонстром в обеих реальностях
Р1: A----------ММ----------Б
Р2: A----------ММ----------Б
Е) В одной из реальностей сидит монстр-преследователь (если введена категория "в)").
То же самое касается и объектов не являющихся монстрами: дверей, ключей, мостов, активаторов и предметов инвентаря. Но это уже несколько вторично, ибо упор прежде всего на оригинальность боёвки.
Теперь что касается реализации.
Скрытый текст:
Очевидно что всё должно управляться глобальными скриптами. Каким именно должен быть код перехода и "разграничения" реальностей понятия не имею, но разделение монстров на категории в теории можно осуществить через задание Species, либо, если внутри категории таки планируется разделение на виды и свойство Species будет занято, через выдачу всем монстрам одной категории особого итем-маркера в Spawn стэйте. В таком случае итем будет являться активатором глобальных скриптов относительно монстров.
По вопросу механизма скрытия Игрока и монстров другой реальности от глаз и "рук" друг друга также не имею конкретных соображений. Концептуально могу предположить что при переходе надо либо:
а) реально ремувить (чем-то типа A_FadeOut) монстров (с записью данных о текущем здоровье, цели и месте положения в пространстве каждого!!!), а по возврату быстренько спаунить новых монстров на тех же местах и выдавать им ранее сохранённые значения свойств предшественников, либо же:
б) действительно хитро "прятать" монстров и Игрока друг от друга путём эмуляции глобальной невидимости\неосязаемости через скрипты (или выдачу всем сложных кастоминвентори-итемов), меняющие флаги (SOLID, SHOOTABLE и т. п.) и проперти (текущий таргетфилд, APROP_Invulnerable, APROP_RenderStyle, значение Альфа и т. д.).
В общем суть в том чтобы в адских локациях вместо ключей использовать значение "показателя силы". В самом деле, зачем архидемону использовать ключ, если он может поставить границу, через которую может пройти только архидемон?
И игроку для того чтобы проходить в такие двери придётся убивать более мелких боссов в нужном количестве, собирая их души (попутно открывая другие двери). Совместное значение силы нескольких душ открывает дверь.
Помимо отхода от системы ключей это также подводит дополнительное рациональное обоснование под убийство боссов.
(всё же ситуация, в которой большая шишка лично охраняет дверь к выходу — маловероятна, а вот когда игроку придётся выколупывать босса из его замка, чтобы зохавать душу — это да...)
Не видел, чтобы такая система была где-то реализована, и не только в думе, а вообще )
Особенно это интересно должно работать в хабах, когда например в пределах одной локации ты можешь нафармить 3.0 этого показателя, а дверь к финальному боссу заперта на 16.0
Void Weaver Убрать монстра с карты можно путём проставления ему в renderstyle none, и вызова UnlinkFromWorld (что убирает его из blockmap'а и нескольких других списков). Дополнительно можно deactivate тыкнуть чтобы не самостоятельничал )
Тут сложность в том что для реализма, монстры в обеих мирах должны как-то действовать пока игрок их не видит, а вот это уже достаточно сложно сделать. Но возможно.
А иначе выйдет что ты перешёл из одного мира в другой, а монстры остались там где ты их оставил в последний раз.
Ещё можно не заморачиваться свойствами/флагами и просто сделать собственных акторов которые будут проверять глобальный флаг текущей реальности перед какими-либо действиями, и также переделать CanCollideWith, DamageMobj таким образом чтобы не принимались столкновения и дамаг из другого слоя.
И да, что-то подобное я видел играя в новый Call of Cthulhu ближе к концу. В больнице.
И игроку для того чтобы проходить в такие двери придётся убивать более мелких боссов в нужном количестве, собирая их души (попутно открывая другие двери). Совместное значение силы нескольких душ открывает дверь.
Душеключ? Одобрямс!
Я бы даже добавил то что вскользь кагбэ в шутку уже здесь упоминали - научить сильных мобов открывать запертые на ключ двери, что вкупе с концепцией душеключей периодически может приводить к коллизиям типа: "... внезапно открывается синяя дверь и из неё вышагивает Кибер (спаливший игрока через соседнее окно)".
Убрать монстра с карты можно путём проставления ему в renderstyle none, и вызова UnlinkFromWorld (что убирает его из blockmap'а и нескольких других списков). Дополнительно можно deactivate тыкнуть чтобы не самостоятельничал )
Тут сложность в том что для реализма, монстры в обеих мирах должны как-то действовать пока игрок их не видит, а вот это уже достаточно сложно сделать. Но возможно. А иначе выйдет что ты перешёл из одного мира в другой, а монстры остались там где ты их оставил в последний раз.
Будто что-то плохое... Полагаю это зависит от нюансов реализации всей концепции, - и прежде всего от того насколько игрок контролирует эти переходы, и могут ли оные происходить вопреки воли игрока.
Скриптерам\мапперам концепт "карманного измерения" для босса или оружия в моде под мульт.
Суть в следующем.
Делаем снаряд который при попадании в жертву вызывает следующие скрипты:
а) записывает точные координаты цели и
б) вызывает выход с текущей мапы на особую "карманную" мапу (в идеале каждый раз рандомно генеримую, Облиг-модулем например), индивидуальную для каждого клиента. Офк с монстрами и прочая.
в) (опционально) оставляет на месте "изгнанного" игрока его призрачный образ, как манифестацию "изгнания".
Если хозяин снаряда игрок, то смерть игрока в покет-мапе запишется как фраг хозяину снаряда.
По выходу с покет-мапы или смерти хозяина снаряда, игрок портится обратно на мапу с которой был "изгнан", причём в точку с координатами сохранёнными ранее.
У меня всё.
ЭДИТ:
Развиваем идею далее.
Если допустить реализацию пункта в), то можно углубить концепцию в ключе нового уникального мультиплэйерного режима "Defence Hero".
Суть следующая.
г) призрачный образ из пункта в) делаем не просто визуализацией метки позиции входа\выхода в покет-мапу а вполне уязвимым "атсральным телом" изгнанного игрока (вуду-долл или как там это правильно называется?), которое должны защищать сопартийцы от монстров или команды соперников пока наш "Герой" находится в опасном странствии;
д) цель же изгнанника не просто выбраться с карманного измерения а завалить Босса карты,
е) причём выигрывает та команда, чей "Герой" первым выберется (или выберется определённое ко-во раундов) успешно завалив Гварда мапы.
Такой вот идейный форк.
Сьсьсьте, и снова дядя Войд принёс покушать очередной еретический концепт. Преимущественно моддерский ибо на 95% геймплэйный. Я бы назвал его "Противоестественный\Нечестивый отбор", к сожалению "Зловолюция" официально занято.
Суть в следующем.
1. Делаем монстра который может "прокачиваться" за убийства и\или ко-во полученного и\или нанесённого урона.
1.1 По мере "левелинга" монстр увеличивает значения базовых характеристик (хп, урон, скорость), открывает новые абилки и усложняет поведение.
1.2 Разумеется его выживаемость обеспечивается через:
а) обновление хп пула с каждым левелапом;
б) каннибализм;
в) несколько хилящих абилок (например пассивный реген и\или вампиризм);
г) на поздних левелах можно тупо активировать периодический порционный хил;
д) использование аптечек\брони, см ниже.
2. Этот монстр изначально враждебен как к игроку так и к любым монстрам (или шутэбл акторам вообще).
2.1 Также он может уничтожать или использовать по назначению (ну или переводить на метан "экспу") любые найденные на карте предметы кроме ключей.
2.2 Этот монстр прямо со старта мапы или с первым выстрелом игрока сразу переходит из Spawn стэйта в активный режим "эволюции" (без перерывов на обед и прочих Idle) - начинает охотиться за монстрами, предметами и офк игроком.
2.3 Кстати этому монстру не помешал бы "душеключ" из предложенной выше концепции Коти.
3. В соответствии с дизайном мапы заранее размещаем монстра в самой дальней от игрока точке карты, но при этом не в такой где ближайшими противниками будут только топовые монстры типа боссов, арчей или баронов. Мы же не хотим чтобы няша преждевременно загнулась, ja?
4. Либо же отдать спаун в заботливые руки скриптованного рандома.
5. Всё остальное, включая игрока, по умолчанию остаётся вполне себе ванильным.
Полагаю цимес такого геймплэя очевиден, причём чем крупнее и насыщенее карта, тем сильнее будет падать за единицу времени шанс игрока на выход с карты на своих двоих. Да и психологически это будет довольно интересный опыт - знать что где-то рядом неумолимо зреет писец, и полнеет с каждой минутой...
Что касается технической реализации то полагаю что в идеале всё это лучше писать на скриптах, но заверяю что 90-95% концепта, и, в частности, самого монстра могут быть запросто надекорено.
Отдельным шиком будет напилить по убер-монстру для каждого класса: убер-имп, убер-шотгей, убер-свин, убер-арч...
У меня всё.
Вот кстати грубый образец монстра-сталкера если кому интересно. Без механики левелинга, но всё же. На "PathNode" не обращайте внимание - это кастомный актор из реквеста, мусор. Хотя в то же время и пища для размышлений...
-------------
Бтв, апдэйтнул идею предыдущего поста.
Две локации — райская и адская. Между ними куча порталов. Сами друг на друга похожи, но достаточно отдалённо — декорации должны быть вообще разные, как и незначительные детали вроде переходов между залами.
Обе локации игроку враждебны (т.к. пришедшее из портала в противоположную реальность по умолчанию враг, а игрок скачет туда-сюда).
Тут очень много возможностей для нелинейности, вплоть до того что финальный босс может быть по выбору игрока (в каком мире к нему пришёл — с таким драться и будешь, и сразу конец игры).
Но развернуться и открыть другого финального босса, уже придя к одному, не должно быть возможным (например при помощи одноразовых ключей). Или оставить возможность это сделать, но придётся облазить 100% обеих локаций для этого, чтобы собрать необходимые итемы в достаточном количестве (чуть выше о душеключах, они тут были бы очень удобными).
Альтернативно можно игроку за 100% облазивание дать какую-нибудь мега плюшку типа бфг.
А ещё можно в каждой локации давать какие-то итемы или навыки специфичные строго для неё, при этом возможность получить соответствующий ништяк из другой исчезает.
И, например, сделать детерминировано рандомный шанс не выучить райский навык, если уже выучено очень много адских
Детерминировано — это чтобы сейв/лоадами не баловались )
Например, сделать 8 скиллов по аналогии с оружием. Если у тебя разница между полярностями больше 50%, начинает действовать шанс на конфликт (ошибку в изучении).
т.е. 60% адских и 40% райских уже есть, больше шанс продолжить идти по адским.
Вплоть до того, что можно заменить оружие на скиллы целиком, т.е. сделать какой-нибудь один арбалет/пистолет/ещё какую хрень, а остальное ручками магией. Ну и понятно не просто пулять, а делать ловушки, лечиться и так далее в таком роде.
Так, пример разницы между адской и райской версией скилла: райская просто лечит, а адская вампирит из врага (или нескольких врагов). В итоге в разных ситуациях будут эффективны обе версии, но примерно равны.
Может показаться видоизменённой версией поста от веавера. Но на самом деле это смешение Perfect World, Jedi Knight и ведьмака, в которого я щас играю Сидел в комнате раздумий и озарило.
Две локации — райская и адская. Между ними куча порталов. Сами друг на друга похожи, но достаточно отдалённо — декорации должны быть вообще разные, как и незначительные детали вроде переходов между залами.
Может показаться видоизменённой версией поста от веавера. Но на самом деле это смешение Perfect World, Jedi Knight и ведьмака, в которого я щас играю
Эмм, ну если я тебя таки правильно понял у нас разница лишь в том что в твоей концепции декор лок должен отличаться значительно, в моём же наоборот, - едва.
А вот идея постоянных дихотомий риальне зачётна. Хз как там с локациями но вот элайнмент скиллов\арсенала определённо навевает ассоциации со старым добрым Suffering.
И, например, сделать детерминировано рандомный шанс не выучить райский навык, если уже выучено очень много адских
Детерминировано — это чтобы сейв/лоадами не баловались )
Например, сделать 8 скиллов по аналогии с оружием. Если у тебя разница между полярностями больше 50%, начинает действовать шанс на конфликт (ошибку в изучении).
т.е. 60% адских и 40% райских уже есть, больше шанс продолжить идти по адским.
Кстати всегда было интересно как можно запилить такой рнг с "фиксацией" выбора? Ну с технической стороны.
Это типа "результат" рнг надо "упаковать" в статичный "контейнер" который после загрузок будет всегда возвращать "упакованное" значение полученное ранее от рнг в предыдущую сессию (загрузку)?
у нас разница лишь в том что в твоей концепции декор лок должен отличаться значительно, в моём же наоборот, - едва.
Не только, тут ещё момент что в любой момент ты поменять не можешь, и ты не "переключаешься в другую локацию чтобы пройти через дверь", а делаешь это по желанию/стратегии.
Кстати всегда было интересно как можно запилить такой рнг с "фиксацией" выбора? Ну с технической стороны.
Просто сделать отдельный счётчик рандома. Чтобы было понятно, в псевдорандоме следующее значение конкретно определённым образом основывается на предыдущем, которое называется "seed" — и подставляя его, можно влиять на сохраняемость рандома. Так например из числа 8261574 всегда будет получаться 42. (это не реальный пример, а взятый с потолка).
В частности именно так работают демки от ванильного дума — в начале демо даётся seed, благодаря которому все случайные числа будут соответствовать сгенерированным при записи. А благодаря соответствию движка все случайные числа будут получаться в том же порядке и в тех же местах, в каких это делалось при записи. При этом в самой демке находится только то, что не зависит от движка, т.е. ввод игрока.
(кстати, именно поэтому разработчики (G)ZDoom так не любят, когда моддеры цепляются за локальные настройки, вроде vid_renderer: здум всё ещё использует вышеописанный механизм, и при разнице настроек у разных юзеров демо может сломаться самым непредсказуемым образом; а демо там используют как минимум для проверки багов.)
Если не давать игроку возможность выучить несколько скиллов подряд, то такой способ норм работает. Иначе возможны будут шаманства в стиле "ага, так выучить нельзя, а выучим-ка другой, тем самым подвинем рандом и ещё раз попробуем этот". В общем всё нужно проверять на практике и всегда иметь разумный предел паранойе
Не только, тут ещё момент что в любой момент ты поменять не можешь, и ты не "переключаешься в другую локацию чтобы пройти через дверь", а делаешь это по желанию/стратегии.
Я всего лишь описывал дефолтные условия переходов, и подчёркивал что этот момент не столь принципиален и вообще вторичен по отношению к самой концепции и механике шифтов.
И про "обход" дверей через измерения это был лишь пример практического применения фичи в области маппинга. Ну, то такое.
в псевдорандоме следующее значение конкретно определённым образом основывается на предыдущем, которое называется "seed" — и подставляя его, можно влиять на сохраняемость рандома.
А где хранится(откуда считывается) этот самый seed? Ну если конечно можно кратко и "на пальцах"?
А где хранится(откуда считывается) этот самый seed? Ну если конечно можно кратко и "на пальцах"?
В самом думе по идее при использовании оператора random[...]() или frandom[...]() оно хранится автоматом где-то там в сейве.
Но если вдруг не хранится (кто их знает) то всегда можно руками рандом сделать.
А насчёт реальностей.. блин.
Ну как сказать.
В общем у меня не параллельные реальности. Там должен совпадать ландшафт и самые основные локации. Так, например, если в раю есть гора — в аду на этом месте тоже будет гора. Но, возможно, вулкан.
Также если райский босс может находиться в храме на последнем этаже или чём-то подобном, то адский может быть закопан под землю или просто стоять в чистом поле. Или тоже находиться в храме, но адском.
Цветовая гамма должна быть практически противоположной. Здесь, когда я говорю "ад", я имею в виду что-то в таких декорациях
Скрытый текст:
Также там наличествуют кровавые реки, кости везде лежат и так далее, но мне лень открывать игру и скринить все вкусные места.
В то время как "рай" — солнышко светит, кустики, деревья, и экологически чистые технологии будущего (тм) прогуливаются маршевым шагом.
Типа кибернетически аугментированных зайцев, снимающих -50хп одним удачным ударом.
Я не уверен на 100%, какой должен быть процент совпадений по сравнению с различиями, и как именно это всё организовывать вместе. Но точно уверен, что в рамках одной карты это реализовать не выйдет, что и считаю отсекающим фактором (по твоей идее в рамках одной карты может и получиться). Как минимум придётся реализовывать хаб типа хексена.
Да.
А если серьёзно то ещё кого-нибудь из думеров посещала подобная идея? Мне она давно спать не даёт.
Сразу заверю что если кто за это возьмётся то со своей стороны готов подсобить с бестиарием, который одновременно является и арсеналом. Разумеется только если в основу проекта ляжет именно первая часть, а не еретическая вторая.