Здесь постараюсь вкратце рассказать об особенностях скриптов в Worms Forts. Будем считать, что с языком программирования Lua, особенностях его реализации в W4/WUM/W3D и английским вы немного знакомы. Если нет, здесь Герыч прекрасно об этом рассказал.
function InitialiseLevel() LoadLevel("landscapes/MP/ME2.xom",true) end
Как нетрудно догадаться, это загрузка карты на примере "Некрополя". Об особенностях функции LoadLevel настоятельно рекомендуется почитать здесь, дабы избежать глупых ошибок.
Действия, выполняющиеся в начале игры, рекомендуется размещать в функции HideWormsNow() - т.к. если выполнять определенные действия (например перемещение червя) в InitialiseLevel(), игра вылетит. Вот пример данной функции с действием внутри:
Код
function HideWormsNow() MoveWorm( 0, "buildHere001", true ) end
Также в скриптах мультиплеерных карт можно найти пустую функцию SetDifficulty(), для чего она используется - пока не знаю...
Код
function InitialiseLevel() LoadLevel("landscapes/MP/ME2.xom",true) end function HideWormsNow() MoveWorm( 0, "buildHere001", true ) end
Кстати, точка под названием buildHere001 на данной карте реально существует - можно компильнуть и проверить. Но о компиляции чуть позже.
Выше был пример скрипта для мультиплеерной карты. Для сингла (миссии, туторы, дм) скрипты сложнее - многие действия, что в мп делаются автоматом, здесь описываются вручную. Примеры в исходниках.
Для обработки многих событий можно использовать свой код в соответствующих функциях. Например, вот так реализовано перемещение червя на заданную точку при подборе ящика:
Код
function CrateCollected(CrateIndex,WormIndex) MoveWorm( WormIndex, "buildHere001", true ) collectgarbage() end
В WF также есть аналог lib_help.lua из W4 (скрипт, выполняющийся в каждой игре) - это скрипт common.lua (common.lub после компиляции). Как и в либ_хелпе, часть функций оттуда выполняются по требованию, а часть - в обязательном порядке. Например AlexBond встроил туда Custom Hat Mod.
Данное понятие можно встретить в examples.lua (об этом файле чуть ниже). Это некое подобие эмиттеров в W4/WUM/W3D - точек на карте, которые можно использовать в скриптах, например для размещения определенных объектов. Ими могут являться точки типа wfRef (простые ref. points), buildHere (точки для зданий), возможно также некоторые другие - не уверен, потому что не тестил. Про строение карт и различные точки на них можно прочитать здесь.
Найдено мной: - Нет циклов for. - Нельзя подсчитать элементы массива (функции #, table.maxn и table.getn не работают). - Не работает функция math.random. Есть аналог RandomRange - дает целое число в интервале от 1 до заданного, второй параметр вроде определяет вхождение заданного числа в интервал:
Код
counter = RandomRange(5, true) -- randomise an integer between 1 and 5
Где брать имена игровых функций, переменных и т.п.: (по возрастанию содержательности и убыванию понятности) 1. examples.lua в исходниках! T17 сделали нам мини-учебник, с вполне понятными комментариями и примерами использования. 2. Перечитав другие исходники. 3. Для наиболее продвинутых:
Кроме того, открыв EXE файл игры в текстовом редакторе можно обнаружить много текстовых строк, некоторая часть которых означает имена сообщений (также там есть имена функций и имена контейнеров).
Компиляция и вставка в игру:
Не рекомендуется сохранять исходники в UTF-8 через Блокнот (он использует непонятный компилятору ее вариант UTF-8 BOM). Для работы с исходниками Lua рекомендую юзать Notepad++. Там можно сохранить новый файл в обычном UTF-8, а также есть подсветка синтаксиса.
1. Помещаем исходники ваших скриптов в одну папку с makelub.bat, lubcode.exe и luac.exe 2. Запускаем makelub.bat Все lua файлы в папке будут скомпилены в lub (причем специально зашифрованный, чтоб быть понятным игре).
Готовые lub'ы можно вставить: - путем замены родных (для common единственный способ) - добавив отдельную запись в local.xom (рекомендуется для скриптов карт)