HiddenList — различия между версиями

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Дополнительные параметры)
 
(не показано 40 промежуточных версий 8 участников)
Строка 70: Строка 70:
 
*'''актёр-иконка''' ('' actorIco '') - если "да", то во время полёта найденного хидден-объекта вместо него летит иконка которая помечена как "main picture" и указана в текстовом id хидден-объекта.<br>
 
*'''актёр-иконка''' ('' actorIco '') - если "да", то во время полёта найденного хидден-объекта вместо него летит иконка которая помечена как "main picture" и указана в текстовом id хидден-объекта.<br>
 
*'''актер''' ('' actor '') - машина состояний, которая управляет процессом полета к таблице найденных [[HiddenObject]] .
 
*'''актер''' ('' actor '') - машина состояний, которая управляет процессом полета к таблице найденных [[HiddenObject]] .
 +
*'''z актера''' ('' actorZ '') - z актера. Будет применено только если не равен 0.
 +
*'''актер стартует из таблицы''' ('' actorTable '') - если настройка включена, то актер стартует не из позиции хиддена, а из ячейки таблицы .
 
*'''целевой объект''' (''trg'') - Если задан, [[HiddenObject]] после нахождения летит не в ячейку таблицы, а к нему.
 
*'''целевой объект''' (''trg'') - Если задан, [[HiddenObject]] после нахождения летит не в ячейку таблицы, а к нему.
  
Строка 79: Строка 81:
 
*'''полета''' ('' vf '') - Скорость полета в пикселях в секунду.
 
*'''полета''' ('' vf '') - Скорость полета в пикселях в секунду.
 
*'''вращения''' ('' vr '') - Скорость вращения в градусах в секунду.
 
*'''вращения''' ('' vr '') - Скорость вращения в градусах в секунду.
 +
 +
 +
 +
'''Группа - равномерное распределение'''
 +
 +
*'''включить''' ('' undist '') - Равномерно распределять объекты по площади сцены.
 +
*'''дополнительные сортировки''' ('' addit_algo '') - Использовать дополнительные алгоритмы поиска равномерного распределения (не работает с динамическими хидденами)
 +
 +
'''Группа - итерационное распределение'''
 +
 +
*'''включить''' ('' altern_algo '') - Использовать итерационный алгоритм поиска равномерного распределения объектов
 +
*'''учитывать сложности''' ('' process_diff '') - Учитывать сложности предметов при распределении
 +
*'''количество объектов''' ('' hiddens_num_threshold '') - Максимальное количество активных предметов на сцене для которых будут учитываться сложности (max = 24)
 +
*'''количество итераций''' ('' fix_overlapping_iter_num '') - Максимальное количество итераций фикса перекрытия объектов.
 +
*'''максимальное перекрытие''' ('' max_overlapping '') - Максимальная допустимая площадь перекрытия в пикселях.
 +
*'''ключ распределения''' ('' distribution_seed '') - Ключ для случайного выбора заменяемого предмета (только для мультиплеера)
 +
*'''удалять перекрытия''' ('' del_after_fix '') - Удалять оставшиеся перекрытия после последней итерации фикса.
 +
 +
Рекомендации по использованию:
 +
 +
*Если включать "Удалять перекрытия", то нужно для счетчика кол-ва оставшихся хидденов считывать значение из "num".
 +
*Оптимальное значение максимальной площади - 1024 пикселей, т.е. допускаем перекрытие в 32 на 32 пикселя, что совсем не влияет на визуальное перекрытие объектов.
 +
*Количество итераций можем ставить 20-50. Если перекрытий не останется раньше, то фикс перекрытий остановится, если выполнится все количество - отобразится количество перекрытий в логах. Большое количество итераций фикса негативно сказывается на скорости загрузки сцены.
 +
 +
Логи:
 +
 +
<pre>
 +
"Deleting a hidden object with textID: %i" - удаление объекта с текстовым ID
 +
"Overlapping detected! Area: %f px" - обнаружения перекрытия в столько-то пикселей
 +
"fixOverlapping() Iterations num: %i / %i; Overlaps num: %i" - итерации, итоговое количество перекрытий
 +
</pre>
  
 
==Дополнительные параметры==
 
==Дополнительные параметры==
Строка 98: Строка 131:
 
*'''множитель для иконок''' ('' ico_res '') - Графический ресурс(анимация) для отображения множителя у иконок для типа списка 4(поиск по иконкам) и включенного объединения одинаковых текстов. Первый фрейм - х2, второй - х3 и т.д.
 
*'''множитель для иконок''' ('' ico_res '') - Графический ресурс(анимация) для отображения множителя у иконок для типа списка 4(поиск по иконкам) и включенного объединения одинаковых текстов. Первый фрейм - х2, второй - х3 и т.д.
 
*'''исключать одинаковые тексты''' ('' unTxtID '') - исключает или не исключает из поиска объекты с одинаковыми txtID, используется совместно с '''одного типа'''.
 
*'''исключать одинаковые тексты''' ('' unTxtID '') - исключает или не исключает из поиска объекты с одинаковыми txtID, используется совместно с '''одного типа'''.
 +
*'''показывать один объект игр''' ('' unTxtRep '') - Количество игр, в течении которых будет выбран один объект из данного набора. 0 - не использовать механизм
 +
*'''силуэты после слов''' ('' picsAfterWords '') - Стараться в силуэтах использовать то, что находилось в словах
 +
*'''блиц с бесконечными объектами''' ('' endlessBlitz '') - При блице ставим максимальное количество объектов и засчитываем победу, если найден хоть один
 +
*'''находить много одним кликом''' ('' canFoundMultiple '') - 1 - если тап попал на несколько объектов, то найдем все. 0 - только один
 
*'''вероятность пассивного предпочитаемого объекта''' ('' prefProb '') - вероятность выпадения пассивного объекта, если у объекта стоит параметр "предпочитаемый" используется при исключении  объектов с одинаковыми текстовыми ID.
 
*'''вероятность пассивного предпочитаемого объекта''' ('' prefProb '') - вероятность выпадения пассивного объекта, если у объекта стоит параметр "предпочитаемый" используется при исключении  объектов с одинаковыми текстовыми ID.
 
*'''вероятность активного предпочитаемого объекта''' ('' prefProbAct '') - вероятность выпадения активного объекта, если у объекта стоит параметр "предпочитаемый" используется при исключении  объектов с одинаковыми текстовыми ID.
 
*'''вероятность активного предпочитаемого объекта''' ('' prefProbAct '') - вероятность выпадения активного объекта, если у объекта стоит параметр "предпочитаемый" используется при исключении  объектов с одинаковыми текстовыми ID.
 
*'''реагировать на невидимые''' ('' canInvis '') - реагировать или нет на объекты, которые в момент игры не видны в таблице. (Кликаются только те [[hiddenObject]] которые отображены в таблице, остальные нет!).
 
*'''реагировать на невидимые''' ('' canInvis '') - реагировать или нет на объекты, которые в момент игры не видны в таблице. (Кликаются только те [[hiddenObject]] которые отображены в таблице, остальные нет!).
*'''распределять равномерно''' ('' undist '') - Равномерно распределять объекты по площади сцены.
+
 
 +
 
 +
'''Группа - равномерное распределение''' - в настоящее время не рекомендуется включать параметры из этой группы. Логика устарела и может конфликтовать со следующей группой итерационного распределения. Эта группа оставлена для возможной доработки в будущем.
 +
*'''включить''' ('' undist '') - равномерно распределять объекты по площади сцены. Да/нет.
 +
*'''дополнительные сортировки''' (''addit_algo'') - использовать дополнительные алгоритмы поиска равномерного распределения (не работает с динамическими хидденами). Да/нет.
 +
 
 +
 
 +
'''Группа - итерационное распределение''' - на данный момент лучший алгоритм равномерного распределения.
 +
*'''включить''' ('' altern_algo '') - использовать итерационный алгоритм поиска равномерного распределения объектов. Да/нет.
 +
*'''учитывать сложности''' ('' process_diff '') - учитывать сложности объектов при распределении. Подробнее о сложностях в описании соответствующего  параметра в [[hiddenObject]]. Да/нет.
 +
*'''количество объектов''' ('' hiddens_num_threshold '') - максимальное количество активных предметов на сцене, для которых будут учитываться сложности.
 +
*'''количество итераций''' ('' fix_overlapping_iter_num '') - максимальное количество итераций фикса перекрытия объектов. По умолчанию 50, min="0" max="100".
 +
*'''максимальное перекрытие''' ('' max_overlapping '') - максимальная допустимая площадь перекрытия в пикселях. По умолчанию 1024, min="0" max="2048".
 +
*'''ключ распределения''' ('' distribution_seed '') - ключ для случайного выбора заменяемого предмета (только для мультиплеера). min="0" max="32768".
 +
*'''удалять перекрытия''' ('' del_after_fix '') - удалять оставшиеся перекрытия после последней итерации фикса. Количество объектов получать из num, нет=0, да=1.
 +
 
 +
 
 
*'''прятать актеров при старте''' ('' hideact '') - Устанавливать актерам видимость false при старте (по умолчанию - да)(То есть всем актерам которые находятся на сцене при запуске принудительно установиться vis = 0).
 
*'''прятать актеров при старте''' ('' hideact '') - Устанавливать актерам видимость false при старте (по умолчанию - да)(То есть всем актерам которые находятся на сцене при запуске принудительно установиться vis = 0).
 
*'''аномалия''' ('' anom '') - для всех аномалий кроме текстовой [[HiddenObject]] и игровой фон должны быть подобъектами [[Effect]]):
 
*'''аномалия''' ('' anom '') - для всех аномалий кроме текстовой [[HiddenObject]] и игровой фон должны быть подобъектами [[Effect]]):
Строка 109: Строка 162:
 
:'''3''' - трансформация цвета;
 
:'''3''' - трансформация цвета;
 
:'''4''' - дым.
 
:'''4''' - дым.
 +
При применении аномалии "блитц" через объект [[Economics]] набор параметров: anom="0", is_blitz="1".
 
*'''флурри''' ('' flurry '') - Нужно ли отправлять статистику флурри "regexp=":
 
*'''флурри''' ('' flurry '') - Нужно ли отправлять статистику флурри "regexp=":
 
:'''0''' - нет;
 
:'''0''' - нет;
Строка 115: Строка 169:
 
*'''набор''' ('' kit '') - Набор, из которого берутся объекты.
 
*'''набор''' ('' kit '') - Набор, из которого берутся объекты.
 
*'''поведение дифференсов''' (''difbeh'') - Поведение найденных объектов в режиме поиск отличий.
 
*'''поведение дифференсов''' (''difbeh'') - Поведение найденных объектов в режиме поиск отличий.
 
+
*'''сортировать по приоритету''' (''priorsort'') - Сортировать итоговый список по полю приоритет объекта. Высокий приоритет - сначала.
 +
*'''не давать ходить игроку''' (''botonly'') - Если включена - то хидден будет работать, но не будет принимать клики от игрока.
 +
*'''предметов по заданию не более''' (''taskless'') - Предметов по заданию не более заданного числа. -1 - без ограничений
 +
*'''неактивные улики как фон''' (''cluesbg'') - Если включена, то в хидденах связанные предметы, для которых есть неактивные таски, будут видны на фоне.
  
  
Строка 158: Строка 215:
 
*'''полета актера''' ('' tmActor '') - Время работы актера, после которого обрабатываются ячейки таблицы;
 
*'''полета актера''' ('' tmActor '') - Время работы актера, после которого обрабатываются ячейки таблицы;
 
*'''перед исчезновением''' ('' tmWtHide '') - Время, в течение которого объект остается видимым после обработки.
 
*'''перед исчезновением''' ('' tmWtHide '') - Время, в течение которого объект остается видимым после обработки.
 +
*'''жизни актера''' ('' tmActorLife '') - Время жизни клона актера, после которого он будет удален меньше либо рано 0 - не удалять по времени
  
  
Строка 214: Строка 272:
 
*'''очки 3.0 коэф. времени 1 (l)''' (''score30lt'') - в конце игры начисляем очки за время по формуле s * lt / (1 + T / (tt * N))
 
*'''очки 3.0 коэф. времени 1 (l)''' (''score30lt'') - в конце игры начисляем очки за время по формуле s * lt / (1 + T / (tt * N))
 
*'''очки 3.0 коэф. времени 2 (t)''' (''score30tt'') - в конце игры начисляем очки за время по формуле s * lt / (1 + T / (tt * N))
 
*'''очки 3.0 коэф. времени 2 (t)''' (''score30tt'') - в конце игры начисляем очки за время по формуле s * lt / (1 + T / (tt * N))
 +
*'''очки детектив макс. комбо''' (''scoreDetMaxCombo'') - максимальное значение комбо для очков по системе детектива, используется при состоянии хидден-листа max_combo. Если в настройках хидден-листа очковая система "очки 3.0", то scoreDetMaxCombo должно быть равно <property name="комбо2 кол-во" id="cmb2Num" hint="комбо2 кол-во" type="int" label="комбо2 кол-во" value="1"/> +1. То есть, на 1 больше, чем значение комбо2 кол-во ('' cmb2Num '').
 +
*'''держать max_combo до тапа''' (''keepMaxCombo'') - Будет ли максимальное значение комбо после вызова max_combo храниться до тапа (да) или уменьшаться сразу (нет). Флаг используется только для состояния max_combo, обычный хидден останется прежним. Флаг обеспечит max_combo до первого тапа. То есть, чтобы комбо убывало по времени, но после первого тапа.
  
  
Строка 223: Строка 283:
 
*'''лимит ложных кликов''' ('' starWrAcc '') - Лимит ложных кликов.
 
*'''лимит ложных кликов''' ('' starWrAcc '') - Лимит ложных кликов.
 
Формула расчета проста, количество верных кликов делим на общее количество получаем коэффициент если он равен или больше указного нами то в опции пишем параметр, если нет то не пишем.
 
Формула расчета проста, количество верных кликов делим на общее количество получаем коэффициент если он равен или больше указного нами то в опции пишем параметр, если нет то не пишем.
 +
 +
 +
'''Группа - новейшая адаптивность'''
 +
 +
*'''включить''' ('' newAdOn '') - включить или выключить новый алгоритм адаптивности.
 +
*'''default T''' ('' newAdDefault '') - изначальное время, выданное игроку на нахождение одного хиддена. Указывается в миллисекундах.
 +
*'''относительное отклонение''' ('' newAdTimes '') - массив коэффициэнтов, применяемых к изначальному времени. Коэффициенты указываются в float и перечисляются через запятую.
 +
Первое число в массиве отвечает за переход на 0 сложностей, следующее на 1, на 2 и так далее. Более детальный алгоритм описан здесь: http://jira1:8090/pages/viewpage.action?pageId=18677822.
 +
 +
==Параметры бота и мультиплеера==
 +
 +
'''Группа - Хидден бот'''
 +
 +
*'''тип бота''' - тип бота:
 +
:'''нет''' - обычная одиночная игра, бот выключен;
 +
:'''на одном поле''' - игра с ботом на одном поле, у обоих одинаковый список предметов;
 +
:'''с маленьким полем''' - бот будет играть на отдельном поле (??????);
 +
:'''горячий стул''' - hotsit, игра двух живых игроков на одном девайсе, передача хода по очереди;
 +
:'''мультиплеер''' - игра через сервер с живым оппонентом;
 +
*'''файл уровня''' - xml файл с настройками сложности бота ([[HiddenList#Настройка сложности бота|пример]]);
 +
*'''номер уровня''' - номер уровня в файле (начиная с 0);
 +
*'''номер уровня max''' - если задан больше предыдущего номера - выбирается рандомное значение;
 +
*'''multiplayer''' - объект мультиплеера;
 +
*'''кнопка хинта''' - кнопка хинта для 2го игрока \ бота;
 +
*'''проверять интернет''' - проверять интернет при игре с ботом (так же, как при игре с живым игроком);
 +
*'''первый ход (вероятность)''' - вероятность первого хода игрока при игре с ботом (в процентах);
 +
*'''t min abs ms''' - самая минимальная задержка между ходами бота;
 +
*'''t1 min ms''' - минимальное время для быстрого нахождения предмета ботом;
 +
*'''t1 max ms''' - максимальное время для быстрого нахождения предмета ботом;
 +
*'''t1 prob %''' - вероятность быстрого нахождения предмета ботом;
 +
*'''t2 min ms''' - минимальное время для нахождения предмета ботом;
 +
*'''t2 max ms''' - максимальное время для нахождения предмета ботом;
 +
*'''t coef delta''' - коэффициент сложности (кажется от -1 до 1, могу ошибаться);
 +
*'''t wrong min ms''' - минимальное время между ложными кликами (мимо объекта) бота;
 +
*'''t wrong max ms''' - максимальное время между ложными кликами бота;
 +
*'''bot hint chance (percent)''' - шанс бота использовать хинт (в процентах);
 +
*'''bot hint num''' - максимальное кол-во использования хинтов ботом на игру;
 +
*'''доп. поле x''' - координаты доп. поля по Х;
 +
*'''доп. поле y''' - координаты доп. поля по Y;
 +
*'''доп. поле sx''' - масштаб доп. поля;
 +
*'''доп. поле sy''' - масштаб доп. поля;
 +
*'''указатель хода''' - указатель хода бота\оппонента. Должен иметь состояние ''beg'' и находитсья в сцене с хидденами;
 +
*'''родитель''' - родитель, в который поместим клонированную сцену (доп. поле);
 +
*'''счетчик очков бота''' - счетчик, выводящий очки;
 +
*'''счетчик без бонусов бота''' - счетчик, выводящий очки без бонусов за время и точность;
 +
*'''комбо2 прогресс бота''' - комбо2 прогресс;
 +
*'''аниматор очков бота''' - машина, которая при нахождении хиддена анимирует полученные очки;
 +
*'''счетчик очков за объект бот''' - счетчик, выводящий очки за объект;
 +
*'''счетчик комбо-серий (макс) бот''' - счетчик, выводящий макс. количество комбо-серий;
 +
*'''счетчик комбо-серий (тек) бот''' - счетчик, выводящий текущее количество комбо-серий;
 +
*'''flyer при ошибке''' - объект типа ''flyer'' который надо показать в точке клика, если этот клик ошибочный;
 +
*'''таймер хода бота''' - таймер хода бота;
 +
*'''таймер хода игрока''' - таймер хода игрока;
 +
*'''длительность хода ms''' - длительность хода игрока \ бота. Если задан 0 - игроки ходят одновременно;
 +
*'''длительность паузы между ходами ms''' - длительность паузы при смене хода игрока\бота.
 +
 +
=== Настройка сложности бота ===
 +
 +
Файл уровней для хидден-бота должен иметь такую структуру:
 +
  <bots>
 +
    <obj id="0">
 +
      <bot weight="3" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="21000" twrongmax="10000" />
 +
      <bot weight="1" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="5000" twrongmax="10000" />
 +
    </obj>
 +
    <obj id="1">
 +
      <bot weight="1" t1min="1000" t1max="2000" t1percent="10" t2min="10000" t2max="25000" twrongmax="10000" />
 +
      <bot weight="1" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="7000" twrongmax="10000" />
 +
    </obj>
 +
    <obj id="2">
 +
      <bot weight="1" t1min="1000" t1max="2000" t1percent="10" t2min="7000" t2max="21000" twrongmax="10000" />
 +
      <bot weight="2" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="5000" twrongmax="10000" />
 +
    </obj>
 +
  </bots>
 +
 +
*bots - основной таг
 +
*obj > id - номер уровня
 +
*bot - содержит те же параметры, что и настройки бота в хидден листе
 +
 +
==Режим "блиц" с бесконечными объектами==
 +
 +
'''Правила аномалии "блиц"''':
 +
 +
*Блиц заканчивается победой, если игрок нашел хотя бы один предмет за отведенное время игры блиц.
 +
*Если время вышло, но не было найдено ни одного предмета, то засчитывается поражение.
 +
*В аномалии блиц количество возможных предметов ограничивается максимальным количеством уникальных хидден-предметов на сцене (считываем из хидден-листа, параметр num). А количество видимых предметов ограничивается количеством предметов, заданных на уровне мастерства локации. При постепенном разборе предметов добавляются новые пока не будет разобрано максимальное количество предметов на хидден сцене, либо, пока не закончится время, но одновременно видно предметов не больше, чем заданных на конкретном уровне мастерства локации.
 +
 +
Для включения такого режима блиц используем поле в настройках хидден-листа:
 +
*'''блиц с бесконечными объектами''' ('' endlessBlitz '') - При блице ставим максимальное количество объектов и засчитываем победу, если найден хоть один. (да - использовать режим, нет - не использовать).
 +
 +
Если в этом поле настройка "нет", то режим блиц работает по-старому: объектов столько, сколько указано в уровне мастерства.
 +
 +
Прочитать, находится ли хидден в режиме блиц можно из поля "is_blitz" хидден листа (возможные значения - 0 или 1). Заполняется экономикой в момент старта локации.
 +
 +
Для отображения в счетчике максимального количества уникальных хидден-предметов на сцене (считываем из хидден-листа, параметр num) вычитывать измененный num можно ТОЛЬКО ПОСЛЕ прихода start hiddenlist, т.е. не в ините.
 +
 +
В экономике указываем блиц, как отдельную аномалию.
  
 
==Состояния==
 
==Состояния==
  
 
Состояния которые есть у листа. Мы можем передавать их с помощью различных объектов:
 
Состояния которые есть у листа. Мы можем передавать их с помощью различных объектов:
 +
 +
*'''init''' - инициализация  хидден-листа;
 
*'''invert''' - горизонтально отображает изображение;
 
*'''invert''' - горизонтально отображает изображение;
*'''run''' - переводит хидден с состояние активности, если до этого был на паузе;
+
*'''run''' - переводит хидден в состояние активности, если до этого был на паузе;
*'''pause''' -переводит хидден с состояние паузы, объекты не кликаются!
+
*'''pause''' - переводит хидден в состояние паузы, объекты не кликаются, таймер не идет;
 +
*'''pause_timer''' - объекты кликаются, но таймер не идет;
 +
*'''resume_timer''' - продолжить работу таймера, который был остановлен в состоянии ''pause_timer'';
 +
*'''add_time''' - добавить игрового времени (перед этим надо передать в param количество времени в ms)
 +
*'''swap_hiddens''' - меняет отображаемые в таблице поисковые объекты на случайные другие.
 +
*'''get_visible_ho''' - вернуть id активного HO объекта (объект пишет в себя два параметра - '''randomHO_id''' и '''randomHO_vis''' (id объекта и виден ли он сейчас юзеру)); Приоритет выбора HO объекта: с начала видимые юзеру, если таких нет - выводим невидимый на текущий момент HO (до предмета нужно фокусировать сцену);
 +
*'''max_combo''' - хидден начинается с максимальным значением комбо;
 +
*'''putback''' - вернуть случайный уже найденный обьект на экран и в список;
 +
*'''restart_no_anomaly''' - перезапустить хидден без аномалии;
 +
*'''finish''' - принудительно завершить игру.
  
 
==Примечания==
 
==Примечания==
Строка 274: Строка 441:
 
:'''свойство''' ('' par '') - Параметр, который мы изменяем;
 
:'''свойство''' ('' par '') - Параметр, который мы изменяем;
 
:'''значение''' ('' val '') - Новое значение параметра.
 
:'''значение''' ('' val '') - Новое значение параметра.
 +
 +
[[Файл:+.png]] '''нет предметов (при создании из динамического конфига)''' ('' nstNoObjects '') - при загрузке локации без хидден-объектов (например не подтянулся пак либо нет локализации)  перевести объект в новое состояние:
 +
:'''объект''' ('' obj '') - Перевести объект в состояние из следующего поля;
 +
:'''состояние''' ('' st '') - Новое состояние для объекта из предыдущего поля.
  
 
[[Файл:+.png]] '''не успел: если был экран''' ('' wscrOv '') - Если вышло время, а объекты не найдены, переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен:
 
[[Файл:+.png]] '''не успел: если был экран''' ('' wscrOv '') - Если вышло время, а объекты не найдены, переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен:
Строка 371: Строка 542:
 
== Динамический HG==
 
== Динамический HG==
 
Функционал позволяет генерировать HL самостоятельно HO объекты из файла конфига.  
 
Функционал позволяет генерировать HL самостоятельно HO объекты из файла конфига.  
 +
 +
П.С. - вся графика д.б. динамической. Данные файлы может создавать HO_Manager [http://wiki/index.php/HO_Manager Wiki HO_manager]
 +
[https://docs.google.com/document/d/13UUOKf_iJNzFx0PjU4JQIfYDX7NhK7dyfJAR3I-SWlQ/edit#heading=h.4pd8h5jdvqj4 Документ по динамических пакам]
 +
 
[[Файл:D485ecbbbb.jpg|right]]
 
[[Файл:D485ecbbbb.jpg|right]]
 
*'''файл уровня''' ('' configFile'') — указываем путь к файлу конфигу, где перечисляем файлы с HG.  
 
*'''файл уровня''' ('' configFile'') — указываем путь к файлу конфигу, где перечисляем файлы с HG.  
Строка 389: Строка 564:
 
       "levels": [
 
       "levels": [
 
         {
 
         {
             "file": "ViewerFiles/DynHid/hidden0.cfg"
+
             "file": "ViewerFiles/DynHid/hidden0.cfg",
        }
+
             "pack":3
      ],
 
      "bg": [
 
        {
 
            "src": "bg.png",
 
             "id": 356
 
 
         }
 
         }
 
       ]
 
       ]
Строка 402: Строка 572:
 
:Где "levels" - линки на файлы уровней.  
 
:Где "levels" - линки на файлы уровней.  
 
:::"file" - путь к файлу;
 
:::"file" - путь к файлу;
::"bg" - данные о фонах, для каждого файла уровня
+
:::"pack" - пак в который попадут ресурсы;
:::"src" - сорс графического ресурса;
+
 
:::"id" - id ресурса из ресурсной базы;
 
  
  
Строка 413: Строка 582:
 
         "w": 2048,
 
         "w": 2048,
 
         "h": 1151,
 
         "h": 1151,
 +
        "id": 16,
 
         "color": "#ffffff",
 
         "color": "#ffffff",
 
         "tile": ""
 
         "tile": ""
Строка 451: Строка 621:
 
             }
 
             }
 
         }
 
         }
       ]
+
       ],
 +
      "res": {
 +
        "images": [16, 129, 1488, 329],
 +
        "texts": [1022, 1023],
 +
        "sounds": [],
 +
      }
 
   }
 
   }
  
Строка 458: Строка 633:
 
:::"color" - цвет которым будет залито под фоном, нужное если фон имеет дырки;
 
:::"color" - цвет которым будет залито под фоном, нужное если фон имеет дырки;
 
:::"tile" - тайлинг фона;
 
:::"tile" - тайлинг фона;
 +
:::"id" - id ресурса из ресурсной базы;
 
::"hiddens" - перечень HO с их настройками
 
::"hiddens" - перечень HO с их настройками
 
::::"id" - TxtId;
 
::::"id" - TxtId;
Строка 475: Строка 651:
 
::::::"w" - ширина;
 
::::::"w" - ширина;
 
::::::"h" - высота;
 
::::::"h" - высота;
 +
::"res" - ресурсы которые входят в пак уровня ( будут вырезаны при экспорте в пак уровня)
 +
::::"images" - перечень графических ресурсов
 +
::::"texts" - перечень текстовых ресурсов
 +
::::"sounds" - перечень звуковых ресурсов
 +
 +
== Кроссворд ==
 +
Данный функционал базируется на динамических HG и настраивается в файле динамического уровня.
 +
 +
=== Мода 2 - слова с мусором ===
 +
[[Файл:Crossword mode2.jpg|right|500x500px]]
 +
Данная мода представляет собой HO объекты и текстовую таблицу, при нахождении предмета, в текстовой таблице подсвечиваются буквы слова.
 +
 +
Настройка в HiddenList указывается в теге '''кроссворд - мода 2 - слова с мусором''' ('''_G_17'''):
 +
* '''режим кроссворда''' ('''cwon''') - использовать/не использовать режим;
 +
* '''подуровень''' ('''sub_level''') - подуровень;
 +
* '''root''' ('''cw2root''') - родитель текстового поля, координаты будут установлены согласно параметрам "x","y";
 +
* '''text''' ('''cw2text''') - линк на текстовый объект, в котором будем отображать текстовое поле;
 +
* '''цвет найденных''' ('''colorFound''') - цвет букв найденных слов в нашем текстовом поле;
 +
 +
Файл конкретного уровня имеет вид:
 +
  {
 +
      ...
 +
      "hiddens": [ ... ],
 +
      "res": {
 +
        "images": [16, 129, 1488, 329],
 +
        "texts": [1022, 1023],
 +
        "sounds": [],
 +
      },
 +
      "mode2" : {
 +
        "en" : [
 +
            {
 +
              "ids" : [ 3032, 4480, 4491, 4493, 4494, 4499 ],
 +
              "nm" : "0001_06",
 +
              "num" : 6,
 +
              "numvis" : 9,
 +
              "rect_field" : {
 +
                  "h" : 1151,
 +
                  "w" : 1534,
 +
                  "x" : -768,
 +
                  "y" : -575
 +
              },
 +
              "rect_text" : {
 +
                  "h" : 462,
 +
                  "w" : 414,
 +
                  "x" : -682,
 +
                  "y" : -300
 +
              },
 +
              "string_check" : "XObatHWZIF|RJLhacksaw|QVPNsaddle|AECGDaxeYU|doveSlante|rnBMTKGEAQ",
 +
              "string_display" : "XOBATHWZIF|RJLHACKSAW|QVPNSADDLE|AECGDAXEYU|DOVESLANTE|RNBMTKGEAQ",
 +
              "x" : -475,
 +
              "y" : -69
 +
            },
 +
            {
 +
              "ids" : [ 4485, 4487, 4490, 4495, 4502, 17112 ],
 +
              "nm" : "0002_06",
 +
              "num" : 6,
 +
              "numvis" : 9,
 +
              "rect_field" : {
 +
                  "h" : 1151,
 +
                  "w" : 1534,
 +
                  "x" : -768,
 +
                  "y" : -575
 +
              },
 +
              "rect_text" : {
 +
                  "h" : 462,
 +
                  "w" : 412,
 +
                  "x" : -681,
 +
                  "y" : -300
 +
              },
 +
              "string_check" : "FskatesNTH|ALMboomera|ngWERODrad|ioSKBZoarP|tableGball|oonJXCUIYV",
 +
              "string_display" : "FSKATESNTH|ALMBOOMERA|NGWERODRAD|IOSKBZOARP|TABLEGBALL|OONJXCUIYV",
 +
              "x" : -475,
 +
              "y" : -69
 +
            }
 +
        ],
 +
        "ru" : [
 +
            {
 +
              "ids" : [ 4481, 4485, 4490, 4495, 4500, 4508 ],
 +
              "nm" : "0001_06",
 +
              "num" : 6,
 +
              "numvis" : 9,
 +
              "rect_field" : {
 +
                  "h" : 1151,
 +
                  "w" : 1534,
 +
                  "x" : -768,
 +
                  "y" : -575
 +
              },
 +
              "rect_text" : {
 +
                  "h" : 462,
 +
                  "w" : 412,
 +
                  "x" : -681,
 +
                  "y" : -300
 +
              },
 +
              "string_check" : "ЕконькиМЭк|олокольчик|ХАрадиоШве|слоВбабочк|аЖИЛкастрю|ляУЯРТНСКЮ",
 +
              "string_display" : "ЕКОНЬКИМЭК|ОЛОКОЛЬЧИК|ХАРАДИОШВЕ|СЛОВБАБОЧК|АЖИЛКАСТРЮ|ЛЯУЯРТНСКЮ",
 +
              "x" : -475,
 +
              "y" : -69
 +
            },
 +
            {
 +
              "ids" : [ 3053, 4480, 4487, 4494, 4502, 4507 ],
 +
              "nm" : "0002_06",
 +
              "num" : 6,
 +
              "numvis" : 9,
 +
              "rect_field" : {
 +
                  "h" : 1151,
 +
                  "w" : 1534,
 +
                  "x" : -768,
 +
                  "y" : -575
 +
              },
 +
              "rect_text" : {
 +
                  "h" : 462,
 +
                  "w" : 412,
 +
                  "x" : -681,
 +
                  "y" : -300
 +
              },
 +
              "string_check" : "ШЩЧУГЮДзве|здаНОМТЕХб|умерангИЪс|толЗЖЪбита|УфонарьЮпо|дарокХПЭБТ",
 +
              "string_display" : "ШЩЧУГЮДЗВЕ|ЗДАНОМТЕХБ|УМЕРАНГИЪС|ТОЛЗЖЪБИТА|УФОНАРЬЮПО|ДАРОКХПЭБТ",
 +
              "x" : -475,
 +
              "y" : -69
 +
            }
 +
    ]
 +
  }
 +
 +
:где "mode2" - настройки моды 2;
 +
:::"en", "ru" - языковые локали;
 +
::::"ids" - массив textID активных HO;
 +
::::"nm" - имя уровня - для нашего удобства;
 +
::::"num" - количество активных объектов == размеру массива '''ids''';
 +
::::"numvis" - количество всего объектов,используем для задания фоновых объектов (количество которых == numvis - num);
 +
::::"rect_field" - ректангл активной зоны (пока не используется);
 +
::::"rect_text" - ректангл текстового поля(пока не используется);
 +
::::"string_check" - текстовое поле регистро-зависимое - для HL;
 +
::::"string_display" - текстовое поле для отображения;
 +
::::"x" - координата x родительского объекта для текста;
 +
::::"y" - координата y родительского объекта для текста;
 +
 +
П.С. данную моду генерирует программа HGcrossword (https://docs.google.com/document/d/1RXSNUxNePF4qEibAPoCgfdiQycxoggc6Hu7a9VUjxSI/edit#)
 +
 +
== Авто тест HL ==
 +
Для запуска автотеста, нам нужно указать в app.icf параметры:
 +
 +
[GHiddenList]
 +
:'''HitTest''' - мода автотеста; (0- выкл.; 1 - разовая логика, пишется в файл раз в сессию для одного хидден листа ; 2 - при каждом init любого хидн листа дописывается статистика в файл);
 +
:'''HitTestDx''' = 5 - шаг с которым проходит автокликер по X;
 +
:'''HitTestDy''' = 5 - шаг с которым проходит автокликер по Y;
 +
 +
Для HitTest==2, очень помогает параметр "allow_background". Остаётся только написать скриптулину, которая ходит сама между экранами.
  
 
== Пример ==
 
== Пример ==

Текущая версия на 08:53, 22 февраля 2019

HiddenList является менеджером поисковых объектов. На сегодня HiddenList не просто управляет объектами на сцене - он отвечает за все штрафы и поощрения. В связке с такими объектами как HiddenHint + Effect HiddenList дает возможность реализовать систему подсказок, а также такие графические эффекты как: "ночь", "трансформация цвета" и т.д. с одним набором графики.

Общие параметры

(см. описание Object)

HOList 1.jpg
  • имя ( nm ) - Имя объекта HiddenList в дереве проекта. Может быт произвольным.
  • id-объекта - Уникальный номер объекта HiddenList, который можно увидеть в строке "имя" либо при наведении курсора на неё.
  • синхронизация ( sync ) - Применяется для синхронизации между лейаутами. Если указан параметр "нет", то объект будет активен только на текущем лейауте. По умолчанию указан параметр "да".
  • сохранение параметров ( sv ) - Настройка этого параметра актуальна, если приложение в дальнейшем будет сворачиваться в системную панель («трей»). Выбирается значение этого параметра из выпадающего списка. Возможны следующие варианты: "нет", "только объект", "объект с подобъектами", "только подобъекты". При выходе из трэя будут восстановлены ранее измененные/установленные (при переходе с одного экрана на другой)параметры объектов или подобъектов в зависимости от выбранного варианта для этого параметра. По умолчанию указан параметр "нет". Следует помнить, что если выбирается для объекта некоторой сцены значения этого параметра отличное от "нет", то должно и предусматриваться соответствующее значение этого параметра и для этой сцены, и для экрана, содержащего эту сцену.
  • z ( z ) - Параметр порядка рисования объекта. Сначала рисуются объекты с большим z, затем, поверх них - с меньшим.
  • память ( memo ):
1 - при повторном открытии экрана объект не обновляет свои параметры (помнит текущие параметры, оставшиеся от предыдущего посещения экрана);
0 - обновит свои параметры, при повторном открытии экрана.
  • группа ( gr ) - Группа, в которую входит текущий объект.

У листа также есть группы стандартных параметров такие как положение, размер, модификаторы. Но, по сути, они не важны. Главное, чтобы лист не перекрывал на сцене другие объекты. Поэтому ему лучше находиться за пределами сцены.

Основные параметры

  • Картинка ( res ) - Графический ресурс для отображения объекта. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования). Обычно не используется, а применяется для отображения table;
  • Таблица ( table ) - Объект типа table, который является визуальным отображением списка. Должна быть обязательно;
  • Подсказка ( hint ) — объект типа HiddenHint, который является менеджером хинтов;
  • highlighter ( hl ) — объект типа hiddenhighlighter, который подсвечивает не найденные объекты.;
  • Счетчик ( hdncnt ) — объект типа Counter, который отображает количество найденных объектов.

В самом счетчике в параметрах нужно указать val = 0, поскольку изначально нет найденных объектов;

  • Таймер ( timer ) — объект типа Timer, который отображает время игры.

При инициализации листа он передаст состояние "start" таймеру.

  • отладка ( trace ) — Отображать в окне состояний текущий объект.


Группа - внешний вид

  • вычеркнуть ( cross ):
1 - найденный объект вычеркивается, оставаясь в списке(таблице);
число - найденный объект удаляется из списка;
  • листать ( scroll )
1 - список можно листать (скролировать);
число - ищутся только те объекты, которые видны в списке (таблице);
  • тип списка ( kind ) - Тип поиска объектов:
1 - слово;
2 - предложение;
3 - удаляемая пиктограмма;
4 - пиктограмма;
5 - поиск различий.
  • поиск пар ( pair ) - Если 1, то идет поиска пар объектов с одинаковым типом, иначе обычный режим
пары - поиск пар;
одиночные - поиск по одному объекту.

Группа - звуки

  • обычный ( sndNrm ) - Звук при нахождении обычного HiddenObject.
  • коллекционный ( sndCol ) - Звук при нахождении коллекционного HiddenObject(объекту должна быть установлена коллекция).


Группа - параметры поиска

  • объектов ( num ) - Максимальное количество доступных для поиска объектов в одной игровой сессии. (ВАЖНО!!! Таблице нужно установить общее количество ячеек равное(или больше) количеству доступных для поиска объектов).
  • активных объектов ( numact ) - Максимальное количество активных объектов в одной игровой сессии.
  • видимых объектов ( numvis) - Максимальное количество видимых объектов в одной игровой сессии.
  • одного типа ( max ):
число - Максимальное количество объектов одного типа - поле тип в hiddenObject или хидден объекты с одинаковыми текстовыми ID могут считаться объектами одного типа;
-1 - игнорируется.
  • прятать ( hide ) - Делать невидимыми объекты, не участвующие в поиске.
  • оставлять ( stay ) - Оставлять найденный объект на месте (вызывая только флаеры) при удачном клике.
  • актёр-иконка ( actorIco ) - если "да", то во время полёта найденного хидден-объекта вместо него летит иконка которая помечена как "main picture" и указана в текстовом id хидден-объекта.
  • актер ( actor ) - машина состояний, которая управляет процессом полета к таблице найденных HiddenObject .
  • z актера ( actorZ ) - z актера. Будет применено только если не равен 0.
  • актер стартует из таблицы ( actorTable ) - если настройка включена, то актер стартует не из позиции хиддена, а из ячейки таблицы .
  • целевой объект (trg) - Если задан, HiddenObject после нахождения летит не в ячейку таблицы, а к нему.


Группа - скорость

Отвечают за скорость перемещения найденного объекта.

  • полета ( vf ) - Скорость полета в пикселях в секунду.
  • вращения ( vr ) - Скорость вращения в градусах в секунду.


Группа - равномерное распределение

  • включить ( undist ) - Равномерно распределять объекты по площади сцены.
  • дополнительные сортировки ( addit_algo ) - Использовать дополнительные алгоритмы поиска равномерного распределения (не работает с динамическими хидденами)

Группа - итерационное распределение

  • включить ( altern_algo ) - Использовать итерационный алгоритм поиска равномерного распределения объектов
  • учитывать сложности ( process_diff ) - Учитывать сложности предметов при распределении
  • количество объектов ( hiddens_num_threshold ) - Максимальное количество активных предметов на сцене для которых будут учитываться сложности (max = 24)
  • количество итераций ( fix_overlapping_iter_num ) - Максимальное количество итераций фикса перекрытия объектов.
  • максимальное перекрытие ( max_overlapping ) - Максимальная допустимая площадь перекрытия в пикселях.
  • ключ распределения ( distribution_seed ) - Ключ для случайного выбора заменяемого предмета (только для мультиплеера)
  • удалять перекрытия ( del_after_fix ) - Удалять оставшиеся перекрытия после последней итерации фикса.

Рекомендации по использованию:

  • Если включать "Удалять перекрытия", то нужно для счетчика кол-ва оставшихся хидденов считывать значение из "num".
  • Оптимальное значение максимальной площади - 1024 пикселей, т.е. допускаем перекрытие в 32 на 32 пикселя, что совсем не влияет на визуальное перекрытие объектов.
  • Количество итераций можем ставить 20-50. Если перекрытий не останется раньше, то фикс перекрытий остановится, если выполнится все количество - отобразится количество перекрытий в логах. Большое количество итераций фикса негативно сказывается на скорости загрузки сцены.

Логи:

"Deleting a hidden object with textID: %i" - удаление объекта с текстовым ID
"Overlapping detected! Area: %f px" - обнаружения перекрытия в столько-то пикселей
"fixOverlapping() Iterations num: %i / %i; Overlaps num: %i" - итерации, итоговое количество перекрытий

Дополнительные параметры

  • скалирование объектов ( scale_object ) - При нахождении во время полета объект будет скалироватся:
0 - отключено;
1 - включено.
  • пропадание объектов ( alpha_object ) - При нахождении во время полета объект будет менять альфу:
0 - отключено;
1 - включено.
  • реагировать на отпускание ( touch_up ) - Объекты связанные с этим хидденлистом будут реагировать на отпускание, а не на нажатие:
0 - отключено;
1 - включено (То есть реагировать на четкий клик, если кликнули и сместили область клика объект не реагирует!).
  • реагировать на finger tap ( finger_tap ) - Объекты, связанные с этим хидденлистом, будут реагировать на отпускание после ожидания даблтача.
  • задержка срабатывания ( touch_delay ) - только для реакции на нажатие. Время между нажатием и реакцией списка объектов.
  • объединять одинаковые тексты ( same_txt ) - Объекты с одинаковым текстом будут жить в одной ячейке таблицы с добавлением множителя xN.
0 - отключено;
1 - включено.
  • множитель для иконок ( ico_res ) - Графический ресурс(анимация) для отображения множителя у иконок для типа списка 4(поиск по иконкам) и включенного объединения одинаковых текстов. Первый фрейм - х2, второй - х3 и т.д.
  • исключать одинаковые тексты ( unTxtID ) - исключает или не исключает из поиска объекты с одинаковыми txtID, используется совместно с одного типа.
  • показывать один объект игр ( unTxtRep ) - Количество игр, в течении которых будет выбран один объект из данного набора. 0 - не использовать механизм
  • силуэты после слов ( picsAfterWords ) - Стараться в силуэтах использовать то, что находилось в словах
  • блиц с бесконечными объектами ( endlessBlitz ) - При блице ставим максимальное количество объектов и засчитываем победу, если найден хоть один
  • находить много одним кликом ( canFoundMultiple ) - 1 - если тап попал на несколько объектов, то найдем все. 0 - только один
  • вероятность пассивного предпочитаемого объекта ( prefProb ) - вероятность выпадения пассивного объекта, если у объекта стоит параметр "предпочитаемый" используется при исключении объектов с одинаковыми текстовыми ID.
  • вероятность активного предпочитаемого объекта ( prefProbAct ) - вероятность выпадения активного объекта, если у объекта стоит параметр "предпочитаемый" используется при исключении объектов с одинаковыми текстовыми ID.
  • реагировать на невидимые ( canInvis ) - реагировать или нет на объекты, которые в момент игры не видны в таблице. (Кликаются только те hiddenObject которые отображены в таблице, остальные нет!).


Группа - равномерное распределение - в настоящее время не рекомендуется включать параметры из этой группы. Логика устарела и может конфликтовать со следующей группой итерационного распределения. Эта группа оставлена для возможной доработки в будущем.

  • включить ( undist ) - равномерно распределять объекты по площади сцены. Да/нет.
  • дополнительные сортировки (addit_algo) - использовать дополнительные алгоритмы поиска равномерного распределения (не работает с динамическими хидденами). Да/нет.


Группа - итерационное распределение - на данный момент лучший алгоритм равномерного распределения.

  • включить ( altern_algo ) - использовать итерационный алгоритм поиска равномерного распределения объектов. Да/нет.
  • учитывать сложности ( process_diff ) - учитывать сложности объектов при распределении. Подробнее о сложностях в описании соответствующего параметра в hiddenObject. Да/нет.
  • количество объектов ( hiddens_num_threshold ) - максимальное количество активных предметов на сцене, для которых будут учитываться сложности.
  • количество итераций ( fix_overlapping_iter_num ) - максимальное количество итераций фикса перекрытия объектов. По умолчанию 50, min="0" max="100".
  • максимальное перекрытие ( max_overlapping ) - максимальная допустимая площадь перекрытия в пикселях. По умолчанию 1024, min="0" max="2048".
  • ключ распределения ( distribution_seed ) - ключ для случайного выбора заменяемого предмета (только для мультиплеера). min="0" max="32768".
  • удалять перекрытия ( del_after_fix ) - удалять оставшиеся перекрытия после последней итерации фикса. Количество объектов получать из num, нет=0, да=1.


  • прятать актеров при старте ( hideact ) - Устанавливать актерам видимость false при старте (по умолчанию - да)(То есть всем актерам которые находятся на сцене при запуске принудительно установиться vis = 0).
  • аномалия ( anom ) - для всех аномалий кроме текстовой HiddenObject и игровой фон должны быть подобъектами Effect):
0 - нет;
1 - текстовая;
2 - ночь; В машине которая выставляет эффект ночь, должны передавать сцене с объектом аномалия ( obj="scene"; par="drag"; val="0" ) и ( obj="scene"; st="update");
3 - трансформация цвета;
4 - дым.

При применении аномалии "блитц" через объект Economics набор параметров: anom="0", is_blitz="1".

  • флурри ( flurry ) - Нужно ли отправлять статистику флурри "regexp=":
0 - нет;
1 - да.
  • вероятность инверсии ( invProb ) - Вероятность того, что сцена будет перевернута по x;
  • набор ( kit ) - Набор, из которого берутся объекты.
  • поведение дифференсов (difbeh) - Поведение найденных объектов в режиме поиск отличий.
  • сортировать по приоритету (priorsort) - Сортировать итоговый список по полю приоритет объекта. Высокий приоритет - сначала.
  • не давать ходить игроку (botonly) - Если включена - то хидден будет работать, но не будет принимать клики от игрока.
  • предметов по заданию не более (taskless) - Предметов по заданию не более заданного числа. -1 - без ограничений
  • неактивные улики как фон (cluesbg) - Если включена, то в хидденах связанные предметы, для которых есть неактивные таски, будут видны на фоне.


Группа - появление новых объектов

  • время ( acttm ) - Время появления объекта (мс);
  • начальный скейл ( actsc ) - Начальный скейл;
  • начальная альфа ( actal ) - Начальная альфа.


Группа - сессии

  • сессионность ( ses ):
0 - нет;
1 - да.
  • ограничение сессий ( sesLim ) - Максимальное количество сессий, в которые можно играть.
  • набор объектов ( sesSet ) - Набор объектов при заходе в хидден после последней сессии:
0 - случайный;
1 - последний фон;
2 - пустой.


Группа - цвета

  • Цвет обязательных ( c_forced ) — цвет текста для обязательных объектов, указывается код цвета, если строку не заполнять цвет не используется.
  • Цвет найденных ( c_found ) — цвет текста для найденных объектов, указывается код цвета, если строку не заполнять цвет не используется.
  • Время перехода ( c_time ) - Время изменения цвета.


Группа - время

  • игры ( tmGm ) - Общее время игры. Если оно истекает, идет переход на экран [время вышло] (см.ниже):
-1 - игнорируется;
число - время игры.
  • прерывать ( tmInt ):
1 - по окончанию времени игра будет прервана;
0 - по окончанию времени игра продолжится, но переход все равно будет на неудачную ветку.
  • паузы ( tmWt ) - Время перед закрытием окна после разбора (для осмысления результата);
  • полета актера ( tmActor ) - Время работы актера, после которого обрабатываются ячейки таблицы;
  • перед исчезновением ( tmWtHide ) - Время, в течение которого объект остается видимым после обработки.
  • жизни актера ( tmActorLife ) - Время жизни клона актера, после которого он будет удален меньше либо рано 0 - не удалять по времени


Группа - ошибки

  • flyer при ошибке ( fl ) - обычно объект типа flyer (летуны которых надо показать в точке клика, если этот клик ошибочный). Можно в принципе любой объект который обладает состоянием "beg". Ошибочный клик - все клики мимо hiddenObject.
  • вычет времени при ошибке ( tmPen ) - Сколько отнять миллисекунд за ошибочный клик.


Группа - переход

  • при разборе ( scrOk ) - Экран на который надо перейти, если все объекты найдены.
  • время вышло ( scrOv ) - Экран на который надо перейти если время вышло, а не все объекты найдены.


Группа - система очков

  • Счетчик ( score_counter ) — счетчик, отображающий набранные очки.
  • счетчик (test) ( score_counter_test ) — счетчик, отображающий набранные очки.
  • ID пака ( pack_id ) — строковый идентификатор пака(для записи набранных очков в options должен быть заполнен); используется для вытаскивания суммарных очков в счетчики и дальнейшего их отображения.
  • ID игры ( game_id ) — строковый идентификатор игры (сцены).

Обязательно должен иметь префикс ID пака. Например, если pack_id = "pack1", то game_id = "pack1.game1".

  • мультипликатор очков ( scoreM ) — Мультипликатор очков за объект, если все собрано за отведенное время.
  • Очки ( score ) — количество очков, которые даются за каждый найденный hiddenObject.
  • Бонус за скорость ( bonusS ) — бонус за быстро найденный hiddenObject.
  • Бонусный интервал ( bonusT ) — время, за которое нужно найти hiddenObject для получения бонуса.
  • бонус за время ( bonusTime ) - бонус за оставшееся время игры = коэффициент который введем * оставшееся время таймера.
  • Бонусный мультипликатор ( grow ):
1 - умножать очки за второй быстро найденный предмет на 2, за третий на 3, и т. д.
0 - не умножать.
  • Количество кликов для штрафа ( wrngC ) — количество неверных кликов, после которых запустится блокатор (см. ниже).
  • Интервал для штрафа ( wrngT ) — время, за которое нужно совершить неверные клики.
  • Штраф (очки) ( delS ) — Сколько отнимаем очков за ошибочный клик.
  • Штраф (время) ( delT ) — Сколько отнимаем времени за ошибочный клик.
  • блокатор ( blockImg ) - Объект, блокирующий сцену при серии ошибочных кликов. (Обычно маска растянутая на весь экран. ДОЛЖНА иметь состояние "beg").
  • время блокировки ( blockTime ) - Время блокировки при серии ошибочных кликов по истечении переводит "блокатор" в состояние end.
  • порог touch move ( mvSens ) - Порог, начиная с которого движение пальца воспринимается как мув и сбрасываются неправильные клики.
  • touch move как штраф ( tchMvPen ) - Считать ли touch move за ложное попадание:
0 - нет;
1 - да.
  • клик на найденный как штраф ( clkFndPen ) - Считать ли клик на найденный объект за ложное попадание(актуально если объекты остаются на сцене).
  • аниматор очков ( scoreAnim ) - машина, которая анимирует полученные очки, должна иметь состояние anim.
  • коэффициент комбо ( cmbCoef ) - коэффициент для расчёта комбо очков по формуле s(n) = k * n * (n + 1).
  • счётчик очков за объект ( objScCnt ) - счётчик который показывает очки за последний полученный объект (учитывая бонусы).
  • счётчик комбо-очков ( cmbScCnt ) - счётчик очков полученных за комбо-серию.
  • счётчик комбо-серий ( cmbRwCnt ) - счётчик который показывает комбо-серию (комбо из 2-х, 3-х и т.д. найденных объектов).
  • комбо2 прогресс ( cmb2Pr ) - комбо2 прогресс;
  • комбо2 время ( cmb2Tm ) - комбо2 время;
  • комбо2 кол-во ( cmb2Num ) - комбо2 кол-во.
  • очки 3.0 (score30) - Использовать систему очков, придуманную Степановым в августе 2015.
  • очки 3.0 коэф. комбо (score30lc) - в конце комбо даем за него очков n * s * l * (n-1) - где n число предметов в комбо, s - очки за один предмет, l - этот коэффициент
  • очки 3.0 коэф. аккуратности (score30la) - в конце игры начисляем очки за точность по формуле s * la / (1 + Nmiss / N)
  • очки 3.0 коэф. времени 1 (l) (score30lt) - в конце игры начисляем очки за время по формуле s * lt / (1 + T / (tt * N))
  • очки 3.0 коэф. времени 2 (t) (score30tt) - в конце игры начисляем очки за время по формуле s * lt / (1 + T / (tt * N))
  • очки детектив макс. комбо (scoreDetMaxCombo) - максимальное значение комбо для очков по системе детектива, используется при состоянии хидден-листа max_combo. Если в настройках хидден-листа очковая система "очки 3.0", то scoreDetMaxCombo должно быть равно <property name="комбо2 кол-во" id="cmb2Num" hint="комбо2 кол-во" type="int" label="комбо2 кол-во" value="1"/> +1. То есть, на 1 больше, чем значение комбо2 кол-во ( cmb2Num ).
  • держать max_combo до тапа (keepMaxCombo) - Будет ли максимальное значение комбо после вызова max_combo храниться до тапа (да) или уменьшаться сразу (нет). Флаг используется только для состояния max_combo, обычный хидден останется прежним. Флаг обеспечит max_combo до первого тапа. То есть, чтобы комбо убывало по времени, но после первого тапа.


Группа - звезды

  • combo num ( comboNum ) - Количество быстро найденных объектов, нужное для получения звезды Combo.
  • combo time ( comboInt ) - Интервал между кликами, считающимися быстрыми для Combo.
  • accuracy ( accuracy ) - Точность кликов для получения звезды Accuracy (1 = 100%, все клики должны быть только удачные).
  • лимит ложных кликов ( starWrAcc ) - Лимит ложных кликов.

Формула расчета проста, количество верных кликов делим на общее количество получаем коэффициент если он равен или больше указного нами то в опции пишем параметр, если нет то не пишем.


Группа - новейшая адаптивность

  • включить ( newAdOn ) - включить или выключить новый алгоритм адаптивности.
  • default T ( newAdDefault ) - изначальное время, выданное игроку на нахождение одного хиддена. Указывается в миллисекундах.
  • относительное отклонение ( newAdTimes ) - массив коэффициэнтов, применяемых к изначальному времени. Коэффициенты указываются в float и перечисляются через запятую.

Первое число в массиве отвечает за переход на 0 сложностей, следующее на 1, на 2 и так далее. Более детальный алгоритм описан здесь: http://jira1:8090/pages/viewpage.action?pageId=18677822.

Параметры бота и мультиплеера

Группа - Хидден бот

  • тип бота - тип бота:
нет - обычная одиночная игра, бот выключен;
на одном поле - игра с ботом на одном поле, у обоих одинаковый список предметов;
с маленьким полем - бот будет играть на отдельном поле (??????);
горячий стул - hotsit, игра двух живых игроков на одном девайсе, передача хода по очереди;
мультиплеер - игра через сервер с живым оппонентом;
  • файл уровня - xml файл с настройками сложности бота (пример);
  • номер уровня - номер уровня в файле (начиная с 0);
  • номер уровня max - если задан больше предыдущего номера - выбирается рандомное значение;
  • multiplayer - объект мультиплеера;
  • кнопка хинта - кнопка хинта для 2го игрока \ бота;
  • проверять интернет - проверять интернет при игре с ботом (так же, как при игре с живым игроком);
  • первый ход (вероятность) - вероятность первого хода игрока при игре с ботом (в процентах);
  • t min abs ms - самая минимальная задержка между ходами бота;
  • t1 min ms - минимальное время для быстрого нахождения предмета ботом;
  • t1 max ms - максимальное время для быстрого нахождения предмета ботом;
  • t1 prob % - вероятность быстрого нахождения предмета ботом;
  • t2 min ms - минимальное время для нахождения предмета ботом;
  • t2 max ms - максимальное время для нахождения предмета ботом;
  • t coef delta - коэффициент сложности (кажется от -1 до 1, могу ошибаться);
  • t wrong min ms - минимальное время между ложными кликами (мимо объекта) бота;
  • t wrong max ms - максимальное время между ложными кликами бота;
  • bot hint chance (percent) - шанс бота использовать хинт (в процентах);
  • bot hint num - максимальное кол-во использования хинтов ботом на игру;
  • доп. поле x - координаты доп. поля по Х;
  • доп. поле y - координаты доп. поля по Y;
  • доп. поле sx - масштаб доп. поля;
  • доп. поле sy - масштаб доп. поля;
  • указатель хода - указатель хода бота\оппонента. Должен иметь состояние beg и находитсья в сцене с хидденами;
  • родитель - родитель, в который поместим клонированную сцену (доп. поле);
  • счетчик очков бота - счетчик, выводящий очки;
  • счетчик без бонусов бота - счетчик, выводящий очки без бонусов за время и точность;
  • комбо2 прогресс бота - комбо2 прогресс;
  • аниматор очков бота - машина, которая при нахождении хиддена анимирует полученные очки;
  • счетчик очков за объект бот - счетчик, выводящий очки за объект;
  • счетчик комбо-серий (макс) бот - счетчик, выводящий макс. количество комбо-серий;
  • счетчик комбо-серий (тек) бот - счетчик, выводящий текущее количество комбо-серий;
  • flyer при ошибке - объект типа flyer который надо показать в точке клика, если этот клик ошибочный;
  • таймер хода бота - таймер хода бота;
  • таймер хода игрока - таймер хода игрока;
  • длительность хода ms - длительность хода игрока \ бота. Если задан 0 - игроки ходят одновременно;
  • длительность паузы между ходами ms - длительность паузы при смене хода игрока\бота.

Настройка сложности бота

Файл уровней для хидден-бота должен иметь такую структуру:

  <bots>
    <obj id="0">
      <bot weight="3" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="21000" twrongmax="10000" />
      <bot weight="1" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="5000" twrongmax="10000" />
    </obj>
    <obj id="1">
      <bot weight="1" t1min="1000" t1max="2000" t1percent="10" t2min="10000" t2max="25000" twrongmax="10000" />
      <bot weight="1" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="7000" twrongmax="10000" />
    </obj>
    <obj id="2">
      <bot weight="1" t1min="1000" t1max="2000" t1percent="10" t2min="7000" t2max="21000" twrongmax="10000" />
      <bot weight="2" t1min="1000" t1max="2000" t1percent="15" t2min="3000" t2max="5000" twrongmax="10000" />
    </obj>
  </bots>
  • bots - основной таг
  • obj > id - номер уровня
  • bot - содержит те же параметры, что и настройки бота в хидден листе

Режим "блиц" с бесконечными объектами

Правила аномалии "блиц":

  • Блиц заканчивается победой, если игрок нашел хотя бы один предмет за отведенное время игры блиц.
  • Если время вышло, но не было найдено ни одного предмета, то засчитывается поражение.
  • В аномалии блиц количество возможных предметов ограничивается максимальным количеством уникальных хидден-предметов на сцене (считываем из хидден-листа, параметр num). А количество видимых предметов ограничивается количеством предметов, заданных на уровне мастерства локации. При постепенном разборе предметов добавляются новые пока не будет разобрано максимальное количество предметов на хидден сцене, либо, пока не закончится время, но одновременно видно предметов не больше, чем заданных на конкретном уровне мастерства локации.

Для включения такого режима блиц используем поле в настройках хидден-листа:

  • блиц с бесконечными объектами ( endlessBlitz ) - При блице ставим максимальное количество объектов и засчитываем победу, если найден хоть один. (да - использовать режим, нет - не использовать).

Если в этом поле настройка "нет", то режим блиц работает по-старому: объектов столько, сколько указано в уровне мастерства.

Прочитать, находится ли хидден в режиме блиц можно из поля "is_blitz" хидден листа (возможные значения - 0 или 1). Заполняется экономикой в момент старта локации.

Для отображения в счетчике максимального количества уникальных хидден-предметов на сцене (считываем из хидден-листа, параметр num) вычитывать измененный num можно ТОЛЬКО ПОСЛЕ прихода start hiddenlist, т.е. не в ините.

В экономике указываем блиц, как отдельную аномалию.

Состояния

Состояния которые есть у листа. Мы можем передавать их с помощью различных объектов:

  • init - инициализация хидден-листа;
  • invert - горизонтально отображает изображение;
  • run - переводит хидден в состояние активности, если до этого был на паузе;
  • pause - переводит хидден в состояние паузы, объекты не кликаются, таймер не идет;
  • pause_timer - объекты кликаются, но таймер не идет;
  • resume_timer - продолжить работу таймера, который был остановлен в состоянии pause_timer;
  • add_time - добавить игрового времени (перед этим надо передать в param количество времени в ms)
  • swap_hiddens - меняет отображаемые в таблице поисковые объекты на случайные другие.
  • get_visible_ho - вернуть id активного HO объекта (объект пишет в себя два параметра - randomHO_id и randomHO_vis (id объекта и виден ли он сейчас юзеру)); Приоритет выбора HO объекта: с начала видимые юзеру, если таких нет - выводим невидимый на текущий момент HO (до предмета нужно фокусировать сцену);
  • max_combo - хидден начинается с максимальным значением комбо;
  • putback - вернуть случайный уже найденный обьект на экран и в список;
  • restart_no_anomaly - перезапустить хидден без аномалии;
  • finish - принудительно завершить игру.

Примечания

  • HiddenList должен располагаться в дереве проекта ниже всех своих поисковых объектов.
  • Единственный обязательный объект о котором должен знать лист это Table для отображения списка поиска, даже если таблица не будет использоваться быть все равно должна!
  • После завершения хидден-игры (по разбору или по времени)при переходе на другой экран HiddenList записывает данные в опции в два места: первое - это то, которое указано у настройках (ID пака, ID уровня, тип списка), для каждой локации свое; а второе - это last_game.

Например,
last_game.time_spent (либо же pck_N.lvl_N.kind_N.time_spent) - время последней игры,
last_game.clicks (либо же pck_N.lvl_N.kind_N.clicks) - количество найденных объектов и т.д.
Все их можно увидеть в опциях. last_game был придуман для того, чтобы было удобно задавать счетчики в окне результатов. Также эти данные могут быть сохранены в опциях, если задать листу состояние wait.

  • Для проверки кликабельности хидденобъектов можно воспользоваться следующими настройками в app.icf:
[GHiddenList]
HitTest=0
HitTestDx=1 - шаг по х
HitTestDy=1 - шаг по y

в результате после перехода на сцену с хидденом появится файл, в котором будет казан объекты и координаты в которых они не тапаются.

Добавляемые параметры

+.png появляется новый объект: изменить состояние объекта ( actst ):

объект ( obj ) - Объект, состояние которого нужно изменить;
состояние ( st ) - Новое состояние объекта.
HOList 3.jpg

+.png разбор: если был экран ( wscrOk ) - При нахождении всех объектов, переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен:

был экран ( was ) - Экран, который мы проверяем на то, был ли он уже открыт хотя бы один раз;
перейти на ( scr ) - Переходим на этот экран, если экран из предыдущего поля уже открывался.

+.png разбор: изменить состояние объекта ( nstOk ) - При нахождении всех объектов, перевести объект в новое состояние:

объект ( obj ) - Перевести объект в состояние из следующего поля;
состояние ( st ) - Новое состояние для объекта из предыдущего поля.

+.png разбор: изменить параметр объекта ( chgOk ) - При нахождении всех объектов, изменить параметр объекта:

объект ( obj ) - этот объект меняет свой параметр;
свойство ( par ) - Параметр, который мы изменяем;
значение ( val ) - Новое значение параметра.

+.png нет предметов (при создании из динамического конфига) ( nstNoObjects ) - при загрузке локации без хидден-объектов (например не подтянулся пак либо нет локализации) перевести объект в новое состояние:

объект ( obj ) - Перевести объект в состояние из следующего поля;
состояние ( st ) - Новое состояние для объекта из предыдущего поля.

+.png не успел: если был экран ( wscrOv ) - Если вышло время, а объекты не найдены, переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен:

был экран ( was ) - Экран, который мы проверяем на то, был ли он уже открыт хотя бы один раз;
перейти на ( scr ) - Переходим на этот экран, если экран из предыдущего поля уже открывался.

+.png не успел: изменить состояние объекта ( nstOv ) - Если вышло время, а объекты не найдены, перевести объект в новое состояние:

объект ( obj ) - перевести объект в состояние из следующего поля;
состояние ( st ) - Новое состояние для объекта из предыдущего поля.

+.png не успел: изменить параметр объекта ( chgOv ) - Если вышло время, а объекты не найдены, изменить параметр объекта:

объект ( obj ) - этот объект меняет свой параметр;
свойство ( par )- Параметр, который мы изменяем;
значение ( val ) - Новое значение параметра.

+.png счетчик очков ( scoreCnt ):

счетчик ( cnt ) - Каунтер, которому приходят очки.

+.png группа extra bonus ( extraBonus ). Используется для economics, при нахождении объекта с некой вероятностью может выпасть бонус. Объект который анимирует появление бонуса должен иметь состояние show, время на анимацию бонуса - 10 секунд:

монетки объект ( coinsObj ) - объект который анимирует получение монет;
монетки вероятность ( coinsProb ) - вероятность по нахождению объекта получить дополнительно монетки;
опыт объект ( expObj ) - объект который анимирует получение опыта;
опыт вероятность ( expProb ) - вероятность по нахождению объекта получить дополнительно опыт;
энергия объект ( energyObj ) - объект который анимирует получение энергии;
энергия вероятность ( energyProb ) - вероятность по нахождению объекта получить дополнительно энергию.

+.png Объект, который срабатывает, если долго не находить хидден ( notfnd ):

объект ( obj ) - Объект, который переводится в указанное состояние, если долго не находить хидден;
состояние ( st ) - Состояние, в которое переводится объект;
время ( tm ) - Время от последнего нахождения хиддена, после которого срабатывает объект.

+.png параметры аномалии с исчезновением букв ( hlPars ):

оставшиеся буквы ( min ) - Минимальное количество оставшихся букв в предложении;
задержка ( wait ) - Момент времени, начиная с которого аномалия будет проявляться;
задержка 2 ( wait2 ) - Задержка для появившихся слов, изначально недоступных;
время ( time ) - Время, за которое должны исчезнуть все буквы (если -1, то до конца времени в хиддене);
промежутки ( dt ) - промежутки времени между каждой итерацией;
флайер ( fl ) - Флайер, анимирующий исчезающую букву (должен иметь текстовый тип).

+.png параметры аномалии ночь ( nightPars ):

effect ( ef ) - эффект, управляющий трансформацией цвета;
tag ( eftag ) - Тег эффекта, реализующего ночь.

+.png параметры аномалии трансформации цвета ( colInvPars ):

effect ( ef ) - Эффект, управляющий трансформацией цвета;
tags ( eftags ) - Теги эффектов, реализующих трансформацию цвета, из которых будет выбран один.

+.png параметры аномалии дым ( smokePars ):

effect ( ef ) - Машина, управляющая эффектом дыма;
tag ( eftag ) - Тег эффекта, реализующего дым.

Все аномалии кроме текстовой должны быть настроены с помощью объекта Effect

Get Started

Минимальный набор ресурсов:

  • Фоновая картинка для поисковой сцены
  • Комплект картинок, с которых будут сделаны поисковые объекты
  • Текстовые объекты для идентификации спрятанных объектов

Минимальный набор объектов редактора:

  • Image который будет изменен в хидден-лист
  • Таблица в которой будут отображаться тексты/картинки (зависит от режима) спрятанных объектов.
  • По одному Image для каждого спрятанного объекта (будут созданы автоматически при добавлении картинок из базы ресурсов на сцену)

Наши действия:

  1. откроем редактор сцен и создадим новый проект,
  2. добавим новый экран с именем scrHList
  3. создадим в этом экране сцену stgHList
  4. перейдём в редактор ресурсов
    1. создаём папку HList
    2. добавим в ней картинку для фона и картинки для спрятанных объектов.
    3. выделим все картинки в дереве ресурсов и перенесем их на нашу сцену stgHList, при этом для каждой картинки автоматически создастся объект Image.
    4. закроем редактор ресурсов
  5. перейдём в редактор текстов
    1. создаём папку HListText
    2. добавим в нее текстовые объекты, по одному на каждый поисковый объект.
    3. сохраним внесенные изменения.
  6. перейдём в редактор сцен.
  7. создадим в сцене stgHList объект Table и назовем его HOT
    1. настроим размер и положение таблицы, согласно нашего дизайна
    2. установим параметры колонок = "50", колонок видно = "5", строчек = "5", строчек видно = "1" (таким образом в таблице будут отображаться 5 поисковых предметов, а максимальное количество объектов для поиска будет равно 250)
    3. установим параметры скорость листания = "650", добавлять по строкам = "0", центрировать = "растянуть", сдвигать ячейки при удалении ="да"
  8. создадим в сцене stgHList объект HiddenList, напоминаем что его размер и положение на сцене не имеют значения, по этому расположим его где-нибудь за границей экрана.
    Важно В дереве проекта хидден-лист должен быть ниже всех своих поисковых объектов.
    1. в поле таблица указываем нашу HOT
    2. установим параметр объектов = "10"
    3. установим параметр пропадание объектов = "да"
    4. установим параметр реагировать на отпускание = "да"
    5. установим параметр реагировать на невидимые = "нет"
    6. установим параметр набор = "1"
  9. Настроим объекты, которые будут прятаться. Для этого выделим картинки поисковых объектов, добавленные нами ранее, и изменим им тип на "hiddenObject". Оставляя группу этих объектов выделенной, настроим им параметры:
    1. в поле list укажем наш HiddenList
    2. параметр набор = "1"
    3. Теперь снимаем выделение и каждому объекту в поле текстID перетаскиваем мышкой соответствующий текстовый объект из текстовой базы (поле текстID должно быть активно для редактирования - по нему нужно кликнуть мышкой)
  10. сохраним проект
  11. запустим вьювер

Динамический HG

Функционал позволяет генерировать HL самостоятельно HO объекты из файла конфига.

П.С. - вся графика д.б. динамической. Данные файлы может создавать HO_Manager Wiki HO_manager Документ по динамических пакам

D485ecbbbb.jpg
  • файл уровня ( configFile) — указываем путь к файлу конфигу, где перечисляем файлы с HG.
  • список графических ресурсов — служебное, пока не используется;
  • список текстовых ресурсов — служебное, пока не используется;
  • номер уровня ( hiddenLevelNum ) — номер уровня из файла;
  • образец хиддена ( hiddenTemplate ) — obj_id HO объект, должен иметь нужные параметры (остальные возьмутся из конфига) ;
  • образец нашлёпки ( hiddenPatchTempl ) — obj_id нашлёпки на HO объект, должна иметь нужные параметры (остальные возьмутся из конфига);
  • корневой объект ( hiddenRoot ) — obj_id корневого объект в который сложим всех клонов;
  • точечный спецэффект ( hiddenEffect ) — ;
  • фоновый объект ( hiddenBG ) — obj_id объекта которому поменяем ресурс;

Требования, вся графика HO,BG отрисовывается без учёта пивоты;

Файлы конфиги имеют вид: Файл уровня имеет вид:

  {
     "levels": [
        {
           "file": "ViewerFiles/DynHid/hidden0.cfg",
           "pack":3
        }
     ]
  }
Где "levels" - линки на файлы уровней.
"file" - путь к файлу;
"pack" - пак в который попадут ресурсы;


Файл конкретного уровня имеет вид:

  {
     "bg": {
        "src": "bg.png",
        "w": 2048,
        "h": 1151,
        "id": 16,
        "color": "#ffffff",
        "tile": ""
     },
     "hiddens": [
        {
           "id": 1022,
           "nm": "bucket_01",
           "res": 129,
           "bg": 666,
           "rect": {
              "x": 1393,
              "y": 653,
              "w": 115,
              "h": 137
           },
           "objs": [{
              "res": 1488,
              "rect": {
                 "x": 1393,
                 "y": 653,
                 "w": 115,
                 "h": 137
              }
           }],
        }, 
        {
           "x": 1537,
           "y": 409,
           "id": 1023,
           "res": 329,
           "nm": "bucket_02",
           "rect": {
              "x": 1493,
              "y": 366,
              "w": 81,
              "h": 87
           }
        }
     ],
     "res": {
        "images": [16, 129, 1488, 329],
        "texts": [1022, 1023],
        "sounds": [],
     }
  }
Где "bg" - настройки фона.
"src" - сорс графического файла в ресурсной базе;
"color" - цвет которым будет залито под фоном, нужное если фон имеет дырки;
"tile" - тайлинг фона;
"id" - id ресурса из ресурсной базы;
"hiddens" - перечень HO с их настройками
"id" - TxtId;
"nm" - имя HO;
"res" - графический ресурс HO;
"bg" - графический ресурс тени;
"rect" - настройки "res";
"x" - координата x, в координатах корневого объекта;
"y" - координата y, в координатах корневого объекта;
"w" - ширина;
"h" - высота;
"objs" - перечень нашлёпок;
"res" - графический ресурс нашлёпки;
"rect" - настройки графического ресурса нашлёпки;
"x" - координата x, в координатах HO;
"y" - координата y, в координатах HO;
"w" - ширина;
"h" - высота;
"res" - ресурсы которые входят в пак уровня ( будут вырезаны при экспорте в пак уровня)
"images" - перечень графических ресурсов
"texts" - перечень текстовых ресурсов
"sounds" - перечень звуковых ресурсов

Кроссворд

Данный функционал базируется на динамических HG и настраивается в файле динамического уровня.

Мода 2 - слова с мусором

Crossword mode2.jpg

Данная мода представляет собой HO объекты и текстовую таблицу, при нахождении предмета, в текстовой таблице подсвечиваются буквы слова.

Настройка в HiddenList указывается в теге кроссворд - мода 2 - слова с мусором (_G_17):

  • режим кроссворда (cwon) - использовать/не использовать режим;
  • подуровень (sub_level) - подуровень;
  • root (cw2root) - родитель текстового поля, координаты будут установлены согласно параметрам "x","y";
  • text (cw2text) - линк на текстовый объект, в котором будем отображать текстовое поле;
  • цвет найденных (colorFound) - цвет букв найденных слов в нашем текстовом поле;

Файл конкретного уровня имеет вид:

  {
     ...
     "hiddens": [ ... ],
     "res": {
        "images": [16, 129, 1488, 329],
        "texts": [1022, 1023],
        "sounds": [],
     },
     "mode2" : {
        "en" : [
           {
              "ids" : [ 3032, 4480, 4491, 4493, 4494, 4499 ],
              "nm" : "0001_06",
              "num" : 6,
              "numvis" : 9,
              "rect_field" : {
                 "h" : 1151,
                 "w" : 1534,
                 "x" : -768,
                 "y" : -575
              },
              "rect_text" : {
                 "h" : 462,
                 "w" : 414,
                 "x" : -682,
                 "y" : -300
              },
              "string_check" : "XObatHWZIF|RJLhacksaw|QVPNsaddle|AECGDaxeYU|doveSlante|rnBMTKGEAQ",
              "string_display" : "XOBATHWZIF|RJLHACKSAW|QVPNSADDLE|AECGDAXEYU|DOVESLANTE|RNBMTKGEAQ",
              "x" : -475,
              "y" : -69
           },
           {
              "ids" : [ 4485, 4487, 4490, 4495, 4502, 17112 ],
              "nm" : "0002_06",
              "num" : 6,
              "numvis" : 9,
              "rect_field" : {
                 "h" : 1151,
                 "w" : 1534,
                 "x" : -768,
                 "y" : -575
              },
              "rect_text" : {
                 "h" : 462,
                 "w" : 412,
                 "x" : -681,
                 "y" : -300
              },
              "string_check" : "FskatesNTH|ALMboomera|ngWERODrad|ioSKBZoarP|tableGball|oonJXCUIYV",
              "string_display" : "FSKATESNTH|ALMBOOMERA|NGWERODRAD|IOSKBZOARP|TABLEGBALL|OONJXCUIYV",
              "x" : -475,
              "y" : -69
           }
        ],
        "ru" : [
           {
              "ids" : [ 4481, 4485, 4490, 4495, 4500, 4508 ],
              "nm" : "0001_06",
              "num" : 6,
              "numvis" : 9,
              "rect_field" : {
                 "h" : 1151,
                 "w" : 1534,
                 "x" : -768,
                 "y" : -575
              },
              "rect_text" : {
                 "h" : 462,
                 "w" : 412,
                 "x" : -681,
                 "y" : -300
              },
              "string_check" : "ЕконькиМЭк|олокольчик|ХАрадиоШве|слоВбабочк|аЖИЛкастрю|ляУЯРТНСКЮ",
              "string_display" : "ЕКОНЬКИМЭК|ОЛОКОЛЬЧИК|ХАРАДИОШВЕ|СЛОВБАБОЧК|АЖИЛКАСТРЮ|ЛЯУЯРТНСКЮ",
              "x" : -475,
              "y" : -69
           },
           {
              "ids" : [ 3053, 4480, 4487, 4494, 4502, 4507 ],
              "nm" : "0002_06",
              "num" : 6,
              "numvis" : 9,
              "rect_field" : {
                 "h" : 1151,
                 "w" : 1534,
                 "x" : -768,
                 "y" : -575
              },
              "rect_text" : {
                 "h" : 462,
                 "w" : 412,
                 "x" : -681,
                 "y" : -300
              },
              "string_check" : "ШЩЧУГЮДзве|здаНОМТЕХб|умерангИЪс|толЗЖЪбита|УфонарьЮпо|дарокХПЭБТ",
              "string_display" : "ШЩЧУГЮДЗВЕ|ЗДАНОМТЕХБ|УМЕРАНГИЪС|ТОЛЗЖЪБИТА|УФОНАРЬЮПО|ДАРОКХПЭБТ",
              "x" : -475,
              "y" : -69
           }
   	]
  }
где "mode2" - настройки моды 2;
"en", "ru" - языковые локали;
"ids" - массив textID активных HO;
"nm" - имя уровня - для нашего удобства;
"num" - количество активных объектов == размеру массива ids;
"numvis" - количество всего объектов,используем для задания фоновых объектов (количество которых == numvis - num);
"rect_field" - ректангл активной зоны (пока не используется);
"rect_text" - ректангл текстового поля(пока не используется);
"string_check" - текстовое поле регистро-зависимое - для HL;
"string_display" - текстовое поле для отображения;
"x" - координата x родительского объекта для текста;
"y" - координата y родительского объекта для текста;

П.С. данную моду генерирует программа HGcrossword (https://docs.google.com/document/d/1RXSNUxNePF4qEibAPoCgfdiQycxoggc6Hu7a9VUjxSI/edit#)

Авто тест HL

Для запуска автотеста, нам нужно указать в app.icf параметры:

[GHiddenList]

HitTest - мода автотеста; (0- выкл.; 1 - разовая логика, пишется в файл раз в сессию для одного хидден листа ; 2 - при каждом init любого хидн листа дописывается статистика в файл);
HitTestDx = 5 - шаг с которым проходит автокликер по X;
HitTestDy = 5 - шаг с которым проходит автокликер по Y;

Для HitTest==2, очень помогает параметр "allow_background". Остаётся только написать скриптулину, которая ходит сама между экранами.

Пример

S:\!MOBILE\!!!EditorGames\Wiki_sample

HiddenList.rar