Current time: 23.03.2024, 16:58 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Эмулятор РПГ Сцен
Author Message
Berserker Offline
Administrators

Posts: 16449
Post: #1

Image: original.png

   Переписал на 75% код эмулятора рпг сцен. Что стало лучше:
  • Отрисовка больше не использует таблицы, а значит нет проблем с жирностью линий и нарушением размеров ячеек.
  • Толщина линий между ячейками работает стабильно и может принимать любые значения, вплоть до 1 или 0 (ранее значение всегда умножалось на 2).
  • Блок подсказок намертво привязан к верхней части экрана, что позволяет видеть его даже при прокрутке. Его размер автоматически подстраивается под размер поля.
  • Почвы теперь так же могут быть картинками.
  • Каждая клетка помимо основной информации (координат, названия почвы, данных объекта) может отображать ниже дополнительную подсказку.
  • Объекты теперь не являются неделимыми сущностями. Выделяются классы объектов и конкретные экземпляры. Упрощается создание объектов в связи с тем, что не нужно указывать много параметров.
  • Автоматическое присвоение имён с нумерацией при создании объектов без указания имени.
  • Многие функции теперь позволяют опускать (брать по умолчанию) большинство аргументов.
  • Поддерживается технология работы с ячейками, используя мышку. В частности, это позволит встроить возможности редактора прямо в проигрыватель: ставить и удалять объекты, почвы, двигать объекты, атаковать и т.д.
  • Как и ранее, код пользовательского скрипта выполняется на протой виртуальной машине, реализующей обработку асинхронных функций как синхронных. Это позволяет использовать такие команды как Ждать, Анимация, Пауза.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
20.07.2010 00:47
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #2

Интересно, почему это в качестве примера всегда берут меня? ))

Берс, а что это вообще такое? Готовый скрипт, позволяющий игроку просмотреть ход битвы - или же просто оболочка, в которую мастер должен прописывать код скрипта? Или что-то третье?


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
20.07.2010 14:43
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #3

Quote:Интересно, почему это в качестве примера всегда берут меня? ))
Маленькая мстя 148

Quote:Берс, а что это вообще такое? Готовый скрипт, позволяющий игроку просмотреть ход битвы - или же просто оболочка, в которую мастер должен прописывать код скрипта? Или что-то третье?
Это разрабатываемый редактор и проигрыватель сцен в одном флаконе. Фактически, проигрыватель исполняет скрипт. А редактор потому, что добавлять код скрипта можно будет при помощи мыши и нижних диалогов. Ты вставляешь в форму код скрипта, жмёшь на кнопку и наблюдаешь за событиями.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
20.07.2010 17:41
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #4

Image: original.png

Заодно наглядная демонстрация алгоритма работы функции MagicFill - заливки однородных областей.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
22.07.2010 03:29
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #5

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

Архив необходимо распаковать в пустую папку, после чего запускать ARpgPlayer.html. В архиве также есть два примера скрипта.

Краткий справочник для новичков.
Скрипт делится на строки, каждая из которых обрабатывается отдельно. Команды в рамках одной строки отделяются друг от символом ";". "// текст" - комментарий до конца строки.
В рамках одной строки может быть произвольный яваскрипт, но для простых скриптов он не нужен. Простые скрипты состоят из вызовов команд (функций). Вот эти команды кратко и рассмотрим. Прошу обратить внимание, что если аргументы заключены в {} - то они не обязательные. Если их опустить, будут взяты значения по умолчанию. Иногда часть аргументов нужно передаватьв массиве. Такие аргументы заключаются в [].
Пример: Функция(ОбычныйАргумент, [АргументМассива1, АргументМассива2]).
Строки и любые названия в качестве аргументов функции должны быть заключены в двойные или ординарные кавычки.

// [DESC] Создаёт новое поле боя, очищая старое
function CreateBattlefield (Width, Height, CellW, CellH, BarW, BarH, LineW)
Ширина и высота поля в клетках, ширина и высота клетки в пикселях, ширина и высота полосок (жизни, маны и энергии), толщина линий сетки.

// [DESC] Осуществляет целочисленное деление одного числа на другое
function DIV (Value, By)

// [DESC] Снимает клеточное выделение
function Unselect ()

// [DESC] Выделяет указанную клетку
function Select (X, Y)

// [DESC] Ожидание (1000 = секунда)
function Sleep (Time)

// [DESC] Устанавливает новую особую подсказку для ячейки
function SetCellHint (X, Y, NewHint)

// [DESC] Функция регистрации нового типа почвы
function RegisterTerrain (Name, {Hint, Col, Img})
Кодовое имя почвы, подсказка, цвет, адрес картинки.

// [DESC] Устанавливает новую почву для клетки
function SetCellTerrain (X, Y, Name)

// [DESC] Заполняет указанный прямоугольник поля боя указанной почвой
function FillTerrain (X1, Y1, X2, Y2, Name)
Левый верхний и правый нижний углы прямоугольника, кодовое имя почвы.

// [DESC] Регистрирует новый класс объектов
function RegisterObjClass (Name, Title, {Img, TitleCol, TitleBack, FontSize, MaxHealth, MaxMana, MaxStamina})
Кодовое имя класса, отображаемое имя членов класса по умолчанию, адрес картинки, цвет и фон надписи имени объекта, размер шрифта надписи ('75%', например), максимальные значения для здоровья, маны, энергии или -1 там, где этого поля у объекта нет.

// [DESC] Осуществляет перерисовку ячейки
function RedrawCell (X, Y)
Эта функция нужна только если вы яваскриптом меняете внутренние структуры ячеек, то есть новичкам не нужна.

// [DESC] Создаёт новый объект в указанной клетке
function CreateObject (X, Y, ClassName, {Title, Health, Mana, Stamina})
Координаты, имя класса, отображаемое имя (например, в блоке подсказки), текущие значения параметров жизни, маны и энергии.

// [DESC] Перемещает объект в другую клетку, затираяя её прежнего хозяина
function MoveObject (SrcX, SrcY, DstX, DstY)

// [DESC] Заполняет указанный прямоугольник поля боя объектами
function FillObject (X1, Y1, X2, Y2, [Args])
Args такие же, как и у CreateObject

// [DESC] Заполняет клетку и все премыкающие к ней такого же типа почвы новой почвой
function MagicFillTerrain (X, Y, NewTerr)
Координаты и название почвы, которой нужно заполнить область.

// [DESC] Заполняет клетку и все премыкающие к ней с такого же типа почвой без объектов объектом
function MagicFillObject (X, Y, [Params])
Params - такие же, как и у CreateObject

// [DESC] Отображает особое сообщение в блоке подсказок в течение некоторого промежутка времени
function Msg (Mes, Time)

// [DESC] Отображает особое сообщение в блоке подсказок в течение некоторого промежутка времени от указанного объекта
function Say (X, Y, Mes, Time)

// [DESC] Ждёт, пока экран не будет полностью отрисован
function Wait ()

Продвинутые фичи управления скриптом. ~ИмяМетки объявляет метку. Jmp(LabelName) - переходит к указанной метке. Call(LabelName) - вызывает метку как подпрограмму. Ret() - возврат из подпрограммы.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
23.07.2010 20:24
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #6

// [DESC] Устанавливает прозрачность для ячейки 0..1
function SetCellOpacity (X, Y, NewOpacity)

// [DESC] Возвращает прозрачность ячейки
function GetCellOpacity (X, Y)

Изменена CreateObject. Теперь вместо Title можно указать массив из короткого и полного имени. Короткое отображается на карте, полное - в подсказке. ['ShortName', 'FullName']


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
19.08.2010 23:16
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #7

В общем, недавно я начал писать вот такую программу. Пишу её для Аредиты - но уверен, что она будет полезна и авторам других ФРПГ. Это некий "редактор битв", позволяющий создавать поля битв и выводить логи раундов. "Выбор действий" и "выдача логов" пока не готовы, а вот "создание полей битв" сделано практически полностью - в чём и можно убедиться.

Как работает программа? Клик и удерживание обычной кнопкой мыши по полю боя активирует "прямоугольник выделения", с помощью которого на поле наносятся ландшафты - примерно как в редакторе карт для Героев. Выбор ландшафта производится по клику обычной кнопкой на одной из верхних картинок - после этого она обведётся чёрным цветом. Однако, вышеописанные операции можно выполнять и правой кнопкой мыши - причём ландшафт будет рисоваться уже другой, то бишь соответствующий правой кнопке. А картинка, по которой кликнули правой кнопкой мыши, выделяется уже белым цветом.

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

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


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
13.04.2011 11:32
Find all posts by this user Quote this message in a reply
FBX Offline

Posts: 2235
Post: #8

Скачал, глянул.

1) У меня программа не влезла в экран (высота экрана 800). Хотелось бы подстраиваемый размер окна, вплоть до разрешения 640х480 (при условии сжатого донельзя поля боя).
2) Текущая концепция поля боя - неочень. Хотелось бы бесконечное авторасширяемое поле, прокручиваемое, динамически рисуемое (сейчас там загрузка статической сетки из файла, насколько я понял).
3) Основные кнопки управления (левая и правая мыши) заняты под рисование ландшафта, но во время боя ландшафт редко меняется, а вот перемещать объекты придется часто. Я бы сделал так: каждая кнопка мыши может управлять ландшафтом ИЛИ объектами, как решит пользователь.
4) Насчет использования программы для расчета битв, можно было бы сделать интерфейс взаимодействия этой программы с программой-процессором, примерно следующим образом:
Объекты на карту загружает программа-процессор, типы доступных объектов - тоже. Не знаю как быть с графикой объектов. Также процессор будет обновлять информацию в редакторе в случае изменений. Реализовать взаимосвязь, позволяющую из редактора изменять координаты объектов, вызывать действия, требующие указания координат/цели, копировать объекты.

Это позволило бы использовать один редактор карт для разных процессоров.
13.04.2011 19:52
Find all posts by this user Quote this message in a reply
nosferatu Offline

Posts: 716
Post: #9

1) Солидарен с 1 и 3 пунктом FBX-а
2) Хотелось бы больше обЪектов (добавить всякие домики, стены и т.п.), а также больше ландшафтов (хотя бы добавить пропасть, то бишь просто черный квадрат)
3) Сделать один шарик и дать возможность изменять не только цвет текста на нем, но и самого шарика.
4) Возможность сохранять созданные карты
5) В идеале предлагаю написать универсальную прогу, в которой будет:

1. база основных переменных (собственно основные параметры, которые пользователь пишет сам: уровень, здоровье, сила, ловкость, навыки и т.д.)
2. неизменяемая база простых функций (сложение, вычитание, умножение, синус, косинус, присвоение, вероятность и т.д.)
3. база созданных профилей (пользователь создает профиль, ему открываются все параметры, которые он прописал в базе основных переменых, и он проставляет им числовые значения. Это так сказать болванки монстров и героев)
4. база временных профилей (профили, которыми обладают объекты и которые изменяются с помощью формул)
5. база подпрофилей (собственно тоже самое, что и профиль, только для способностей, и такие подпрофили можно присваивать основным профилям, тогда "способностью" будут обладать все существа с этим основным профилем, или подпрофиль можно присвоить временным профилям, тогда "способностью" будет обладать только какой-то объект, которому мы её прописали)
6. база формул (пользователь создает формулу, оперируя всем тем, что есть в базе простых функций)
7. действие вида "субъект" => формула => "объект"(обьектов может быть несколько)
Простой пример:
Пользователь создает в первой базе две переменные: "здоровье" и "урон"
Создает профиль "1"(здоровье=10, урон=2) и профиль "2"(здоровье=15, урон=1)
Создает формулу "атака"
["здоровье" обьекта присвоить ("здоровье" "объекта" - "урон" "субъекта")]
Создает карту
Ставит на неё два объекта и присваивает первому объекту параметры профиля "1"(объект сохраняется во "временных профилях"), а второму - параметры профиля "2"(обьект сохраяется во "временных профилях")
Потом нажимает на кнопочку "действие", выбирает "субъектом" первый объект,открывается список формул, из списка написанных формул выбирает формулу "атака" и выбирает второй объект "объектом" формулы.
результат: в временном профиле второго объекта, в параметр "здоровье" заносится новое значение.(желательно, чтобы профиль дублировался для каждого действия, тогда можно будет использовать данные предыдущих раундов боя для каких-нибудь заклинаний, оперирующих временем)


Таким образом мы получаем материал, из которого каждый пользователь сможет сделать програмную составляющую своей ФРПГ. Как простую (с двумя параметрами и простенькими боями), так и сложную (с сотнями параметров, формул и кучей способностей)

П.С. выше я употреблял слово "объект" в двух значениях.
То, что без кавычек - собственно объект, который мы ставим на карту, вроде шариков в твоей проге.
То, что с кавычками - в значении "тот, на кого выполняется действие" и употреблялось вместе с словом "субъект" (тот, кем выполняется действие).


Жить надо так, чтобы когда ты умрешь, наверху сказали - Круто! А ну-ка повтори! -
(This post was last modified: 14.04.2011 01:30 by nosferatu.)
14.04.2011 00:21
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #10

Quote:1) У меня программа не влезла в экран (высота экрана 800). Хотелось бы подстраиваемый размер окна, вплоть до разрешения 640х480 (при условии сжатого донельзя поля боя).
Я её под 900 подгонял Sm У меня на работе у монитора 1440*900 разрешение, а дома 1280*1024. Но тут согласен, уменьшить хотя бы до 768 пикселей по высоте надо. Правда, тогда придётся дефолтное поле боя уменьшать, потому как размеры одной клетки изменить нельзя - в прогу жёстко забито 24*24 пикселя...

Quote:2) Текущая концепция поля боя - неочень. Хотелось бы бесконечное авторасширяемое поле, прокручиваемое, динамически рисуемое (сейчас там загрузка статической сетки из файла, насколько я понял).
Бесконечное будет трудно сделать, но я всё-таки попробую. В "динамическом рисовании" не вижу особого смысла - а вдруг юзеру понадобится нестандартное поле боя? Пусть уж остаётся загрузка из файла, благо на производительность это вроде не влияет...

Quote:3) Основные кнопки управления (левая и правая мыши) заняты под рисование ландшафта, но во время боя ландшафт редко меняется, а вот перемещать объекты придется часто. Я бы сделал так: каждая кнопка мыши может управлять ландшафтом ИЛИ объектами, как решит пользователь.
А вот здесь я против. На самом деле, прорисовка ландшафта занимает намного больше времени, чем перемещение персонажей. Да, её нужно выполнять только один раз для каждой битвы - но сам этот процесс намного дольше, чем перемещение...

Quote:4) Насчет использования программы для расчета битв, можно было бы сделать интерфейс взаимодействия этой программы с программой-процессором, примерно следующим образом:
А вот тут я ничего не понял, если честно Ab



Quote:2) Хотелось бы больше обЪектов (добавить всякие домики, стены и т.п.), а также больше ландшафтов (хотя бы добавить пропасть, то бишь просто черный квадрат)
Я сделаю, чтобы юзер смог сам добавлять объекты (иначе я кучу времени на них потрачу).
   
Quote:3) Сделать один шарик и дать возможность изменять не только цвет текста на нем, но и самого шарика.
Нет, шарики - это не тупо однотонные кружки. Они трёхмерные, я их в Блендере делал 118 Если кому нужно будет изменить цвет - пусть файл-картинку изменит...

Quote:1. база основных переменных (собственно основные параметры, которые пользователь пишет сам: уровень, здоровье, сила, ловкость, навыки и т.д.)
3. база созданных профилей (пользователь создает профиль, ему открываются все параметры, которые он прописал в базе основных переменых, и он проставляет им числовые значения. Это так сказать болванки монстров и героев)
Всё это будет.

Quote:6. база формул (пользователь создает формулу, оперируя всем тем, что есть в базе простых функций)
Не, все формулы юзер будет считать сам. Потому как их может быть неограниченное число, да и сами формулы могут выглядеть как угодно. Разве что для расчёта дальности передвижения/стрельбы можно отдельно добавить функцию - так как, это будет ну очень часто использоваться... Проще уж исходники выложить - кому надо будет, тот прямо в прогу свои формулы и забьёт. С++, хотя бы на низком уровне, знают многие Spiteful

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


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
14.04.2011 06:52
Find all posts by this user Quote this message in a reply
nosferatu Offline

Posts: 716
Post: #11

Передвигать колесиком очень неудобно, к тому же не у всех мышек есть колесики, (а если на ноуте тачпад, что тогда делать?) так что лучше сделать так, чтобы левой кнопкой можно было как передвигать шарики, так и проставлять ландшафт

Ну, если добавлять обьекты (2д) будет можно, не особо заморачиваясь, то хорошо.

Зачем было делать шарики в блендере?

Я лишь предложил сделать сильно упрощенную версию редактора триггеров варкрафта.
Собственно зачем нужны профили, если они будут играть только показательную функцию? ИМХО дать пользователю возможность писать формулы, и применять их в проге - это сэкономило бы огромное количество времени. (вот представь, что ты изучил пассивную способность, которая при атаке дает вероятность нанесения дополнительного урона, который пропорционален разности ловкости игрока и ловкости противника... а у тебя ещё пять пассивок и у противника две пассивки... так ГМ каждый раз должен будет всё это просчитывать, чтобы выяснить урон от одной атаки? Тогда либо бои будут длиться вечно, либо все надо упрощать до минимума, но если всё упрощать, то зачем нужен этот редактор? Другое дело, когда игрок забивает формулу (которая срабатывает при спользовании формулы "атака", если у профиля значение способности > 0), добавляет в профиль значение способности, и вместо огромной кучи действий просто выбирает формулу "атака", а все просчитывает машина)


Жить надо так, чтобы когда ты умрешь, наверху сказали - Круто! А ну-ка повтори! -
(This post was last modified: 14.04.2011 15:14 by nosferatu.)
14.04.2011 15:14
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #12

Quote:Передвигать колесиком очень неудобно, к тому же не у всех мышек есть колесики, (а если на ноуте тачпад, что тогда делать?) так что лучше сделать так, чтобы левой кнопкой можно было как передвигать шарики, так и проставлять ландшафт
Тогда уж правой. Ладно, постараюсь сделать режим работы с двумя кнопками... Хотя рисовать что-то на тачпаде, имхо, извращение.

Quote:Зачем было делать шарики в блендере?
Трёхмерные шарики лучше смотрятся Sm

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


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
14.04.2011 15:55
Find all posts by this user Quote this message in a reply
FBX Offline

Posts: 2235
Post: #13

Quote:Правда, тогда придётся дефолтное поле боя уменьшать, потому как размеры одной клетки изменить нельзя - в прогу жёстко забито 24*24 пикселя...

Почему нельзя сделать прокрутку? Ну и прочие особенности оконных элементов управления.

Quote:А вот тут я ничего не понял, если честно

Ну и ладно, не важно.

Quote:Я не хочу открывать Аредиту на месяц позже, добавляя в прогу возможность забивать свои функции и действия.

Можно прикрутить Lua - это ж несложно сделать.
14.04.2011 16:24
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #14

Quote:Почему нельзя сделать прокрутку? Ну и прочие особенности оконных элементов управления.
Ну да, или прокрутку.

Quote:Можно прикрутить Lua - это ж несложно сделать.
Не, уж лучше пускай на сях пишут 118


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
14.04.2011 16:39
Find all posts by this user Quote this message in a reply
nosferatu Offline

Posts: 716
Post: #15

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

Ой, что-то я размечтался, кто все это делать будет? :D


Жить надо так, чтобы когда ты умрешь, наверху сказали - Круто! А ну-ка повтори! -
(This post was last modified: 14.04.2011 17:05 by nosferatu.)
14.04.2011 17:05
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group