Форум

[MS] Инструкция по написанию презентаций  

  RSS
Doktor_e5
(@admin)
Уважаемый Игрок Admin

Сие писание есть не что иное, как справочный материал к написанию презентаций, адресованный начинающим мододелам. Ради наиболее корректного и полного вникания в нижеизложенное рекомендуется умение написания блоков операций и знание триггеров.

В общем случае презентация описывает интерфейс (ежели так понятнее, удобный (в идеале) инструмент взаимодействия игрока с игрой), неплохим примером тому может послужить презентация "game_custom_battle_designer", каковая описывает интерфейс настройки быстрой битвы (пункт в главном меню), и может состоять из фона и объектов именуемых overlay. Overlay бывают: строки текста, модели, различные кнопки, слайдеры (в вышеозначенном интерфейсе настройки быстрой битвы используются для выбора количества войск и процента родов войск), переключатели (там же служит для выбора героев и места битвы), окошки ввода.
Теперече надобно всего-ничего - разобраться как же ж всё-таки можно подключить эти overlay к своей презентации, но сначала...

Структура презентации


Структура записи презентации такова:

("identifier", flags, background_mesh_identifier,
 [
  list_of_simple_triggers
 ]
),

Где:
  identifier - уникальный идентификатор презентации, используется в операторах вызова и проверки презентации.
  flags - список флагов, разделяемых символами '|', или без флагов (0). Имеется всего два флага, назначение которых от меня, к сожалению ускользает (поэтому, ежели кто-нибудь на этот счёт просвещён, расскажите пожалуйста).
  background_mesh_identifier - идентификатор модели для фона (заднего плана) из файла mesh, или без фона (0).
  list_of_simple_triggers - здесь можно писать простые триггеры (события), действующие во время работы презентации. Время срабатывания триггера может быть:
    ti_on_presentation_load  = -60.0 (срабатывание в первую очередь, при загрузке презентации)
    ti_on_presentation_run   = -61.0 (работает во время работы презентации)
    ti_on_presentation_event_state_change = -62.0 (при воздействии со стороны игрока на overlay у которого это предусмотрено (нажатие кнопок, подвигание бегунков на слайдерах...) принимает идентификатор затронутого overlay первым параметром и значение отражающее проделанное действие - вторым (подробнее будет описано далее)),
    ti_on_presentation_mouse_enter_leave  = -63.0 (при выходе\входе курсора за\в границы overlay, идентификатор коего принимает первым параметром, второй параметр - 0 или 1, вход или выход соответственно),
    ti_on_presentation_mouse_press = -64.0 (при нажатии кнопки мыши (второй параметр - левая (0)\правая (1)\колёсико (2)), первый параметр опять-таки идентификатор объекта).

Операнды, связанные непосредственно с презентациями


Далее рассмотрим операции, связанные непосредственно с презентациями и их overlay'ями, а также способы управления оными.

(start_presentation, <presentation_id>), # запуск указаной презентации. Запуск на глобальной карте останавливает все процессы на карте, возможен запуск из блока последствий диалога с "close_window" (в сценах используются презентации без фона (для корректного завершения)).

(presentation_set_duration, <duration-in-1/100-seconds>), # устанавливает продолжительность презентации (именно продолжительность, а не сброс таймера, т. е. такая презентация

("test", 0, 0,
 [
...
  (-61,
   [
    (presentation_set_duration, 100),
   ]
  ),

 ]
),

не будет работать постоянно, но вырубится после первой же секунды, как и полагается.

(is_presentation_active, <presentation_id), # проверка соответствия переданного значения идентификатору текущей презентации (т. е. последняя не выключенная)

(create_text_overlay, <destination>, <string_id>, flags), # создаёт overlay в виде текста из <string_id> и сохраняет идентификатор созданного в <destination> (здесь и далее аргумент, подписанный destination, служит для сохранения в него возвращаемого значения), flags - необязательный аргумент, можно употреблять флаги (конечно, хоть флаги и можно комбинировать, всё же при этом стоит руководствоваться элементарной логикой, так, например, совсем ни к чему употреблять больше одного флага из первых трёх за раз):
  tf_left_align - ровняем по левому краю (ежели конкретнее, то определяет место которым overlay будет привязан к своему месту размещения)
  tf_right_align - а это по краю правому
  tf_center_justify - горизонтальное центрирование
  tf_double_space - увеличенный междустрочный интервал
  tf_vertical_align_center - вертикальное центрирование
  tf_scrollable - с полосой прокрутки
  tf_single_line - ?
  tf_with_outline - у букв всегда будет тёмный контур
  tf_scrollable_style_2 - ну, короче, понятно

(create_mesh_overlay, <destination>, <mesh_id>), # создаёт overlay ввиде модели <mesh_id>.

(create_button_overlay, <destination>, <string_id>), # создаёт overlay-кнопку ввиде строки <string_id>. В общем случае управление заключается в следующем: при нажатии на кнопку срабатывает триггер -62, стало быть, дабы отследить тот факт, что нажата именно эта кнопка, надобно переписать её идентификатор (без этого можно обойтись, ежели идентификатор, каковой представляет собой не что иное как номер overlay по порядку создания (начиная с нуля), заранее известен) в глобальное по отношению к триггерам презентации хранилище (глобальная переменная\регистр\слот) и написать в триггере -62 проверку на соответствие (идентификатор затронутого overlay - это первый параметр) с последующими последствиями.

(create_image_button_overlay, <destination>, <mesh_id_1>, <mesh_id_2>), #создаёт стилизованную overlay-кнопку, <mesh_id_1> - модель кнопки в спокойствии, <mesh_id_2> - модель нажатой кнопки.

(create_slider_overlay, <destination>, <min_value>, <max_value>), # создаёт overlay-слайдер, последние два аргумента - максимальное и минимальное значения, соответствующие первой и последней позициям для бегунка. В получении текущего значения положения бегунка помогает всё тот же -62 (второй параметр отражает значение соответствующее положению бегунка, может лежать на промежутке [<min_value>; <max_value>]), при этом, поскольку,  некоторые изменения экрана предпочтительней производить перезагружая презентацию (созданные overlay не удалить (разве что вы будете их прятать)), надобно схоронять положение бегунка в глобальное хранилище.

(create_progress_overlay, <destination>, <min_value>, <max_value>), # по сути это тот же слайдер, только от начала к бегунку тянется полоса.

(create_combo_button_overlay, <destination>), # создаёт переключатель ввиде выпадающего меню. Варианты его положения добавляются через операцию overlay_add_item, состояние отслеживает -62 (второй параметр - порядковый номер положения (начиная с нуля)).

(create_text_box_overlay, <destination>), # создаёт красивое overlay-окошко для ввода текста (textbox). Как это происходит: нажимаем на окошко, пишем текст, нажимаем вне окошка или enter причём текст с окошка отправляется в s0, а затем срабатывает наш доблестный -62.

(create_check_box_overlay, <destination>, <mesh_id_1>, <mesh_id_2>), # переключатель с двумя положениями (первое положение (отражённое <mesh_id_1>) даёт 0 вторым параметром в -62, второе положение (<mesh_id_2>) - 1). Стандартное окошко с галочкой:
(create_check_box_overlay, reg1, "mesh_checkbox_off", "mesh_checkbox_on").

(create_simple_text_box_overlay, <destination>), # создаёт компактное overlay-окошко для ввода текста.

(create_game_button_overlay, <destination>, <string_id>), # стандартная кнопка

(create_in_game_button_overlay, <destination>, <string_id>), # ещё одна стандартная кнопка

(create_number_box_overlay, <destination>, <min_value>, <max_value>), # создаёт окошко для ввода числа с двумя корректирующими кнопками, <max_value> не входит в область значений. Работает по аналогии с окошками для ввода текста, токмо введённое отправляется не в регистр, а сохраняется в -62 как второй параметр.

(create_listbox_overlay, <destination>), # создаёт listbox из строк, добавляемых операцией overlay_add_item.

(create_combo_label_overlay, <destination>), # вот это, как раз, тот тип переключателя, что использовался в настройках быстрой битвы для выбора персонажа. Управление по аналогии с вышеупомянутым выпадающим меню.

(create_mesh_overlay_with_item_id, <destination>, <item_id>), # создаёт overlay модели <item_id> (предмет, оружие, броня...).

(create_mesh_overlay_with_tableau_material, <destination>, <mesh_id>, <tableau_material_id>, <value>), # создаёт overlay-модель обработанную скриптом сменной текстуры. <value> - отправляется скрипту сменной текстуры и сохраняется в нём первым параметром. Я ещё с этим поразбираюсь. А вот пример, который отобразит вашего героя во всём, что на него напялено: (create_mesh_overlay_with_tableau_material, ":unused", -1, "tableau_game_character_sheet", "trp_player"),.

(create_image_button_overlay_with_tableau_material, <destination>, <mesh_id>,<tableau_material_id>, <value>), # аналогично create_mesh_overlay_with_tableau_material, но кнопка.

(overlay_set_text, <overlay_id>, <string_id>), # заменяет текст overlay'я на <string_id>.

(overlay_set_val, <overlay_id>, <value>), # используется для установки положения переключателя, бегунка на слайдере или числа в числовом окошке ввода.

(overlay_add_item, <overlay_id>, <string_id>), # добавляет положение с надписью <string_id> к переключателю <overlay_id>.

(overlay_set_size, <overlay_id>, <position_no>), # устанавливает для overlay размер в соответствии с величинами х и у координат из <position_no>. Примечательно, что на что-то она воздействует, а на что-то нет, так, например, в стандартных кнопках (их тут две) меняется только текст, а окошко ввода числа вообще не изменяет своих размеров.

(overlay_set_position, <overlay_id>, <position_no>), # устанавливает <overlay_id> в позицию описанную х и у координатами из <position_no> делёнными на установленный множитель (set_fixed_point_multiplier, <value>), (нужно, поскольку размер экрана презентации = 1(х) × 0,75(у), в то время, как операции не приемлют дробных чисел).

(overlay_set_mesh_rotation, <overlay_id>, <position_no>), # поворачивает модель в соответствии с <position_no>.

(overlay_set_color, <overlay_id>, <color>), # устанавливает для текста цвет (это может быть текст кнопки, переключателя или стилизованного окошка ввода). <color> - шестизначное шестнадцатеричное число вида 0xRRGGBB (где RR - красный, GG - зелёный, а BB - синий). Не работает для моделей.

(overlay_set_alpha, <overlay_id>, <alpha>), # устанавливает для overlay альфа-канал (прозрачность). <alpha> - двузначное шестнадцатеричное число. Не работает для моделей.

(overlay_animate_to_color, <overlay_id>, <duration-in-1/1000-seconds>, <color>), # анимированый аналог overlay_set_color.

(overlay_animate_to_alpha, <overlay_id>, <duration-in-1/1000-seconds>, <color>), # анимированый аналог overlay_set_alpha.

(overlay_set_hilight_color, <overlay_id>, <color>), # похоже влияет на освещение конкретной модели, изменяя его (освещения) цвет. Может оно и не так работает, но смотрится примерно так... Красиво, блин, смотрится...

(overlay_set_hilight_alpha, <overlay_id>, <alpha>), # а вот альфаканал для моделей несколько разочаровывает...

(overlay_animate_to_highlight_color, <overlay_id>, <duration-in-1/1000-seconds>, <color>), # анимированый аналог overlay_set_hilight_color.

(overlay_animate_to_highlight_alpha, <overlay_id>, <duration-in-1/1000-seconds>, <color>), # анимированый аналог overlay_set_hilight_alpha.

(overlay_animate_to_size, <overlay_id>, <duration-in-1/1000-seconds>, <position_no>), # анимированый аналог overlay_set_size

(overlay_animate_to_position, <overlay_id>, <duration-in-1/1000-seconds>, <position_no>), # анимированый аналог overlay_set_position

(overlay_get_position, <destination>, <overlay_id>), # получает позицию overlay'я, умноженую на установленый множитель.

(overlay_set_display, <overlay_id>, <value>), # показывает/скрывает overlay (1 = показывать, 0 = скрывать)

(overlay_obtain_focus, <overlay_id>), # устанавливает курсор (не стрелку, а палку (надеюсь получилось достаточно понятно)) в окошко ввода текста (не числа), т. е. курсор для клавиатурного ввода может быть установлен в окошко нажатием в него, либо через эту операцию. Говоря по научному, устанавливает фокус на <overlay_id>.

(overlay_set_tooltip, <overlay_id>, <string_id>), # добавляет к <overlay_id> подсказку <string_id>, всплывающий всякий раз при задержании на overlay курсора.

(overlay_set_boundaries, <overlay_id>, <min_value>, <max_value>), # Изменяет границы для <overlay_id>, который имеет их.

(overlay_set_area_size, <overlay_id>, <position_no>), # Определяет текущую область на экране, которая используется для отображения <overlay_id>. Если размер <overlay_id> больше, чем размер площади, то создадутся области прокрутки с соответствующими полосами прокрутки. Оператор может быть использован для создания полос прокрутки для большого текста или для прокручиваемых контейнеров, которые имеют много дочерних элементов.

(show_item_details, <item_id>, <position_no>, <price_multiplier_percentile>), # Показывает всплывающее окно, в указанной позиции, содержащее стандартные игровые сведения для указанной вещи. Последний параметр определяет процентный множитель для цены. Множитель со значением 100 соответствует стандартной цене, значение 0 будет отображать "Default пункт" вместо цены (используется в мультиплеерной презентации выбора шмоток). Одновременно можно вызвать только одну такую панель (при вызове предыдущая панель скрывается).

(show_item_details_with_modifier, <item_id>, <item_modifier>, <position_no>, <show_default_text_or_not>), # То же самое, но отображает статы и цену для предмета с модификатором.

(close_item_details), # Закрывает всплывающее окно с информацией о предмете.

(show_object_details_overlay, <value>), # устанавливает показывать (1) или не показывать (0) item_details и tooltip'ы.

(set_container_overlay, <overlay_id>), # Определяет указанный <overlay_id> в качестве контейнера. Все новые overlays будут размещены внутри контейнера, и их координаты будут основаны на позиции контейнера. Все контейнеры с их содержимым будет отображаться *выше* любых не-контейнерных overlays. Используйте -1, чтобы остановить размещения overlays на текущем контейнере и возобновить нормальное поведение.

Есть ещё операции с которыми я пока не разбирался, но собираюсь как-нибудь это сделать:
(start_background_presentation, <presentation_id>),
(overlay_set_container_overlay, <overlay_id>, <container_overlay_id>),
(overlay_set_additional_render_height, <overlay_id>, <height_adder>),

Примеры


И в довершение пара небольших и, надеюсь, лёгких для понимания примеров презентаций.

("test_2", 0, mesh_load_window,
 [

  (ti_on_presentation_load,
   [
    (presentation_set_duration, 999999),
    (set_fixed_point_multiplier, 1000), # mnozhitel dlya koordinat pozitcij
    (assign, ":position", 0),
    (try_begin),
     (eq, reg1, 0), # reg1 ispolzovan dlya identifikacii sostojyaniya prezentacii
     (create_text_overlay, ":unused", "@Vnimanie! Opros!^^Vash polcovodetc zhelaet^^ vuyavit prichinu nedovolnuh nastroenij v svoej armii^^ i v svyzi s etim provodit opros.", tf_center_justify), # overlay number 0
     (position_set_x, ":position", 500),
     (position_set_y, ":position", 570),
     (overlay_set_position, 0, ":position"),
     (create_text_box_overlay, ":unused"), # overlay number 1
     (position_set_x, ":position", 300),
     (position_set_y, ":position", 500),
     (overlay_set_position, 1, ":position"),
     (overlay_set_text, 1, "@vpishite vashe imya"),
     (create_text_overlay, ":unused", "@vasha dolzhnost:"), # overlay number 2
     (position_set_y, ":position", 450),
     (overlay_set_position, 2, ":position"),
     (create_combo_button_overlay, ":unused"), # overlay number 3
     (position_set_y, ":position", 400),
     (overlay_set_position, 3, ":position"),
     (overlay_add_item, 3, "@<dolzhnost>"),
     (overlay_add_item, 3, "@soldat"),
     (overlay_add_item, 3, "@rutsar"),
     (overlay_add_item, 3, "@markitantka"),
     (overlay_add_item, 3, "@hodytcij pevun"),
     (overlay_add_item, 3, "@drugoe"),
     (create_text_overlay, ":unused", "@vash pol:"), # overlay number 4
     (position_set_y, ":position", 350),
     (overlay_set_position, 4, ":position"),
     (create_combo_label_overlay, ":unused"), # overlay number 5
     (position_set_y, ":position", 300),
     (overlay_set_position, 5, ":position"),
     (overlay_add_item, 5, "@<pol>"),
     (overlay_add_item, 5, "@muzhskoj"),
     (overlay_add_item, 5, "@zhenskij"),
     (overlay_add_item, 5, "@bez pola"),
     (create_game_button_overlay, ":unused", "@Gotovo"), # overlay number 6
     (position_set_x, ":position", 650),
     (position_set_y, ":position", 400),
     (overlay_set_position, 6, ":position"),
    (else_try),
     (eq, reg1, -1), # vtoroj ekran
     (create_text_overlay, ":unused", "@{reg2?{reg5?Uvazhaemoe:Uvazhaemaya}:Uvazhaemuj} {s1} {s0},^^dovolnu li vu svoim zhalovanien?", tf_center_justify), # overlay number 0
     (position_set_x, ":position", 400),
     (position_set_y, ":position", 600),
     (overlay_set_position, 0, ":position"),
     (create_game_button_overlay, ":unused", "@Da"), # overlay number 1
     (position_set_x, ":position", 250),
     (position_set_y, ":position", 250),
     (overlay_set_position, 1, ":position"),
     (create_game_button_overlay, ":unused", "@Net"), # overlay number 2
     (position_set_x, ":position", 850),
     (position_set_y, ":position", 250),
     (overlay_set_position, 2, ":position"),
    (else_try), # tretij ekran
     (create_text_overlay, ":unused", "@Chto vu, mu i ne somnevalis.", tf_center_justify), # overlay number 0
     (position_set_x, ":position", 500),
     (position_set_y, ":position", 600),
     (overlay_set_position, 0, ":position"),
     (create_game_button_overlay, ":unused", "@Zavershit"), # overlay number 1
     (position_set_y, ":position", 300),
     (overlay_set_position, 1, ":position"),
    (try_end),
   ]
  ),

  (ti_on_presentation_event_state_change,
   [
    (store_trigger_param_1, ":object"),
    (store_trigger_param_2, ":value"),
    (try_begin),
     (eq, reg1, 0), # pervuj ekran
     (try_begin),
      (eq, ":object", 6),
      (try_begin),
       (this_or_next|eq, reg3, 0), # pole dolzhnosti ne zapolneno ili ->
       (eq, reg4, 0), # -> pole pola ne zapolneno
       (dialog_box,"@Snachala zapolnite vse polya."),
      (else_try),
       (assign, reg1, -1),
       (presentation_set_duration, 0), # v kupe so sleduyshim operatorom - perezagruzka prezentatcii
       (start_presentation, "prsnt_test_2"),
      (try_end),
     (else_try),
      (eq, ":object", 3),
      (try_begin),
       (eq, ":value", 1),
       (str_store_string, s1, "@soldat"),
       (assign, reg3, -1), # pole zapolneno
      (else_try),
       (eq, ":value", 2),
       (str_store_string, s1, "@rutsar"),
       (assign, reg3, -1),
      (else_try),
       (eq, ":value", 3),
       (str_store_string, s1, "@markitantka"),
       (assign, reg3, -1),
      (else_try),
       (eq, ":value", 4),
       (str_store_string, s1, "@hodytcij pevun"),
       (assign, reg3, -1),
      (else_try),
       (eq, ":value", 5),
       (str_store_string, s1, "@drugoe"),
       (assign, reg3, -1),
      (else_try),
       (assign, reg3, 0), # pole ne zapolneno
      (try_end),
     (else_try),
      (eq, ":object", 5),
      (try_begin),
       (neq, ":value", 0),
       (val_sub, ":value", 1),
       (assign, reg2, ":value"),
       (val_sub, ":value", 1),
       (assign, reg5, ":value"),
       (assign, reg4, -1),
      (else_try),
       (assign, reg4, 0),
      (try_end),
     (try_end),
    (else_try),
     (eq, reg1, -1), # vtoroj ekran
     (eq, ":object", 1),
     (assign, reg1, -2),
     (presentation_set_duration, 0),
     (start_presentation, "prsnt_test_2"),
    (else_try), # tretij ekran
     (eq, ":object", 1),
     (assign, reg1, 0), # obnulyaem registru po zaversheniu, chtobu potom ne udivlyatsy otkuda v nih takoe soderzhimoe
     (assign, reg2, 0),
     (assign, reg3, 0),
     (assign, reg4, 0),
     (assign, reg5, 0),
     (str_clear, s1),
     (presentation_set_duration, 0),
    (try_end),
   ]
  ),

  (ti_on_presentation_mouse_enter_leave,
   [
    (store_trigger_param_1, ":object"),
    (store_trigger_param_2, ":value"),
    (eq, reg1, -1),
    (set_fixed_point_multiplier, 1000),
    (eq, ":object", 2),
    (eq, ":value", 0),
    (assign, ":position", 0),
    (assign, ":x", 0),
    (assign, ":y", 0),
    (overlay_get_position, ":position", 2),
    (position_get_x, ":x", ":position"),
    (position_get_y, ":y", ":position"),
    (store_random_in_range, ":gear", 0, 2),
    (try_begin),
     (eq, ":gear", 0),
     (ge, ":x", 100),
     (val_sub, ":x", 50),
     (store_random_in_range, ":x", 50, ":x"),
    (else_try),
     (le, ":x", 900),
     (val_add, ":x", 50),
     (store_random_in_range, ":x", ":x", 950),
    (else_try),
     (val_sub, ":x", 50),
     (store_random_in_range, ":x", 50, ":x"),
    (try_end),
    (store_random_in_range, ":gear", 0, 2),
    (try_begin),
     (eq, ":gear", 0),
     (ge, ":y", 100),
     (val_sub, ":y", 50),
     (store_random_in_range, ":y", 50, ":y"),
    (else_try),
     (le, ":y", 600),
     (val_add, ":y", 50),
     (store_random_in_range, ":y", ":y", 650),
    (else_try),
     (val_sub, ":y", 50),
     (store_random_in_range, ":y", 50, ":y"),
    (try_end),
    (position_set_x, ":position", ":x"),
    (position_set_y, ":position", ":y"),
    (overlay_animate_to_position, 2, 50, ":position"),
   ]
  ),

 ]
),

Вот такая вот мини-презентация, она вполне рабочая, можете сами в этом убедиться запустив её (только перед запуском лучше будет обнулить её регистры, которые могут проверяться до перезаписи (мало-ли что в них будет лежать на момент запуска(посему желательно использовать регистры только на непродолжительное хранение и обнулять их по окончанию использования)):

(assign, reg1, 0),
(assign, reg2, 0),
(assign, reg3, 0),
(assign, reg4, 0),

Следующая презентация предоставляет возможность наглядно подобрать цвет по его RGB коду.

("color_test", 0, mesh_load_window,
 [
  (ti_on_presentation_load,
   [
    (presentation_set_duration, 999999),
    (set_fixed_point_multiplier, 100),
# store color code string
    (try_begin),
     (lt, reg1, 10),
     (str_store_string, s2, "@{reg1}"),
    (else_try),
     (try_begin),
      (eq, reg1, 10),
      (str_store_string, s2, "@A"),
     (else_try),
      (eq, reg1, 11),
      (str_store_string, s2, "@B"),
     (else_try),
      (eq, reg1, 12),
      (str_store_string, s2, "@C"),
     (else_try),
      (eq, reg1, 13),
      (str_store_string, s2, "@D"),
     (else_try),
      (eq, reg1, 14),
      (str_store_string, s2, "@E"),
     (else_try),
#      (eq, reg1, 15),
      (str_store_string, s2, "@F"),
     (try_end),
    (try_end),
    (try_begin),
     (lt, reg2, 10),
     (str_store_string, s1, "@{s2}{reg2}"),
    (else_try),
     (try_begin),
      (eq, reg2, 10),
      (str_store_string, s1, "@{s2}A"),
     (else_try),
      (eq, reg2, 11),
      (str_store_string, s1, "@{s2}B"),
     (else_try),
      (eq, reg2, 12),
      (str_store_string, s1, "@{s2}C"),
     (else_try),
      (eq, reg2, 13),
      (str_store_string, s1, "@{s2}D"),
     (else_try),
      (eq, reg2, 14),
      (str_store_string, s1, "@{s2}E"),
     (else_try),
#      (eq, reg2, 15),
      (str_store_string, s1, "@{s2}F"),
     (try_end),
    (try_end),
    (try_begin),
     (lt, reg3, 10),
     (str_store_string, s3, "@{reg3}"),
    (else_try),
     (try_begin),
      (eq, reg3, 10),
      (str_store_string, s3, "@A"),
     (else_try),
      (eq, reg3, 11),
      (str_store_string, s3, "@B"),
     (else_try),
      (eq, reg3, 12),
      (str_store_string, s3, "@C"),
     (else_try),
      (eq, reg3, 13),
      (str_store_string, s3, "@D"),
     (else_try),
      (eq, reg3, 14),
      (str_store_string, s3, "@E"),
     (else_try),
#      (eq, reg3, 15),
      (str_store_string, s3, "@F"),
     (try_end),
    (try_end),
    (try_begin),
     (lt, reg4, 10),
     (str_store_string, s2, "@{s3}{reg4}"),
    (else_try),
     (try_begin),
      (eq, reg4, 10),
      (str_store_string, s2, "@{s3}A"),
     (else_try),
      (eq, reg4, 11),
      (str_store_string, s2, "@{s3}B"),
     (else_try),
      (eq, reg4, 12),
      (str_store_string, s2, "@{s3}C"),
     (else_try),
      (eq, reg4, 13),
      (str_store_string, s2, "@{s3}D"),
     (else_try),
      (eq, reg4, 14),
      (str_store_string, s2, "@{s3}E"),
     (else_try),
#      (eq, reg4, 15),
      (str_store_string, s2, "@{s3}F"),
     (try_end),
    (try_end),
    (try_begin),
     (lt, reg5, 10),
     (str_store_string, s4, "@{reg5}"),
    (else_try),
     (try_begin),
      (eq, reg5, 10),
      (str_store_string, s4, "@A"),
     (else_try),
      (eq, reg5, 11),
      (str_store_string, s4, "@B"),
     (else_try),
      (eq, reg5, 12),
      (str_store_string, s4, "@C"),
     (else_try),
      (eq, reg5, 13),
      (str_store_string, s4, "@D"),
     (else_try),
      (eq, reg5, 14),
      (str_store_string, s4, "@E"),
     (else_try),
#      (eq, reg5, 15),
      (str_store_string, s4, "@F"),
     (try_end),
    (try_end),
    (try_begin),
     (lt, reg6, 10),
     (str_store_string, s3, "@{s4}{reg6}"),
    (else_try),
     (try_begin),
      (eq, reg6, 10),
      (str_store_string, s3, "@{s4}A"),
     (else_try),
      (eq, reg6, 11),
      (str_store_string, s3, "@{s4}B"),
     (else_try),
      (eq, reg6, 12),
      (str_store_string, s3, "@{s4}C"),
     (else_try),
      (eq, reg6, 13),
      (str_store_string, s3, "@{s4}D"),
     (else_try),
      (eq, reg6, 14),
      (str_store_string, s3, "@{s4}E"),
     (else_try),
#      (eq, reg6, 15),
      (str_store_string, s3, "@{s4}F"),
     (try_end),
    (try_end),
# calculate color code
    (assign, reg7, reg6),
    (assign, ":overlay", reg5),
    (val_lshift, ":overlay", 4),
    (val_add, reg7, ":overlay"),
    (assign, ":overlay", reg4),
    (val_lshift, ":overlay", 8),
    (val_add, reg7, ":overlay"),
    (assign, ":overlay", reg3),
    (val_lshift, ":overlay", 12),
    (val_add, reg7, ":overlay"),
    (assign, ":overlay", reg2),
    (val_lshift, ":overlay", 16),
    (val_add, reg7, ":overlay"),
    (assign, ":overlay", reg1),
    (val_lshift, ":overlay", 20),
    (val_add, reg7, ":overlay"),
# print color code
    (assign, ":size", 0),
    (assign, ":position", 0),
    (position_set_x, pos1, 800),
    (position_set_y, pos1, 800),
    (create_text_overlay, ":unused", "@{s1}", tf_center_justify|tf_vertical_align_center),
    (overlay_set_size, 0, pos1),
    (position_set_x, ":position", 20),
    (position_set_y, ":position", 40),
    (overlay_set_position, 0, ":position"),
    (overlay_set_color, 0, reg7),
    (create_text_overlay, ":unused", "@{s2}", tf_center_justify|tf_vertical_align_center),
    (overlay_set_size, 1, pos1),
    (position_set_x, ":position", 50),
    (overlay_set_position, 1, ":position"),
    (overlay_set_color, 1, reg7),
    (create_text_overlay, ":unused", "@{s3}", tf_center_justify|tf_vertical_align_center),
    (overlay_set_size, 2, pos1),
    (position_set_x, ":position", 80),
    (overlay_set_position, 2, ":position"),
    (overlay_set_color, 2, reg7),
# buttons
    (assign, ":size", -5),
    (position_set_y, ":position", 60),
    (try_for_range, ":overlay", 3, 9),
     (val_add, ":size", 15),
     (position_set_x, ":position", ":size"),
     (create_game_button_overlay, ":unused", "@add"),
     (overlay_set_position, ":overlay", ":position"),
     (this_or_next|eq, ":overlay", 4),
     (eq, ":overlay", 6),
     (val_add, ":size", 5),
    (try_end),
    (assign, ":size", -5),
    (position_set_y, ":position", 20),
    (try_for_range, ":overlay", 9, 15),
     (val_add, ":size", 15),
     (position_set_x, ":position", ":size"),
     (create_game_button_overlay, ":unused", "@sub"),
     (overlay_set_position, ":overlay", ":position"),
     (this_or_next|eq, ":overlay", 10),
     (eq, ":overlay", 12),
     (val_add, ":size", 5),
    (try_end),
    (create_game_button_overlay, ":unused", "@exit"),
    (position_set_y, ":position", 10),
    (position_set_x, ":position", 70),
    (overlay_set_position, 15, ":position"),
   ]
  ),

  (ti_on_presentation_mouse_press,
   [
    (store_trigger_param_1, ":object"),
# find out color code change
    (try_begin),
     (eq, ":object", 3),
     (val_add, reg1, 1),
     (val_min, reg1, 15),
    (else_try),
     (eq, ":object", 4),
     (val_add, reg2, 1),
     (val_min, reg2, 15),
    (else_try),
     (eq, ":object", 5),
     (val_add, reg3, 1),
     (val_min, reg3, 15),
    (else_try),
     (eq, ":object", 6),
     (val_add, reg4, 1),
     (val_min, reg4, 15),
    (else_try),
     (eq, ":object", 7),
     (val_add, reg5, 1),
     (val_min, reg5, 15),
    (else_try),
     (eq, ":object", 8),
     (val_add, reg6, 1),
     (val_min, reg6, 15),
    (else_try),
     (eq, ":object", 9),
     (val_sub, reg1, 1),
     (val_max, reg1, 0),
    (else_try),
     (eq, ":object", 10),
     (val_sub, reg2, 1),
     (val_max, reg2, 0),
    (else_try),
     (eq, ":object", 11),
     (val_sub, reg3, 1),
     (val_max, reg3, 0),
    (else_try),
     (eq, ":object", 12),
     (val_sub, reg4, 1),
     (val_max, reg4, 0),
    (else_try),
     (eq, ":object", 13),
     (val_sub, reg5, 1),
     (val_max, reg5, 0),
    (else_try),
     (eq, ":object", 14),
     (val_sub, reg6, 1),
     (val_max, reg6, 0),
    (try_end),
    (try_begin),
     (eq, ":object", 15),
     (presentation_set_duration, 0),
    (else_try),
     (presentation_set_duration, 0),
     (start_presentation, "prsnt_color_test"),
    (try_end),
   ]
  ),
 ]
),

Благодарю за внимание всех соизволивших и надеюсь на комментарии и дополнения от более опытных, по рассматриваемой части, людей.

ОтветитьЦитата
Размещено : 30/05/2019 15:12
Теги темы
MS

Оставьте ответ


 
Поделиться:
  
Работает

Пожалуйста, Вход или Зарегистрироваться