Skip to content

Разбиение на файлы

Когда ваша игра становится большой, размещение её кода целиком в 'main3.lua' -- плохая идея.

Для разбиения текста игры на файлы вы можете использовать 'include'. Вы должны использовать 'include' в глобальном контексте таким образом, чтобы во время загрузки 'main3.lua' загрузились и все остальные фрагменты игры, например.

lua
-- main3.lua
include "episode1" -- .lua можно опускать
include "npc"
include "start"

room {
	nam = 'main';
...

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

Также есть возможность динамически подгружать части игры (с возможностью доопределять объекты). Для этого вы можете воспользоваться функцией 'gamefile':

lua
...
act = function() gamefile ("episode2") end -- .lua можно опускать
...

Внимание! Если в вашей игре определена функция init(), то в подгружаемых частях она также должна присутствовать! В противном случае, после подгрузки файла, будет вызвана текущая функция init(), что обычно не является желательным.

'gamefile()' также позволяет загрузить новый файл и забыть стек предыдущих загрузок, запустив этот новый файл как самостоятельную игру. Для этого, задайте второй параметр функции как 'true'. Имейте в виду, что существующие модули остаются и переживают операцию gamefile в обоих случаях. 'gamefile()' можно использовать только в обработчиках.

lua
	act = function() gamefile ("episode3.lua", true); end;

Во втором варианте 'gamefile()' можно использовать для оформления мультиязычных игр или игр-сборников, где фактически из оболочки выполняется запуск самостоятельной игры.