Сценарий на любом языке

Published
» Предназначение: Работа с кодом
Версия игры: 1.26a
Эта система позволяет написать сценарий на любом языке, при условии, что программу на нём возможно упаковать в DLL, и встроить его в карту без помощи сторонних лаунчеров. Доступ к нативкам прилагается.
Таким образом, можно разрабатывать карту с большим комфортом и получать на выходе более производительный код.
Если же эту систему захотят использовать те, у кого уже есть готовые карты, написанные на JASS'е, то им придется написать конвертор, что переведет их код на желаемый язык.

Вызов нативок

Для работы сценарию необходимо получить доступ к игре, с чем поможет следующая библиотека:
» JASS API
const
	JASS_API_DLL_NAME = 'JassApi.dll';

type
	PJassString = Pointer;
	
	TJassStringHandle = Dword;
	TJassFunctionHandle = Dword;
	TJassHandle = Dword;

	TSingle = record Value: Single end;

function GetJassNative(Name: PChar): Pointer; stdcall; external JASS_API_DLL_NAME;
function GetStringHandle(Value: PChar): TJassStringHandle; stdcall; external JASS_API_DLL_NAME;
function GetStringFromHandle(StringHandle: TJassStringHandle): PChar; stdcall; external JASS_API_DLL_NAME;
function GetJassString(Value: PChar): PJassString; stdcall; external JASS_API_DLL_NAME;
function GetJassStringContent(JassString: PJassString): PChar; stdcall; external JASS_API_DLL_NAME;
Функция "GetJassNative" позволяет получить указатель на код нативной функции.
При их вызове используется конвенция "cdecl", а следующая таблица покажет, какой тип должен быть у параметров и результата, в зависимости от типов указанных в jass-скрипте.
» типы данных
Тип (JASS) Тип передаваемого значения Тип возвращаемого значения
integer Int32 -
real PSingle TSingle
boolean LongBool -
string PJassString TJassStringHandle
handle TJassHandle -
code TJassFunctionHandle -
Примечания:
  • При передаче строки, её следует превратить в объект с помощью функции "GetJassString".
  • При получении дескриптора строки, её значение можно узнать с помощью функции "GetStringFromHandle".
  • Строки используют кодировку "UTF-8".
  • Важно возвращать вещественные числа завернутыми в структуру, чтобы те передавались посредством регистров центрального процессора, а не через стек математического сопроцессора.
  • Система изменяет тип "code" и теперь вместо дескрипторов JASS-функций, нужно передавать указатели на реальные функции.
Для более подробного изучения этого вопроса, предлагаю рассмотреть пример:
Скачать исходники с примером.

Встраивание в карту

Имея готовый сценарий, остается внедрить его в карту, с чем поможет набор файлов из прикрепленного к этому ресурсу архива.
В папке "scripts" находятся файлы со скриптом, отвечающие за распаковку и загрузку библиотеки "Loader.dll", находящейся в папке "bin".
Далее система загружает библиотеки указанные в файле "config.json", в нём уже прописана пара файлов для работы с нативками, свои нужно добавлять после них.
Оригинальный скрипт следует удалить, предварительно перенеся из него функцию "config" (со всеми зависимостями) в импортируемый "war3map.j".
По окончанию настройки, все файлы можно переместить в архив карты.


Views: 1 156

quq_CCCP #1 - 8 months ago 1
Голосов: +1 / -0
Манул - вершина скромности.
Vlod #2 - 8 months ago 1
Голосов: +1 / -0
Качественная штука, большой потенциал, круто!
WarGoose #3 - 8 months ago (изм. ) 2
Голосов: +2 / -0
Как уже написали выше, мануал довольно скромный. Хотелось бы примеров и на других языках.
Также я решил разобрать вашу карту, чтобы понять, что к чему, но ещё больше запутался :) Я далеко не специалист в pascal, и знаю его не выше школьной программы, поэтому мне не совсем понятно, почему если в исходниках, данных вами, мы видим 3 скрипта: natives.pas, Example.pas и jassapi.pas, то на выходе у вас получилось 4 библиотеки: RedirectCalls.dll, Example.dll, JassApi.dllи некий Loader.dll? Не могли бы вы объяснить?
Ещё я пытался переписать ваш JassApi на C# и заменить одноименную библиотеку, однако я словил ошибки) Проблема в моей библиотеки, в конфликте языков или в том, что JassApi.dll вообще трогать не надо было?)))
Был бы рад получить ответы и развернутый мануал, т.к. идея писать на любимом языке очень нравится)))
IceFog #4 - 8 months ago 1
Голосов: +1 / -0
Не могли бы вы объяснить?
В архиве, прикрепленном к этому ресурсу, изначально находится набор библиотек, которые необходимы для работы системы, так что не стоит их удалять.
Из предоставленных же мною исходников сценария, компилируется файл "Example.dll", который и был использован в карте-примере.
WarGoose #5 - 8 months ago 0
Голосов: +0 / -0
В архиве, прикрепленном к этому ресурсу, изначально находится набор библиотек, которые необходимы для работы системы, так что не стоит их удалять.
А, понял.
Но есть ещё не совсем понятный для меня момент: должна ли dll'ка выполняться сама, или есть определенный метод, который ваши библиотеки вызывают? Просто, например, в c# у библиотек нет точек входа (либо я очень плохо ищу).
P.s. прошу прощения за тупые вопросы.
IceFog #6 - 7 months ago -2
Голосов: +0 / -2
WarGoose, библиотеки и так исполняются при загрузке, так что нет нужды в дополнительных действиях.
Vlod #7 - 6 days ago 0
Голосов: +0 / -0
Хочется подключения интерпретируемых языков, таких как lua, python, js и их библиотек
quq_CCCP #8 - 6 days ago 0
Голосов: +0 / -0
Vlod, зачееем? Вы не можите освоить жасс, который сам по себе недолуа, простой и примитивный, достаточный для построения сценариев карт варкравта. Писать с нуля карту на С++ будет куда сложнее, и имеет смысл лишь конверт для защиты и отптимизации карты, реализации внутри фишек, которых в игре нету и реализовтаь их можно лишь сторонней либой.
Питон - вот интересно зачем? Все сводится в те же самые - мы взяли адресс нативки Создать юнита ( к примеру ) и вызвали её, сунув аргументы, если в жассе это делает вирутальная жассм машина, то тут ты будешь это делать на с\питоне\луа... И да, там все эти фишечки языков типа тута не пашут, надо все ручками написать... Да там алгоритм не будет так ограничен как на жассе, но извините если в 2020 на гуи как курица лапой пишут, что говорить о более сложных алгоритмах и продуманных подходах на других языках?
Те кто так могут и умеют, напишут на жассе, пусть не так оптимально - но в рот мне ноги, кому это усралось, работает, не лагает, утечки пачками не плодит, да и ладно, 2020 год, ни 1 карта чето не взлетела, дота, лтд, петры, вампы - все платформы ими забиты, остальные карты - единичны на снг платформах.
Vlod #9 - 6 days ago 0
Голосов: +0 / -0
Давайте подумаем. На этих языках написано так много, что переписывать это на jass или си не практично
quq_CCCP #10 - 6 days ago (изм. ) 1
Голосов: +1 / -0
Vlod, давайте подумаем, все что на этих языках написано в варкравте не усралось, ибо либо есть тоже самое - готовое, встроенное в движке, либо не имеет никакого смысла в реалиях варкравта. В варкравте главное карта а не код, или каке то там наработки, каким образом вам поможет в этом питон? Все системы хранения данных - есть по дефолту, те же хештаблицы, без жасса напрямую они будут побыстрее - но зачем? Вовсе у вас задача работать с игровыми обьектами, а не писать игру с нуля, делать какое то некому ненужное гавно, вроде еще одного файлового менеджера или движка тетриса. Да в жассе не хватает много что есть в движке, гребаный детект урона тому пример - но это решается проще, как сделали китайцы -просто добавлением нативок и нужных событий в жасс, ну тут на си они вам все доступны, о один хер вы реверс инжинерингом будите искать их по просторам game.dll и вникать в работу движка, что как бы рядовому юзеру который делает свою карту то и неусралось, 2020 - чуваки все на гуи, как курица лапой.
Поэтому развития это дело не получило, хоспаби за полгода 7 постов. Ради кого автору старатся? Идея конвертора - туда, сюда как айкап сделал, чито для защиты, как кстати щяс некоторые китайские карты, но это делают платформы, типа Озбнета или айкапа, где они затачивают карты под свои платформы и стараются чтобы они поменьше лагали на ноутбуках 20 летней давности.
Vlod #11 - 6 days ago 0
Голосов: +0 / -0
quq_CCCP, так, значит все есть и ничего больше не нужно, ну хорошо) Допустим, нужно грузить данные из своего GDrive, потому что не охота, чтобы карта много весила. Во вторых, необходимы алгоритмы поиска пути, деревья квадрантов, потому что родная система передвижения и багованная и устаревшая. В третьих, нужны алгоритмы генерации карты высот и рельефа, так как без них сделать нормальный переход между локациями не представляется возможным. В четвертых, нужны алгоритмы нейросетей, а также удобное апи для их постарения чтобы писать адекватный ии. Это, и многое другое, уже написано. Возможно у вас есть много свободного времени, но у меня его нету. Считаю, что разработчик должен тратить время на создание игры, а не на создание инструментов для создания игры. Спасибо
GetLocalPlayer #12 - 6 days ago 1
Голосов: +1 / -0
Возможно у вас есть много свободного времени, но у меня его нету
С такими требованиями проще заказать импорт карт в Godot.
ScorpioT1000 #13 - 6 days ago 0
Голосов: +0 / -0
Что только не придумаешь, лишь бы не юзать готовый игровой движок))
Это такая религия - ради того чтоб не учить новые нативки напишем свою игру вокруг common.j
Vlod #14 - 6 days ago 0
Голосов: +0 / -0
GetLocalPlayer, кроме импорта карт есть еще 1000+ моделей, иконок, сделанных в одной стилистике, настроенная сетевая передача и бесплатная платформа для организации совместной игры, удобный редактор рельефа и GUI
quq_CCCP #15 - 6 days ago 0
Голосов: +0 / -0
Vlod, Тебе в этом ни си, ни питон не помогут, у тебя как был 1 поток и 512 метров, так и остался, писать движок игры с нуля - удачи, никто в современное время этим заниматся небудет, нахрен не упало.
Для 90% задач то что есть хватает за глаза, про нейросети и прочее говно - хватит, уже не смешно, щяс драколича попрошу скинуть тот самый ии, который даже без мемхака сделан. Там быстренько тебя боты с небес спустят, тут дело не столько в отсуствии инструментов сколько в кривых руках \ не понимании того как это работает.
Потом если у вас такие замашки - своя игра, где ваша новая игра? Чето невидно.
Я к тому что в реалиях варкравта это некому ненужно, и делать поддержку никто не будет, проще написать снуля свою игру или в жасс нативок накидать необходимых, стоит тебе тронуть систему расчета путей или тумана - сразу фпс 6 кадров, про то как вы будите портировать игру на новый движок с поддержкой мультпотоков и трассировки лучей лучше создайте отдельную тему с готовым результатом, а мы посмотрим.
У вас хоть какая я то карта, играбельная есть?
Vlod #16 - 6 days ago 0
Голосов: +0 / -0
Если вы считаете, что эффективнее писать все свое, чем брать готовое, то это ваше личное мнение
Если вы считаете, что это никому не нужно, то это ваше личное мнение
Если вы считаете, что знание костылей jass и blizzard VM - полезное знание для дальнейшей жизни, то это ваше личное мнение
GetLocalPlayer #17 - 6 days ago 0
Голосов: +0 / -0
Если вы считаете, что эффективнее писать все свое, чем брать готовое, то это ваше личное мнение
Если вы считаете, что это никому не нужно, то это ваше личное мнение
Если вы считаете, что знание костылей jass и blizzard VM - полезное знание для дальнейшей жизни, то это ваше личное мнение
Если вы считаете что это его личное мнение, это ваше личное мнение.
DarkLigthing #18 - 6 days ago 1
Голосов: +1 / -0
А вот и приближение к моей старой хотелке. Писать код на Google Go.
quq_CCCP #19 - 6 days ago 0
Голосов: +0 / -0
Vlod, мда, уже не в те дебри понесло, просто бездумный флуд лиж бы че то написать.
Какое это отношение имеет к модмейкингу в варкравте на текущем уровне? Тебе привели 101 пример почему этого небудет и никому это ненадо, он начал расказывать какой жасс плохой. Чувак кеп курит в сторонке, но за 20 лет вы этот жасс не осилили, где собственно по сравнению с си или питоном то и учить нечего, а без понимания работы движка игры - че ты можешь сделать? Какое готовое, ау? Что ты готового можешь добавить в игру? OpenGl? Вот что? Еще раз, у тебя нет и не будет исходников, ты работаешь с готовой закрытой архитектурой, где изменить что то глобальное- нельзя, переписывать с нуля - будет сложнее чем тупо портировать игру на другой двиг.
Все ваши загрузки, подгрузи - это стандартное win.api, можно догружать в процессе игры данные, но этот путь доказал свою ненадежность, более того питона для этого как и луа не потребовалось, 1 вызов функции вин айпи на мемхаке.

Навреное круто будет 4 к сделать (нет)... Ну дальше можно перечислять бесконечно + а что уж тогда мешает взять тот же юнити, или чтонить еше (насчет гугл, ага мега ИИ, на ютубе такого позора еще не видели, гуглим AlphaStar sc2 fails )
Vlod #20 - 6 days ago 0
Голосов: +0 / -0
Сами работайте со своим win.api
Можете сначала ознакомиться с малой частью того что уже есть
IceFog #21 - 1 day ago 0
Голосов: +0 / -0
Всё возможно уже сейчас, в своей библиотеке, пользователь может и виртуальную машину python'а загрузить, и игру на Unity запустить.