Тест цельного текста прошел хорошо. Конечно нашлись некоторые баги (неправильно вставлены варианты ответа, неверное форматирование текста и пр.), но все это мелочи и их легко устранить.
Инвентарь. Как много в этом звуке для сердца кодера слилось.
Поверьте, ребята, мало кто из непрофессиональных программистов реально понимает объемность объема этой задачи – сделать нормальный инвентарь в ренпае. Но обо всем по порядку.
Начинающих кодеров-ренпаефилов тема инвентаря всегда пугает и отталкивает, т.к. в ренпае нет инвентаря изначально, а значит его в той или иной мере придется писать самостоятельно, с чем у новичков всегда боль.
И здесь даже сложно сказать, что вызывает наибольший страх и ужас:
а) внутренняя логика инвентаря
или
б) его внешнее отображение для игрока
Правильный ответ:
спойлер
в) момент, когда игрок начинает взаимодействовать с инвентарем, т.е. воздействовать на его внутреннюю логику через его внешнее отображение.
На самом деле можно сделать инвентарь чисто формальный, чтобы он просто работал как некий список того, что у игрока в карманцах, т.е. не предполагающий взаимодействия с предметами вообще.
И изначально Скелет и был собран в подобном формате и знаете... Его в принципе хватало. Но мы же здесь не для компромиссов собрались, верно? Так что погнали делать свои модули!
___
В целом целая куча "типа инвентарей" основывается на простецких недо-решениях. Чаще всего этопросто набор переменных, отвечающих за предметы. Конкретно – параметр True/False (есть он у игрока или нет).
Для особо одаренных мамкиных программистов можно еще сделать счетчик неуникальных предметов, например яблок. Тогда показатель наличия яблок сменится с apple = True/False на apple = 0 (False) или > 0 (True).
Сначала была мысль взяться за этот формат, но все же сделать некий простейший инвентарь через авто-расширяющееся окошко (он же vbox) с кучей скрываемых/раскрываемых вставок, которые бы изначально были закрыты, и появлялись бы при получении предмета, когда значение "предмет X в инвентаре у ГГ" становился бы равен True.
Но в итоге эта тема была отброшена почти сразу, как богомерзкий и недостойный наших высоких духовных порывов метод. Нам нужно что-то реально крутое, динамичное и гибкое в настройке.
Было принято решение делать инвентарь на основе списков (list) и конечно управляться все это будет через кучу взаимосвязанных функций (function). А в совокупности, ребята, это очень опасная штука. Серьезно, это вам не Чикатило и даже не архивы спецслужб.
...
Если бы я только догадывался куда меня заведет эта тропинка...
Да ладно, я догадывался.
Опуская технические подробности, могу заявить, что общий размер кода инвентаря и сопутствующих ему функций и фич не меньше (а то и больше) всего остального кода игры (технического кода, разумеется, текст самих параграфов не считается).
Но зато оно работает:
1. Можно добавлять новые предметы в инвентарь. Они будут отображаться на нужных слотах. При удалении предмета слоты будут пересобираться в нужный порядок (т.е. если удалили 2й предмет, то его место займет 3, на место 3 пойдут 4 и т.д.) и все это автоматически.
2. Можно класть в инвентарь несколько уникальных предметов. И каждый из них будет особенным, с индивидуальными настройками.
3. Предметам можно настроить все! Название, описание, иконку, действие, даже надпись на кнопке действия.
4. Можно принудительно класть или удалять предметы в ходе игры по сценарию. Можно делать это вручную самому игроку.
5. Можно проводить поиск по наличию / отсутствию предмета. И исходя из этого влиять на игру, на варианты действий, да вообще на все, что угодно.
6. При получении или потере предмета загорается иконка "предмет получен" или "предмет потерян" около кнопки инвентаря.
7. Сами новые предметы подсвечиваются так же, до тех пор, пока игрок не наведет на них мышь.
8. Функция принудительной очистки инвентаря.
9. При наведении курсора на иконку предмета подсвечивается подсказка с названием предмета (там может быть и любая другая информация)
И самое главное, что все это можно (при необходимости) сравнительно легко доработать, ввести, например, предметы с постепенным расходованием (типа фляги с зельем на 3 глотка) и прочее, прочее, прочее.
Но пока я достиг необходимого для Скелета (на самом деле перевыполнил план) и следующий шаг это внешний вид и доделка интерфейса.