IPB

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику ShadowTheAge. Спасибо сказали: 6
Дата поста: В теме: За сообщение: Спасибо сказали:
10 Oct 2007, 00:59 Тонкости ЕРМ, использование UN:C
ERM для профессионалов :)
Особеность реализации !!BM:G
!!BM:G - это "неаккуратно" сделанная функция, позволяет менять сотни характеристик существа, не только наложенные заклинания.

Вызов: !!BM:G#/$/d;
# - некоторый номер, если это 0..65 то будет работа с заклинаниями (нормальное функционирование ресивера), но если использовать другие значения, можно изменять любую информацию о монстре, как доступную (атака, здоровье), так и недоступную (например, звуки, анимацию)

$ - номер. Во избежание ошибок, "/d" в конце обязательно.

Таблица:
-100: Видимость существа (4 - виден, 8 - не виден)
Комментарий DracoLich'а: Отряды теряют невидимость при любом действии на поле боя. Но ее межно восстановить в триггере !?BG1 - ShadowTheAge
-90:  Есть ли цифры количества существ? 0-есть, 1-нет.
Комментарий DracoLich'а: отряд не имеет обозначения кол-ва существ, пока не походит. При этом на него можно колдовать магию и бить. Кол-во показывается при щелчке правой кнопки в нижнем правом углу картинки (где обычно, в общем). Аналогичное возражение - ShadowTheAge
-89:  Тип существа
Комментарий DracoLich'а: параметры отряда становятся как у существа, номер которого поставлен, но сразу же снижаются до стандартных параметров сущ-ва, которое меняют. имя отряда в меню при щелчке правой кнопкой по существу меняется; когда его бьют - имя остается измененным. когда битва окончена - на картинке будет показан настроенный отряд, а не старый. Если изменить тип существа, битву становится невозможно выиграть (вроде как комп требует убить того, на кого нападал, и изменения типа существ = вызову изменнного существа). Действительно проблема, делающая параметр почти бесполезным - ShadowTheAge
-88:  Позиция существа (если сменить, на старом месте останется стоять копия. Копия не может ходить и быть атакованой, занимает место)
-87:  Номер анимации
Комментарий DracoLich'а: при значение 2,6,9... (много еще где) игра выдает черный экран; кадры берутся в том порядке, как и при создании (надо бы найти хелп по дефмейкеру, где описан каждый шаг, и выдрать оттуда). Не сталкивался почему-то... - ShadowTheAge
-86:  Номер кадра в анимации
     Анимация возвращается к нормальной, если навести мышкой
-83:  Количество существ
-82:  Количество существ для отображения (может не совпадать с количеством. В этом случае написано будет одно, а реально другое). По умолчанию -1 - значит "полностью совпадает с реальным".
Комментарий DracoLich'а: после того, как любое сущ-во попадет под атаку, данному значению станет равно количество реальное; в итогах битвы показывается реальное количество убитых; при атаке измененного существа фантомные монстры не учитываются (т.е. если изменить 10 монстров на 100 этой командой, то урон будет нанесен именно этим 10). Поступаем как и с невидимостью - ShadowTheAge
-81 - безвозвратные потери. Количество существ после выигранной битвы (или после откупа) равно "текущее количество существ" минус "безвозвратные потери". Потери могут быть записаны в безвозвратные при использовании, например, после воскрешения на уровне none или basic. - by Demiurg
-80:  Разнича между текущим здоровьем и полным. Если 0 значит стек здоров.
-78:  Количество существ в начале боя
-73:  Город-владелец
-71:  Флаги существа
-68:  Название существа
-67:  Название существа (множественное число)
-66:  Строка состояния (например "Нет штрафа рукопашной")
-54:  Здоровье (полное)
-53:  Скорость
-52:  Атака
-51:  Защита
-50:  Мин. урон
-49:  Макс. урон
-48:  Боезапас
-41:  Владелец глючит
-40:  Что делает ХЗ. Но явно чето делает. Попробуйте, смотрится прикольно smile.gif
-38:  Смещение существа по Y
-37:  Смещение существа по X
     От того места где должен быть. В пикселях
-19:  Смещение по оси OX прямоугольника с количеством существ.
-17:  Частота проигрывания случайной анимации.
     Чем меньше тем чаще. Поставьте 200, будет без перерыва
-13:  Анимация существа
-12:  Анимация снаряда
-10:  Звук перемещения
-9:   Звук атаки
-8:   Звук урона
-7:   Звук выстрела
-6:   Звук смерти
-5:   Звук защиты
-1:   Кол-во активных заклинаний (для отображения цвета кол-ва существ)
173:  Кол-во активных заклинаний (Для отображения при щелчке правой кнопкой)
212:  Мораль существа
213:  Удача существа
Комментарий Demiurg'а: Мораль и удача пересчитывается при передаче хода другому существу. Поэтому полезно только для получения или проверки. Если очень нужно менять то можно делать это или перед атакой, или каждый ход - ShadowTheAge

Что-нибудь еще желаете увидеть в таблице? Пишите мне в асю или личку.
Синим выделены не мои исследования (спасибо всем за помощь)
Красным выделены строковые параметры - для изменения вам потребуются функции для работы со строками на низком уровне - см. следующий пост.
Серым выделено то, что менять проблемно - я могу только посоветовать прочитать данные у одного монстра и поставить их другому.
Berserker, totkotoriy
15 Sep 2007, 00:39 ERM Artifact Manager
Все для артефактов!
Обновление: Добавил комментарии. Предлагаю модераторам сменить название темы на "ERM Artifact Manager", ибо теперь одиночная функция для работы с Custom data выросла в небольшую систему, в которой пользовательские данные артефакта лишь одна из ее функций.

Для начала код, потом пояснения.

Код
!?FU20100; Custom data Extended
!!HE-1&x1=-1:N?x1; Если герой указан как -1, то получить его номер
!!VRy1:Sx1*1170; 1170 байтов на героя - это смещение
!!VRy2&x2<19/x2>=0:Sx2*8+68753305; Смещение одетых артефактов
!!VRy2&x2>=19:Sx2-19*8+68753472; Смещение артефактов в рюкзаке
!!VRy2&x2>=0:+y1; Прибавляем смещение героя - получаем нужный адрес
!!VRy2&x2=-1:S6916828; Если тип артефакта -1 то все предыдущее лишнее, получаем прямой адрес
!!VRy2&x3>=2:-4; Новая фишка, Чтение/запись артефакта, находится на 4 байта "левее"
!!UN|x3=0/x3=2:Cy2/4/?x4; Считываем
!!UN|x3=1/x3=3:Cy2/4/x4; ...или записываем

!?AE0&v7016=0; Реакция на снятие артефакта (НЕ вручную)
!!FU20100:P-1/v999/0/?y1; Получаем Custom data
!!FU20103:P-1/v998/y1/v999/-1/v999;

!?AE1&v7016=0; Одевание артефакта (НЕ вручную)
!!FU20100:P-1/-1/0/?y1;
!!FU20103:P1/v998/y1/v999/-1/-1;

!?CM2; Работаем с артефактами на экране героя
!!CM:H?y1/?y99S?y2/I?y3; Получаем кучу данных о щелчке - куда, как, че за герой?
!!VRv7016|y2=13/y2=10:S0; Если имеет место mouse up, то переводим состояние обратно, в режим ожидания
!!FU|y3<2/y3>44/y2=13:E; Выход если щелкнули не туда или не так, как нужно
!!VRy3:-2; Некоторые операции, в результате которых мы получим в y3 щелкнутый слот в формате AP
!!VRy3&y3>=38:-19;
!!FU20101:Py1/y2/y3; Вызов функции обработки щелчка - x1 - Герой, x2 - тип щелчка (12/14), y3 - слот в формате AP

!?CM3; Тоже самое, только сложнее. Экран встречи героев.
!!CM:H?y1/?y2S?y3/I?y4; Также получаем героев, щелкнутый слот и тип щелчка
!!VRv7016|y3=13/y3=10:S0; Перевод состояния в режим ожидания
!!FU&y4>=65/y4<=88|y4<27/y4>98:E; Выход если щелчок не туда
!!FU&y3=13:E; Или неправильный тип
!!VRy5:S0; Дальше идет ряд преобразований, цель которых - получить в y6 номер артефакта в формате AP
!!VRy5&y4>45/y4<65:S1;
!!VRy5&y4>93/y4<99:S1;
!!VRy6&y5=0/y4<=45:Sy4-27;
!!VRy6&y5=1/y4<=64:Sy4-46;
!!VRy6&y5=0/y4>45:Sy4-70;
!!VRy6&y5=1/y4>64:Sy4-75;
!!FU20101&y5=0:Py1/y3/y6; Вызов нужной функции обработки, в зависимости от зелкнутого героя
!!FU20101&y5=1:Py2/y3/y6;

!?FU20101; Функция обработки щелчка мыши на артефактах
!!VRv7016:S1; Переходим в режим контроля (триггеры AE не вызываются)
!!FU&x2=12/x3>18:E; Если щелчок левой кнопкой на рюкзаке то уходим - ведь мы ничего не одевали/снимали
!!VRy1:Sx3;
!!FU20100:Px1/y1/0/?y10Px1/y1/2/?y11Px1/-1/0/?y12Px1/-1/2/?y13; Получение всех данных об артефактах - как о том, что в руке, так и о том, что в слоте
!!FU20103&x2=14:P0/y11/y10/y1/x1/y1; Если у нас "информационный щелчок" (правой кнопкой), то передать управление пользовательской функции
!!FU&x2=14:E; Все, информационный щелчок обработан. Далее идет обработка одевания/снятия артефакта
!!FU20103&y13=-1/y11>-1:P-1/y11/y10/y1/x1/y1; Если в руках пусто, а в слоте есть арт, то мы этот арт вынимаем (передаем управление пользовательской функции)
!!FU&y13=-1:E; и уходим
!!UN:Ay13/2/?y2; С этого момента и далее: У нас есть артефакт в руках. Проверяем куда его можно вставить (формат P2)
!!FU20102:Py2/y1/?y3; Функция проверки равенства слотов P2 и AP
!!FU&y3=0:E; Выходим если артефакт не подходит в слот
!!FU20103&y11>=0:P-1/y11/y10/y1/x1/y1; Если в слоте что-то было, то это что-то мы вытаскиваем (Контроль пользовательской функции)
!!FU20103:P1/y13/y12/y1/x1/-1; Ну и в любом случае вставляем артефакт из рук (Контроль пользовательской функции)

!?FU20102; Функция проверки равенства слотов P2 и AP. Чисто математическая.
!!VRx3:S0; Комментировать не буду, работает правильно и ладно. Вряд ли тут нужно будет что-то менять.
!!VRx1:-1;
!!VRx3&x1=x2/x1<=6:S1;
!!VRx1:+1;
!!VRx3&x1=x2/x2>=7/x2<=9:S1;
!!VRx3&x1=9/x2>=10/x2<=12:S1;
!!VRx3&x1=9/x2=18:S1;
!!VRx1:+3;
!!VRx3&x1=x2/x2>=13/x2<=17:S1;

!?FU20103; Передача контроля пользовательской функции
!!VRy-100:Sx3; Устанавливаем переменную y-100 на Custom Data текущего артефакта
!!FU20105:Px1/x2/x3/x4/x5; Выхываем пользовательскую функцию
!!FU20100&y-100<>x3:Px5/x6/1/y-100; Если y-100 изменилась, обновляем Custom Data


Итак, теперь возможности.
Во-первых, как и прежде, Custom data Extended.
!!FU20100:Px1/x2/x3/x4;
x1 - Номер героя (-1 - текущий)
x2 - Номер артефакта (формат AP) -1 - тот, что в руках
x3 - действие
** 0 - Считывание Custom Data
** 1 - Запись Custom data
** 2 - Считывание номера артефакта
** 3 - Запись номера артефакта
x4 - значение (для x3=0 и x3=2 должно быть "?...", то есть считывание)
Примечание: Для свитка, в Custom Data хранится номер заклинания. Смена этого номера ведет к изменению заклинания

Как мы видим, здесь прибавилась возможность работать не только с данными артефакта, но и с самими артефактами.

Во-вторых, новая возможность. Даже несколько. Когда происходят действия с артефактами, вызывается функция 20105, которую должен описать пользователь. Эту функцию рекомендуется использовать вместо !?AE так как:
Во-первых, она не вызывается шесть раз при смене артефакта laugh.gif Экономит время процессора. Во-вторых, она позволяет работать с Custom data напрямую. Ну и в третьих, она еще может использоватся для создания хинтов по артефактам (при щелчке правой кнопкой мыши)

Функция вызывается со следующими параметрами:
х1 - Действие с артефактом
** -1 - Снятие артефакта
** 0 - Всплывающее сообщение
** 1 - Одевание артефакта
х2 - Номер артефакта
х3 - Custom data артефакта.
Примечание. Также, переменная y-100 устанавливается в Custom data артефакта. Изменение переменной y-100 внутри этой функции влечет за собой изменение Custom data.
x4 - Слот артефакта (формат AP)
х5 - номер героя-владельца (используйте его при обращении !!HE, так как значение -1 будет глючить при вызове на экране встречи героев)

Итак, для чего это надо?
Вспомним скрипт Living Scroll. Там при щелчке правой кнопкой мыши на свитке выдавался нестандартный текст. Однако реализация этого текста была достаточно длинной. Теперь же это можно уместить в 2-3 строчки:
!?FU20105&x1=0/x2=162; Показ сообщения для меча номер 162
!!CM:R0; Отменяем стандартную реакцию
!!IF:Q1/31/x3/4^Этот меч увеличивает вашу атаку на %X3^; Отображаем динамический нестандартный текст.

ВСЕ!!! При щелчке правой кнопкой на меч будет отображатся нестандартный текст. Подразумевается, что Custom data меча хранит бонус к атаке. Работает на экране героя и встречи героев.

Это еще не все. Реализация бонуса для меча также теперь умещается в три строчки!
!?FU20105&x1<>0/x2=162; НЕ показ сообщения, действие с артефактом ном. 162
!!VRy1:Sx3*x1; Бонус к атаке. Если меч снимаем, будет отрицательным.
!!HEx5:Fdy1/d/d/d; Плюсуем герою.

ВСЕ!!! Работает также на экране героя и встречи героев.
Напоминаю, что чтобы сменить Custom data внутри функции !?FU20105, достаточно просто поменять переменную y-100.

Теперь по повду скрипта с пузырем дракона.
Теперь нет ничего проще! Гляди:
Код
!?CM2; Щелчок на экране героя
!!FU20100:P-1/-1/2/?y1; Что за арт у нас в руках?
!!FU&y1<>127:E; Не пузырек дракона? Сваливаем.
* Тут проверка куда мы щелкнули. Если щелкнули не на существо или не на нужное существо тоже сваливаем.
* Здесь мы делаем что-то с существом
!!FU20100:P-1/-1/3/-1; Убираем артефакт нафик
!!UN:R5/0/0; Восстанавливаем курсор на обычный


Все.
З.Ы. Тестировалось только под WOG 3.58 и то недолго. Времени 5 часов, лягу ка я спать, если кто поможет протестировать буду благодарен, иначе сам завтра после работы.
З.З.Ы. Система использует v7016, для длительного хранения.
Bes, hippocamus
27 Apr 2007, 15:56 Шаблоны карт и генератор
(rmg.txt)
Все, пашет. Хотя полномасштабный тест еще не проводил, так что могут быть сырости. Если что пишите.

Вместе с этой прогой также лежит readme, хотя писал я его недолго но может помочь. Также положил один демонстративный шаблон.

Шаблоны как было сказано кидайте в папку data и называйте rmg.txt. Ваш шаблон должен удовлетворять по размерам и кол-ву игроков чтобы игра его использовала.

Да, кстати, шаблоны богатости (в настройках локации) пока не пашут. Настраивайте богатость локации руками smile.gif

Сейчас в редакторе нельзя провести два перехода между локациями, но я протестировал и выяснил, что это обрабатывается генератором карт корректно.
Axel_Templar
27 Apr 2007, 10:36 Шаблоны карт и генератор
(rmg.txt)
Скрины вот, сама прога будет через пару часов
Pavel

Текстовая версия Сейчас: 17 October 2019 - 11:19
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика