Спрайтовый движок, #5

МЕНЮ С ВЫБОРОМ ИГР


Недавно задумал сделать на Instead платформе такую вещь: загружаем игру, а она выдаёт список из игр, которые можно запустить и поиграть. Все эти игры объединены не одной темой, а одним моим движком. То есть созданы для моего движка, который проигрывает эти игры. 



При работе над этой идеей возникло не мало сложностей:
1. Игры бывают разного размера экрана (окна) и нужно сначала подготовить соответственно файл theme.ini
2. Нужно после того, как игрок поиграл в одну игру загружать снова меню из игр, а theme.ini у нас переделано :( под предыдущую игру.

Но я решил обе эти проблемы. УРА!

1. После выбора игры на диск записываем игровой theme.ini но не запускаем её, а просим пользователя перезапустить игру, вызвавав меню  и нажав "Начать заново". 
2. После того, как пользователь нажал "Начать заново" прога стартует с новым theme.ini  и изменяет параметры окна игрового, потом записывает на диск первоначальный theme.ini для того, чтобы при следующем перезапуске окно загрузчика было первоначальным и стартуем игру.

Алгоритм был правильный, но в одном месте была ошибочка. Я её долго отлавливал, но нашёл. Так как я воспользовался для создания меню выбора игр конструкциями Instead: room, dsc, obj, vobj, enter, act, да еще поставил autosave на false, а в этих конструкциях не сохраняется значения переменных, то есть в конструкциях instead нельзя при отключенном autosave сохранить и передать значение переменной. А мне нужно было при старте загрузчика инициализировать переменную в первоначальное значение. Я её поместил в конструкцию enter при каждом входе в room. Это и было ошибочно. Она не ставилась в первоначальное положение. Можно сказать, что в enter был только текст программы, на не исполняемый код программы. Для наглядности приведу кусок кода менюшки с ошибкой:




instead_version "2.4.1"
game.enable_autosave = false
require 'theme'

main = room {
nam = 'Коллекция игр IFtroll';


enter = function()
ERRORSCR = true                 -- поместить переменную здесь было ошибкой
return save_auto_ini()
end,

dsc = function()
return txtc ("Loader Games^")
end,

obj = {
vobj("1", "^1. {Комиксы «Дара Круз»} 768:976"),
vobj("2","^2. {Зомби, Ajenta Arrow} 800:600"),
vobj("3","^3. {Floors Escape} 1020:715"),
vobj("4","^4. {Побег из комнаты} 768:976"),
vobj("5","^5. {Сказка-плуталка} 768:976"),
vobj("6","^6. {Цветные лопухи} 800:600"),
vobj("7","^7. {Аня Нежина и рубин в золотой оправе} 800:600"),
};

act = function(s, w) --выбор игры для создания темы
dofile 'modules/inite.lua'
LD = 'a'
LI = w
if w == "1" then
gamename = "comics"
lang = 'unq'
W_SCR = 768
H_SCR = 976
S_SCR = 0
pathgam = "games/"..gamename.."/"
return init()
и т.д


Как только переменную ERRORSCR я вынес за пределы конструкций INSTEAD ошибка исчезла.

Теперь осталось под последнюю версию движка "подпилить" все игры, что в менюшке.





Комментарии

Популярные сообщения