RU

Открытый мир в текстовой игре

Ajenta Moderator 05.02.2014 15:34 66 comments 34814 views

KOLANICH:


Попробуйте написать игру с открытым миром и на своей шкуре ощутите отсутствие ООП.

А теперь очень любопытно, как вы вообще представляете себе открытый мир в текстовой игре.

Друг. Так, а при чем тут вообще открытый мир?..
Чавось?) Теперь тему нужно запилить под обсуждение специфики QSP? :D
Ладно. Ладно. Просто думаю что на открытость мира количество взаимодействующих сущностей и типизация если и влияет, то слишком косвенно.
“Нормальный” открытый мир тоже больно размытое понятие. Каждый играл в игры определенного рода и воспринимает вид игры с открытым миром по своему. Относительность.

Конечно согласен, не хватает многих фич их высокоуровневых Я.П в qsp. Но не хватает для чего?
Работал я на конструкторе Construct Classic. Долго. Охарактеризовать его могу как постоянное изобретение велосипедов. На DevC++ под самописным круче и пафоснее, но уж больно муторно и рутинно. А под qt лицензия нужна… Иначе не кошерно. Чужие движки редко бывают такими уж творческими, если мсье знает толк в извращениях.

Что на Construct Classic, что на QSP - обе платформы для разработчиков определенного направления.
А именно желающих взять и начать разрабатывать.
Писать свой квест(QSP) или делать свой платформер\tds(Construct). Сходу.
Не слишком круто все, но зато просто. И скорость. Скорость. Я на констракте выиграл конкурс где нужно было за сутки сделать игру. Оказывается далеко не все могут.
Да, на таких движках для многих продвинутых вещей, подчас нужны довольно велосипедные решения. Но если хочется использовать профессиональные решения, используйте профессиональную платформу, а не пытайтесь изменить под себя ту простую, с бейсикоподобным языком, что удалось шустро освоить. Хех.
Если не идти на компромиссы, то, скорее всего, платформу придется пилить самому. Что многие и делают.
Чтобы и язык без заморочек, и архитектура прозрачная, и поддержка профессиональных современных решений. Хоть на java, хоть на C++. Или можно за базис взять другой движок, хоть даже unity3d. Он жует C#, JavaScript и еще чего-то там. И пилить. Пилить что взбредет. Гейм девелоп что океан, где qsp капля.

А лично я, в целом доволен. Спасибо qsp и разработчикам qGen. Бо-о-ольшой привет.
Пилю себе свою RPG с открытым миром, сюжетом и не жалуюсь. Все получается. И изобретать велосипеды больше, чем иногда бывает - не приходится.

Ох. Надеюсь я вам всем не надоел. Разболтался я. Сложные игры… Все гениальное просто. Тетрис.

Теперь тему нужно запилить под обсуждение специфики QSP?

Зачем, у нас тут весь форум посвящён QSP.

Но если хочется использовать профессиональные решения, используйте профессиональную платформу, а не пытайтесь изменить под себя ту простую, с бейсикоподобным языком, что удалось шустро освоить.

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

KOLANICH:

А профессиональную мне Аджента уже подсказала. INSTEAD. По сути это уже почти готовый движок.

Это не движок, а практически язык программирования оопшный. Там шаг вправо, шаг влево и всё - ты в луа по уши. Что мне вот ника кне нравится. Но да мы отвлеклись от темы. Кому надо, те сделают игру и на куспе с открытым миром.

Дорогой мой Сириус. Цветохимия изначально не была задумана как игра с открытым миром и писалась она по сути за две с половиной недели. Сделать что-то вроде скайрима в тексте вполне реально. Особого изврата здесь не надо и будет даже быстрее по человеко-часам, чем у Беседки. Вопрос только в идее и наличии свободного времени. Миров в общем-то дофига, времени, как обычно не хватает. И тем не менее пилим, как могём.

KOLANICH,
и я тоже самое скажу. Кому нехватает объектов, циклов, и прочего программизма, пусть смело берётся за INSTEAD.

QSP предназначен для новичков в программировании. Язык упрощён намеренно. Если человек в программировании не понимает ничего, то ему легче освоить QSP, чем INSTEAD. Это и есть главное различие платформ QSP и INSTEAD.

А расстраиваться “почему здесь нету объектов” и “почему QSP не поддерживает всего что может INSTEAD” не нужно. Это бесперспективно. Жалобы не помогут. Объекты и прочие высокоуровневые конструкции не добавляются не потому, что автор “не хочет развивать QSP”, а потому, что это нарушит концепцию языка, усложнит его. Возможности языка прямо пропорциональны сложности освоения.

Сейчас у QSP есть своя ниша, простой язык для неопытных в программировании авторов. Усложнив язык, мы эту нишу потеряем, и не только получим “конкурента” в лице INSTEAD, но и оставим авторов-непрограммистов без хорошего инструмента разработки.

Так что не стоит жаловаться. В QSP не будет объектов. С этим все должны смириться, и жить дальше. Нет цели затащить всех на QSP - каждая платформа по-своему хороша, и каждому найдётся движок по вкусу.

Ну и бе-бе-бе Вам, Ajenta, я просто ради примера Цветохимию привел, меня и без открытого мира все устраивает.
Кстати,KOLANICH, удачи в начинаниях на счет платформы, куда бы не занесло. Разработка игр это поиск. В этом поиске рождаются удивительные решения, концепции, жанры и многое другое. Удачи.

массивы одномерные

С помощью “костыля” превращаются в многомерные. Впрочем, в 9 из 10 случаев многомерные массивы в игре оказываются не нужны.

нет ассоциативных массивов

Нужен поиск и удаление по текстовому ключу? Вот это как раз добавить несложно. И может быть даже стоит. Потому что для этого нужно будет добавить только один оператор ARRKEY и расширить немного функционал существующего KILLVAR.

Но эта задача и сейчас реализуется существующими средствами, хоть и методом “костылей”.

нет областей видимости

Локальные переменные Байт запланировал на следующую версию. Хотя мне, например, за 12 лет написания QSP-кода они так и не понадобились.

Ещё в следующей версии будут циклы. Но нужно пинать Байта. Пишите ему, зовите его, просите. Покажите, что вы существуете и он вам нужен.

Блаженно мое невежество))
Видимо в силу отсутствия знаний каких-либо “настоящих” языков программирования, ни разу не столкнулся ни с какими-либо существенными проблемами пока пробовал написать свою игру. Иногда конечно хотелось, что была, например функция делающая “вот такое вот”, но основном все это обходилось без особых проблем. некоторым продвинутым функциям (dyneval) я вообще никакого применения отыскать не смог, но при этом все равно сложилось впечатления что возможностей qsp с лихвой хватит для написания любой (в пределах разумного, конечно) преимущественно текстовой игры.
http://clip2net.com/s/6yXZa4 - вот, например случайно сгенерированное подземелье (его каркас, точнее)
http://clip2net.com/s/6yXXd7 - оно же, в графическом варианте
http://clip2net.com/s/6yY4Gx - в игровом режиме, при исследовании его игроком
http://clip2net.com/s/6GGbHr - более сложный вариант случайной генерации (в нем есть некоторые баги - но этот конкретный пример - удачный).
Все при помощи кучи циклов из jump и костыльных многомерных массивов. В более сложном варианте (где есть лестницы) можно спускаться вниз и новые этажи буду генерироваться пока в qsp не закончатся переменные (что произойдет нескоро, так как все данные подземелья занимают всего один массив с динамически сгенерированным названием. Возвращаться на верхние тоже можно, в этом случае они не генерятся а просто вызываются из памяти на текущий экран. Я отказался от продолжения работы над игрой просто из-за немыслимого количества времени, необходимого для ее создания. Возможностей в qsp (как по мне) более чем достаточно.

Aleks Versus Moderator 07.02.2014 06:55 (12 years ago)

Хлопает лапой по пузу медведь:
Всё можно есть, если только хотеть.

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

Aleks Versus Moderator 07.02.2014 08:47 (12 years ago)

К вопросу об открытом мире. Может кто-то смотрел фильм Балабанова “Замок” по одноименному роману Кафки. Сам роман я не читал, и не знаю, насколько фантазия Балабанова отошла от фантазии Кафки, но в фильме показан открытый мир, который тем не менее герой не может покинуть в силу определённых обстоятельств. Логика истории продумана настолько плотно, что по ней хоть сейчас можно сделать игру, в которую можно будет бесконечно играть, пока герой не умрёт от старости, или не смирится с собственной участью. Это будет открытый мир, но “обстоятельства”…
Мне кажется “открытым” мир делает не столько возможность творить всё, что хочешь, сколько иллюзия, что вот прямо сейчас ты можешь уйти в другое место, покинуть историю, в которой ты участвуешь. И вопрос о том, можно ли делать игры с открытым миром на QSP, ложится уже не в область программирования, а в область художественных способностей авторов. Если автор хочет сделать “открытый мир”, ему нужно приложить все усилия, чтобы показать игроку свободу и отсутствие границ, но при этом так умело завуалировать границы, чтобы игрок был не в силах понять, что он “заперт в комнате”, и на самом деле не может из неё выбраться. Иллюзия выбора всю дорогу преследовала землемера, но на самом деле он ничего не мог сделать. Мир существует помимо его воли, но это уже другой вопрос открытости: если мир открыт и герой независим от мира, должен ли мир быть независим от героя?
Опять же приведу произведение, с которым я лично знаком, и которое ещё свежо в памяти. “Звёздный прилив” Дэвида Брина. В романе нет главного героя, есть несколько основных персонажей, есть несколько второстепенных. При этом структура романа настолько продумана, каждое действие героев настолько логично и правдоподобно, что при прочтении возникает чувство будто всё, что происходит, - совершенно естественно и складывается едва ли не случайным образом. И при этом чувствуется безграничность вселенной, независимость мира от героев и героев от мира, и если бы не обстоятельства, герои могли бы быть в совершенно ином месте. А ведь в романе не так уж много “локаций”: десять-пятнадцать от силы.
Свобода исследовать и идти, куда вздумается, в играх всегда иллюзорна, поскольку несмотря на масштабы - мир ограничен. Чтобы интерес к масштабному миру не иссякал, мир должен развиваться и меняться, не то однажды игрок поймёт, что посетил уже все подземелья, убил всех монстров и закончил все квесты, и не по разу.

Aleks Versus Moderator 07.02.2014 08:59 (12 years ago)

Ajenta:

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

Почему же нехорошо? Генерировать свойства вражины в момент, когда игрок на него наталкивается. Разделить уровни названиями: слизнячок, маленький слизень, большой слизень, гигантский слизень, великий слизень и т.п. Не респаунить. Тогда если игрок не смог победить “маленький слизень”, а потом вернулся прокачавшись, его встретит “маленький слизень”, которого он завалит. Вообще, надо комбинировать разные варианты. В “Ризене” уровни монстров строго фиксированные, поэтому игрок не суется до поры до времени, куда не просят.

Aleks Versus:

Ajenta:

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

Почему же нехорошо? Генерировать свойства вражины в момент, когда игрок на него наталкивается. Разделить уровни названиями: слизнячок, маленький слизень, большой слизень, гигантский слизень, великий слизень и т.п. Не респаунить. Тогда если игрок не смог победить “маленький слизень”, а потом вернулся прокачавшись, его встретит “маленький слизень”, которого он завалит. Вообще, надо комбинировать разные варианты. В “Ризене” уровни монстров строго фиксированные, поэтому игрок не суется до поры до времени, куда не просят.

Да, спасибо.

Только вот это “не суётся, куда не надо” это разве не противоречит концепции открытого мира?

По поводу предыдущего поста.

Да, я тоже думаю, что тут уже не сфера программирования, а сфера гейм-дизайна. Но всё же, поскольку я программер, то рассматриваю структуру сразу со всех позиций. Вот, допустим как я пытаюсь сейчас сделать псевдо-живой мир.

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

Конечно, чем больше неписей и чем больше мир, тем больше работы. Тут уже вопрос о самоограничении (ограничении фантазии :) ). Ещё хорошо бы прописать неписям новые появляющиеся в процессе мысли и рассуждения и не забыть тригеры на положение героя.

Всё это сделать можно. Одна непись, при таком раскладе у меня прописывается за один день (5 часов)
Плюс доработки по ходу игры.

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

Если придумаете ещё варианты - сообщайте. :)

Ajenta:

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

Все эти “проблемы” уже решены. Например, в Fallout.

Nex:

Ajenta:

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

Все эти “проблемы” уже решены. Например, в Fallout.

Решение фаллаута мне не нравится. И скайрима тоже.

Log in or Register to post comments.