-
Руководство по header_operations
Автор:Winter
Оригинал: http://mbx.streetofeyes.com/index.php/topic,898.0.html (http://mbx.streetofeyes.com/index.php/topic,898.0.html)
Устаревший и далеко не полный, но это фактически единственный развернутый мануал по командам.
Извините может перевод корявый :)
----
В этом руководстве я постараюсь кратко объяснить функцию каждой операции в header_operations.py, а иногда и добавить анекдоты моего собственного опыта к сложным или сложная операция.
Начиная с самого верха.
SCRIPT OPERATIONS
call_script
----
Эта операция звонки сценария кортежа из module_scripts.py. Эффективно работает этом все операции в сценарий, прежде чем продолжить путь операциях блока, в котором была использована call_script соч. Одним из наиболее универсальных и важных операций в модуле системы, могут быть использованы как для очень простой и очень продвинутые вещи.
Важно отметить, что локальные переменные, не переносятся в сценарий, и они не переносятся из сценария к любым блоком, из которого называют сценарием.
Вы можете кормить ввод в сценарий с помощью сценария параметров, которые могут быть любые численные запись, переменная или зарегистрируйтесь. Вы можете вводить до двух параметров сценария, просто набрав их после имени сценария. Посмотрите, как call_script используется в родном для примера о том, как это сделать. Или же вы можете использовать глобальные переменные или регистры, значения которых будет перенесен в и из сценариев.
Для сценария для вывода любой информации, он должен хранить значения одного или более глобальные переменные или регистрами.
end_try
----
Является устаревшим этой операции. Это означает, что он устарел и не может не поддерживаться в будущих версиях M & B. Вы должны использовать вместо try_end.
try_end
----
Эта операция завершает заявлением начала попробуйте по try_begin, try_for_range (_backwards), try_for_parties или try_for_agents.
try_begin
----
Эта операция открывает пытаются заявление. Попробуйте заявления удобно, потому что они позволяют использовать условия в них не завершив весь блок операций, если не-соответствия происходит.
Игнорируются Без попробовать заявления, если какое-либо условие работы в блоке (т.е. она входы не совпадают), является состав блока, и все дальнейшие операции в блоке. Однако в попытке заявлением, если условие операции не удается, не учитываются только те операции внутри пытаются заявление. Остальная часть блока продолжает работать как обычно после попытки заявления выполнено.
else_try_begin
----
Другие устаревшим операции. Вместо использования else_try.
else_try
----
Эта операция находится между стартером пытаются заявление и try_end и изменяет пытаются заявление. Если какой-либо условий эксплуатации, расположенных выше else_try сбой, else_try будет активирована, и игра начинает бежать все операции ниже else_try. Однако, если все операции в попытке заявление (или другой else_try) выше else_try удается, то else_try игнорируется, и пропускает игру прямо на следующий try_end.
Вы можете иметь несколько else_trys в одном заявлении попробовать. Они оцениваются сверху донизу, причем каждый else_try активация как один над ничего не получается. Как только все условия else_try успеха IIT затем будет переходить к следующему try_end.
try_for_range
----
Эта операция открывает цикл. Она требует, чтобы назначить более низкую оценку (начало местонахождения) и верхняя граница (окончание месте) за цикл. При запуске try_for_range будет петлю через каждые число от нижней границы и (верхняя граница-1).
Например, если нижняя граница равна 0 и верхняя граница 5, то try_for_range будет первая попытка запустить все свои операции в 0 (содержащийся в пункте назначения). Затем, когда закончите, как 0, она будет выполнять все операции снова как 1, а затем 2 и так далее. Пожалуйста, обратите внимание, колеблется в М & В не включая верхнюю границу - это означает, что в диапазоне от 0 до 5, последний номер он будет работать как 4. Берегитесь, чтобы вы правильно выбрать верхнюю границу.
Вы можете свободно изменять эту переменную использовать в try_for_range без изменения порядка или здоровья циклы. Вы также можете увеличить или уменьшить верхнюю границу, если переменная и скрипт будет держать работает, пока не достигнет модифицированной нижней или верхней границы. Тем не менее, не снижают верхнюю границу ниже текущего значения назначения переменной.
try_for_range_backwards
----
То же, что try_for_range, но вместо этого он начинает с (верхняя граница-1) и спускается к нижней границе.
try_for_parties
----
Открывает попробовать ведомость по каждому участнику по наземным карте.
try_for_agents
----
Открывает попробовать ведомость по каждому агенту по карте битвы.
store_script_param_1
----
Сохраняет значение первого параметра сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.
store_script_param_2
----
Сохраняет значение первого параметра второй сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.
СОСТОЯНИЕ ДЕЯТЕЛЬНОСТИ
GE
----
Предполагается, что первое значение должно быть больше или равно второму значению. Если это не так, то сбой.
экв
----
Предполагается, что первое значение в точности равно второму значению. Если это не так, то сбой.
GT
----
Предполагается, что первое значение должно быть больше второго. Если это не так, то сбой.
is_between
----
Предполагается, что первое значение, которое будет любое число между назначенными нижней границы и (верхняя граница-1). Если это не так, то сбой. Те же правила применяются для is_between как для try_for_range, ни операция включает в себя верхнюю границу. Это означает, что если вы используете (is_between, ": переменная", 0,5), он будет успешным только, если ": переменная" равна 0,1,2,3 или 4. Она не будет проверять 5.
entering_town
----
Succeeds, когда игрок начинает сталкиваться с особым городом.
map_free
----
Succeeds когда игрок свободен (не останавливаясь) по наземным карте.
Комментарии Зимний: иногда не удается добиться успеха без всякой видимой причины, пока Вы не въезжать и выезжать из столкнуться.
encountered_party_is_attacker
----
Succeeds когда столкнулись участник назначается в качестве нападающего.
conversation_screen_is_active
----
Succeeds когда разговор экране активна. Может быть использовано только в module_mission_templates.py
in_meta_mission
----
Другие операции устаревшим, не использовать эту функцию.
troop_is_hero
----
Успешно, если входной войска герой (имеет tf_hero в войска флаги).
hero_can_join
----
Успешно, если у вас есть свободные войска стека и достаточно места в вашей стороне за 1 дополнительных войск.
hero_can_join_as_prisoner
----
Успешно, если у вас есть свободное заключенного стека и достаточно места в вашей стороне за 1 дополнительную заключенного.
party_can_join
----
Успешно, если у вас есть достаточно свободного стека войск и достаточно места в вашей стороне все войска сталкиваются стороны.
party_can_join_as_prisoner
----
Успешно, если у вас есть достаточно свободного стека в плен и достаточно места в вашей партии в тюрьму все войска сталкиваются стороны.
main_party_has_troop
----
Успешно, если у вас есть ввод войск в вашей партии.
party_is_in_town
----
Успешно, если входной стороне находится внутри ввод города.
Зимний Комментарий: Эта операция никогда не работали правильно, когда я пытался его использовать. Лучше что-то чинить party_is_in_any_town и store_distance_to_party_from_party.
party_is_in_any_town
----
Успешно, если входной стороной в любом городе.
party_is_active
----
Успешно, если входной партия жива.
Комментарии Зимний: Эта операция кажется иногда работает с перебоями, которое может в конечном итоге вызывает ошибки при утверждении в сочетании с remove_party - игра заканчивается пытается удалить сторон, которые уже мертв! Другие оп лучше оставить неиспользованной.
player_has_item
----
Успешно, если у игрока есть пункт ввод в инвентарных запасах. Работает только для необорудованных пунктов.
troop_has_item_equipped
----
Успешно, если входной войска имеет входной пункт оборудован.
check_quest_active
----
Успешно, если входной Квест активен.
check_quest_finished
----
Успешно, если закончен ввод "Квест".
* _set_slot
----
Эти операции установить значение, один из слотов прилагается к различным позициям в игре. В настоящее время вы можете прикрепить слоты для войск, партий, фракций, сцены, участник шаблонов, агентов и квесты. Каждое гнездо на каждый объект может хранить любые данные, как зарегистрировать или переменная, и я это сделаю, если постоянное перезаписаны.
* _get_slot
----
Возвращает содержимое слота по вашему выбору и выводит его в пункт назначения по Вашему выбору.
* _slot_eq
----
Успешно, если содержание входных слота на входной вступления равна входного значения.
* _slot_ge
----
Успешно, если содержание входных слота на входной запись greather не менее входного значения.
play_sound
----
Воспроизведение звука на ваш выбор.
copy_position
----
Копирует ввод второй позиции на первую позицию ввода.
init_position
----
Чтобы рассказать вам правду? Понятия не имею.
get_trigger_object_position
----
Функции туманной, в настоящее время не использовалось в Native. Может быть использован в будущих версиях, чтобы получить позиции элемента с помощью пункта триггеров.
get_distance_between_positions
----
Возвращает расстояние между двумя позициями входы и выходы его назначения на ваш выбор.
position_is_behind_position
----
Успешно, если на первую позицию ввода за вторую позицию ввода.
position_transform_position_to_parent
----
Hellequin объясняет это гораздо лучше, чем я могу на этом посту MBXForum: http://mbx.streetofeyes.com/index.php/topic, (http://mbx.streetofeyes.com/index.php/topic,) 502.msg10495.html # msg10495
position_move_ *
----
Перемещения входные позиции по X, Y или Z оси входного числа сантиметров.
position_rotate_ *
----
Поворачивает входные позиции по X, Y или Z оси входного количество градусов.
position_get_ *
----
Получает X, Y или Z координате входных позиций и выводит его в пункт назначения, по вашему выбору.
position_set_ *
----
Устанавливает X, Y или Z координаты входной позиции на входные значения.
МИССИЯ УСЛОВИЯ
all_enemies_defeated
----
Успешно, если все породила врагов бессознательном или мертвым.
race_completed_by_player
----
Устаревшие, не используйте его.
num_active_teams_le
----
Успешно, если количество активных групп (т.е. число групп с активными членами), меньше или равна входного значения.
main_hero_fallen
----
Успешно, если это выбило игроков бессознательного.
Отрицание
договор
----
Это тег, который можно добавить в любых условиях эксплуатации, а также его изменения, что для этого требуется, а противоположный его обычным требованиям к успеху. Например, если (напр., ": переменная", 1), требует ": переменная", которая равна 1 к успеху (NEG | EQ, ": переменная", 1), требует ": переменная", которая к неравенству 1, с тем чтобы добиться успеха.
this_or_next
----
Это тег, который можно добавить в любых условиях эксплуатации, а также изменяет условия для успеха, если это либо условия или следующей операции, условия в блоке успеха.
Вполне возможно, в строку нагрузок this_or_next модифицированных операций вместе, пока они в непрерывную цепь. Если какие-либо условия в цепочке успеха, все они будут успешными и скрипт будет работать.
LT
----
Предполагается, что первое значение должно быть меньше второго. Если это не так, то сбой.
NEQ
----
Предполагается, что первое значение, которое будет неравенства на второе значение. Если это не так, то сбой.
Le
----
Предполагается, что первое значение должно быть меньше или равным второму значению. Если это не так, то сбой.
РЕЗУЛЬТАТЕ ОПЕРАЦИИ
set_party_battle_mode
----
Наборы боевой режим активным. Это означает, что потери принятых в следующей битве будут применяться к участнику в конце сражения. В противном случае не будут приняты потери.
Обратите внимание, что потери только будут приняты правила породили войск. Любой гость или агентов, порожденные spawn_agent операции не рассчитывают на потери.
start_map_conversation
----
Начинается разговор по наземным карта со входом войск. Будет рассматривать только те диалоги, начиная с Диалог-государство "event_triggered".
Зимние комментариев: Слегка хитроумной операции, и сейчас Родной сценарии с той же функциональностью, которые не используют start_map_conversation. Вероятно, лучше избегать.
rest_for_hours
----
Заставляет ввод количества часов ехать быстро. Игрок участник исчезнет с карты мира за этот период, не могут быть атакованы, и получает увеличился заживление ран и т.д.
add_xp_to_troop
----
Добавляет ввод числа опыт указывает на ввод войск.
add_gold_as_xp
----
Старая операция, возможно, устаревшим, не должно быть необходимым.
add_xp_as_reward
----
Добавляет ввод числа опыт указывает на стороне игрока.
add_gold_to_party
----
Добавляет ввод количества золота на входной стороне. Входные группы для этой операции не должны быть игроком участника, использование troop_add_gold за предоставленную золота на плеер.
spawn_around_party
----
Запускает новый участник входной стороне шаблона около входной стороне. После породила идентификатор породила участника хранится в Reg (0).
set_spawn_radius
----
Устанавливает размер радиуса (около входной стороне), на которые новые партии будут икру.
display_message
----
Выводит строку, как текст по левому краю экрана.
set_show_messages
----
Включает или отключает показ сообщений в левой части экрана.
Зимний комментариев: "Я не уверен, что эта операция действительно работает или нет, но, кажется, функционирует с перерывами, если на всех.
tutorial_box
----
Паузы игры и всплывает небольшое текстовое поле в центре экрана, содержащий входную строку в качестве основного органа (и, возможно вторая строка ввода как поле Title).
question_box
----
Паузы игры и всплывает небольшое текстовое поле в центре экрана, требующих игрока нажать на одну из двух вариантов. Вы можете ввести строки для отображения на дополнительные кнопки. Если оставить отключенной кнопке шоу "Да" и "Нет".
reset_price_rates
----
Сброс ставок цен в нормальное русло.
set_price_rate_for_item
----
Устанавливает цену ставки для ввода элемента входных процентах от его нормальной скоростью цен (определяется по стоимости и торговые навыки).
set_price_rate_for_item_type
----
Устанавливает цену ставки для типа входных элементов в процентах от их нормальной скоростью цен (определяется по стоимости и торговые навыки).
party_join
----
Добавляет входной стороне игрока партии.
party_join_as_prisoner
----
Добавляет входной стороне игрока партия заключенных.
troop_join
----
Добавляет ввод войск в стороне игрока. Добавляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.
troop_join_as_prisoner
----
Добавляет ввод войск для игрока-участника в качестве узника. Добавляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.
remove_member_from_party
----
Удаляет ввод войск из входной стороне. Удаляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.
remove_regular_prisoners
----
Удаляет все не-герой заключенных. Хитрая операцию, не может работать, и оказывается устаревшей Родной скриптов и других операций в любом случае.
remove_troops_from_companions
----
Удаляет ввода числа войск тип входного войска из входной стороне. Не удалить узников того же типа.
remove_troops_from_prisoners
----
Удаляет ввода числа заключенных, принадлежащих к типу входного войска из входной стороне. Не удалить нормальный войсками того же типа.
heal_party
----
Восстанавливает входной участник полного здоровья.
disable_party
----
Отключает входной стороной, скрывая его от карты. По-прежнему будет действительной цели ИИ поведения и могут все еще быть затронуты сценария.
enable_party
----
Включает входной стороне, восстановлении его на карте. Стороны могут начаться как инвалиды, добавив партийный флаг pf_disabled партии или партии шаблон.
remove_party
----
Удаляет входной стороне от игры.
add_companion_party
----
Создается новая партия во главе с героем войска ввода.
add_troop_to_site
----
Добавляет ввод войск для входных сцене точкой входа. Становится родным на сцене, а не посетитель. Это автоматически снимает войск из любой предыдущей придает сцене.
remove_troop_from_site
----
Удаляет ввод войск из входных сцене. Не работает для посетителей.
modify_visitors_at_site
----
Позволяет внести изменения посетителей на входе сцене.
reset_visitors
----
Удаляет все посетители в настоящее время на месте происшествия.
set_visitor
----
Устанавливает посетитель типа войска вклад в миссию ввод шаблона икру запись. Эта операция не устанавливает посетителей непосредственно к точкам сцену въезда.
Например, (set_visitor, ": войска", 3), создаст ": войска" в качестве зрителей на четвертую строку в миссии шаблон икру записи. Если эта запись икру не существует, или настроен на использование scene_source чем visitor_source, посетитель не появится. Если икру вступления установлен в неправильную точку входа, посетитель будет появляться при въезде, указанный в поле икру.
set_relation
----
Наборы отношений между двумя входными фракций входного значения.
start_quest
----
Устанавливает поисках статуса ввод в активном поиске.
complete_quest
----
Устанавливает поисках статуса входных стремлении имея завершена. Квест не считается активным.
succeed_quest
----
Устанавливает поисках статуса входных стремлении Получив удалось. Квест не считается активным.
fail_quest
----
Устанавливает поисках статуса входных стремлении будучи не удалось. Квест больше не считается активным.
cancel_quest
----
Устанавливает поисках статуса входных стремлении имея отменен. Квест больше не считается активным.
set_quest_progression
----
Если запрос на ввод qf_show_progression поиски флага, эта операция устанавливается в процентах от завершения отображаются в поисках экрана на ввод значения.
setup_quest_text
----
Не совсем уверен, но я думаю, что он хранит Quest текста с текущими значениями регистра строки, так что поиск текста не будет поврежден изменения регистра строки.
start_encounter
----
Начало встречи с входной стороне.
leave_encounter
----
Листья столкнуться.
encounter_attack
----
Используется в диалоге, устанавливает сталкиваются с враждебным и переходит к нападению меню.
select_enemy
----
При вводе существующие битва, эта операция выбирает, какая из сторон считается врагом для игрока.
set_passage_menu
----
Новая операция, функция по-прежнему туманно. Возможное объяснение: может установить проход, чтобы перейти прямо к различным меню игры, не требуя Messy миссией окончание кода.
end_current_battle
----
Завершает текущую битву. Используется к концу сражения с несколькими участниками.
ПРОДОЛЖЕНИЕ СЛЕДУЕТ. . .
-
Спасибо конечно, но не мог бы ты аккуратнее перевести?
nd_try
----
Является устаревшим этой операции. Это означает, что он устарел и не может не поддерживаться в будущих версиях M & B. Вы должны использовать вместо try_end.
Что заместо чего пользовать?
-
Amfitrion, используй try_end
Спасибо
Amfitrion
-
Спасибо конечно, но не мог бы ты аккуратнее перевести?
Если чёто не понятно говори, я исправлю.
-
Типы переменных:
Локальные - доступны только для конкретного скрипта, триггера и т.п.). В сейвах не хранятся. Название начинается с :
Глобальные - доступны всегда и отовсюду. Сохраняются в сейвах. Название начинается с $
Регистры - почти тоже самое, что и глобальные переменные. Имеют предустановленные названия и ограниченное количество. Пример - reg0 или reg10. Не помню, храняться ли в сэйвах. Вроде нет.
Слоты - переменные, привязанные к конкретному игровому типу (юниту, партии, предмету и т.п.). Могут иметь только числовые наименования, но для удобства можно сопоставить число и текстовое название в module_constants. Сохраняются в сейвах. Пример - slot_town_wealth или spt_kingdom_hero_party
Практически все операции модульной системы представляют собой то, что принято называть функцией.
Им передаются какие-то аргументы, они с ними работают. Функции обычно возвращают какое-то результирующее значение, и операции модульной системы не исключение. В зависимости от того, успешно была выполнена операция, или нет, она возвращает true или false.
Примечание: кроме того, многие операции изменяют глобальные или локальные переменные. Например операция party_remove_members запишет количество убранных из партии юнитов в reg0, а операция (assign, ":var", 1) запишет в локальную переменную :var значение 1.
От того, true или false вернет операция, зависит, будет ли выполнен код, находящийся далее.
Возьмем для примера операцию eq - равенсто:
(assign, ":var", 1), #Записываем в :var значение 1
(eq, ":var", 0), #eq сравнивает два значения. Если они равны, возвращается true иначе false.
(display_message, "@Сообщение"), #выводится сообщение
В данном случае, мы никогда не увидим сообщение, потому что :var равно 1.
Операция call_script возвращает true или false в зависимости от того, был ли выполнен вызываемый скрипт. Обычно скрипты, рассчитанные на возврат false, содержат в своем названии буквы cf (can fail).
Многие операции расчитаны на возврат false.
Однако, существуют и такие, для которых возврат false является внештатной ситуацией. Если они возвращают false, игра сообщит о ошибке.
Например, к юниту-лорду (скажем, trp_knight_1_1) приписана партия, идентификатор которой хранится в slot_troop_leaded_party.
Если лорда только что побили, в slot_troop_leaded_party будет записано число -1, т.е. партии у него никакой нет.
Возьмем для примера простой код:
(troop_get_slot, ":party", "trp_knight_1_1", slot_troop_leaded_party), #копируем значение из slot_troop_leaded_party в ":party"
(party_add_members, ":party", "trp_looter", 10), #добавляем в партию с порядковым номером ":party" 10 лутеров
Поскольку у лорда нет партии, в ":party" записано значение -1 и при попытке добавить в неё лутеров игра выдаст ошибку, потому что операция party_add_members вернула false.
Этого можно было бы избежать, добавив операцию "негативного сравнения" neq вот так:
(troop_get_slot, ":party", "trp_knight_1_1", slot_troop_leaded_party),
(neq, ":party", -1), #если в :party записано -1, возвращает false, иначе true
(party_add_members, ":party", "trp_looter", 10),
...
Продолжать, нет?
-
ConstantA спасиб огромное, очен интересно и полезно, пордолжай пожалуйста. :) :thumbup:
-
Ок.
Сегодня коротко.
При работе с операциями "ветвления" try_begin - else_try - try_end (которые очень похожи на if - else), надо помнить, что
условие попадания в параллельную ветку else_try определяется не в начале предыдущего блока, а всей историей выполнения этого блока.
Пример:
(assign, reg0, 0), #устанавливаем reg0 = 0
(try_begin),
(eq, reg0, 0), #да, все верно, reg0 = 0. Начинаем выполнять этот блок.
Действие 1. #выполняем какие-то действия.
(assign, reg0, 1), #устанавливаем reg0 = 1
(eq, reg0, 0), #операция eq возвращает false. reg0 уже не равен 0. Блок откидывается.
(else_try) #блок без условий. Он выполнится, если все блоки выше вернули false. Значит, начинаем выполнять этот блок
Действие 2. #выполняем какие-то действия.
(try_end), #конец ветвления.
Таким образом, были выполнены как Действие 1, так и Действие 2. Таким поведением модульная система не вписывается в парадигму структурного программирования
, где условия выполнения блока проверяются перед его запуском.
Be vigilant!
-
Пожалуйста, помогите разобраться.
try_for_parties
----
Открывает попробовать ведомость по каждому участнику по наземным карте.
try_for_agents
----
Открывает попробовать ведомость по каждому агенту по карте битвы.
store_script_param_1
----
Сохраняет значение первого параметра сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.
store_script_param_2
----
Сохраняет значение первого параметра второй сценарий для назначения на ваш выбор. Если не вернуть его будет равна 0.
Зачем именно эти команды?
Что к чему присваивается?
Это вообще нужно?
troop_is_hero
----
Успешно, если входной войска герой (имеет tf_hero в войска флаги).
hero_can_join
----
Успешно, если у вас есть свободные войска стека и достаточно места в вашей стороне за 1 дополнительных войск.
hero_can_join_as_prisoner
----
Успешно, если у вас есть свободное заключенного стека и достаточно места в вашей стороне за 1 дополнительную заключенного.
party_can_join
----
Успешно, если у вас есть достаточно свободного стека войск и достаточно места в вашей стороне все войска сталкиваются стороны.
party_can_join_as_prisoner
----
Успешно, если у вас есть достаточно свободного стека в плен и достаточно места в вашей партии в тюрьму все войска сталкиваются стороны.
main_party_has_troop
----
Успешно, если у вас есть ввод войск в вашей партии.
Кто к кому присоединяется? в окне отряда, или в битве?
party_join
----
Добавляет входной стороне игрока партии.
party_join_as_prisoner
----
Добавляет входной стороне игрока партия заключенных.
troop_join
----
Добавляет ввод войск в стороне игрока. Добавляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.
troop_join_as_prisoner
----
Добавляет ввод войск для игрока-участника в качестве узника. Добавляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.
remove_member_from_party
----
Удаляет ввод войск из входной стороне. Удаляется только 1 отряд, и сообщение с описанием эффектов отображается в левой части экрана.
remove_regular_prisoners
----
Удаляет все не-герой заключенных. Хитрая операцию, не может работать, и оказывается устаревшей Родной скриптов и других операций в любом случае.
remove_troops_from_companions
----
Удаляет ввода числа войск тип входного войска из входной стороне. Не удалить узников того же типа.
remove_troops_from_prisoners
----
Удаляет ввода числа заключенных, принадлежащих к типу входного войска из входной стороне. Не удалить нормальный войсками того же типа.
heal_party
----
Восстанавливает входной участник полного здоровья.
disable_party
----
Отключает входной стороной, скрывая его от карты. По-прежнему будет действительной цели ИИ поведения и могут все еще быть затронуты сценария.
enable_party
----
Включает входной стороне, восстановлении его на карте. Стороны могут начаться как инвалиды, добавив партийный флаг pf_disabled партии или партии шаблон.
remove_party
----
Удаляет входной стороне от игры.
add_companion_party
----
Создается новая партия во главе с героем войска ввода.
add_troop_to_site
----
Добавляет ввод войск для входных сцене точкой входа. Становится родным на сцене, а не посетитель. Это автоматически снимает войск из любой предыдущей придает сцене.
remove_troop_from_site
----
Удаляет ввод войск из входных сцене. Не работает для посетителей.
modify_visitors_at_site
----
Позволяет внести изменения посетителей на входе сцене.
reset_visitors
----
Удаляет все посетители в настоящее время на месте происшествия.
set_visitor
----
Устанавливает посетитель типа войска вклад в миссию ввод шаблона икру запись. Эта операция не устанавливает посетителей непосредственно к точкам сцену въезда.
Например, (set_visitor, ": войска", 3), создаст ": войска" в качестве зрителей на четвертую строку в миссии шаблон икру записи. Если эта запись икру не существует, или настроен на использование scene_source чем visitor_source, посетитель не появится. Если икру вступления установлен в неправильную точку входа, посетитель будет появляться при въезде, указанный в поле икру.
Среди этих строк, скорее всего содержится то, ради чегоя полез в модульную систему, но мне решительно не ясно, где и к кому что-то присоединяется, кто такие "посетители".
Ну и действительные/страдательные глаголы выносят мне моск
То ли мама моет раму, то ли рама моет маму =/
-
(try_for_parties, "переменная"),
действия с использованием переменной
(try_end),
Этот цикл перебирает все партии на карте, записывая номер текущей партии в переменную.
try_for_agents перебирает агентов на сцене по тому-же принципу.
store_script_param служит для получения аргументов при вызове скрипта через операцию call_script.
Т.е. если вызывается скрипт и ему передаются аргументы 1 и 100:
(call_script, "script_name", 1, 100),
в самом скрипте script_name надо прописать
(store_script_param_1, "переменная_1"), #сюда запишут 1
(store_script_param_2, "переменная_2"), #сюда запишут 100
Этим двум переменным и будут присвоены аргументы, передаваемые call_script. Если аргументы через call_script не передаются, они устанавливаются равными 0.
-
Спасибо. А про те штуки что под спойлером. Хотя-бы в общих чертах?
И да, может пока что я не дорылся, или просто тут как-то по другому это работает, но как в модульной системе использовать арифметику, случайные события?
-
(troop_is_hero, юнит),
Истина, если юнит в своем описании имеет флаг tf_hero
hero_can_join
Истина, если в отряде ГГ есть место и 1 свободный стек.
hero_can_join_as_prisoner
Истина, если в отряде ГГ есть место и 1 свободный стек для пленников.
(party_can_join, отряд)
Истина, если в отряде ГГ есть свободные места (слоты и количество) для всех юнитов отряда.
(party_can_join_as_prisoner, отряд)
Истина, если в отряде ГГ есть свободные места для пленников (слоты и количество) для всех юнитов отряда.
(main_party_has_troop, юнит)
Истина, если в отряде ГГ есть такой юнит.
(party_join, отряд)
Объединяет отряд с отрядом ГГ.
(party_join_as_prisoner, отряд)
Объединяет отряд с отрядом ГГ в качестве пленников.
(troop_join, юнит)
В отряд ГГ добавляется 1 юнит, на экран выводится сообщение.
(troop_join_as_prisoner, юнит)
В отряд ГГ добавляется 1 юнит в качестве пленника, на экран выводится сообщение.
(remove_member_from_party, юнит, отряд)
Удаляет 1 юнит из указанного отряда. Выводится сообщение.
remove_regular_prisoners
Убирает всех пленников не-героев. Может не работать, лучше не использовать.
remove_troops_from_companions
Хз.
remove_troops_from_prisoners
Хз.
(heal_party, отряд)
Лечит всех в указанном отряде
(disable_party, отряд)
Убирает отряд с карты. Однако, отряд еще может быть целью для ИИ или скрипта.
(enable_party, отряд)
Включает отряд
(remove_party, отряд)
Удаляет отряд из игры
(add_companion_party, юнит)
Создается новая партия во главе с указанным юнитом
Все, устал...
Арифметика начинается с операции val_add. См. header_operations.
Случайные события...через триггеры и рандом.
Например, каждые 10 сек. запускать триггер, в котором брать случайное число. Если число входит в какие-то рамки, что-то делать.
-
ConstantA большое спасибо арифметика мне очень пригодится :)
-
И кстати о появлении тумана и дождей это тоже по арифметики смотреть надо?
-
Не хочу создавать новую тему, раз уж есть подходящая.
Вопрос прежде всего к Марку, но вдруг кто еще сталкивался.
есть кусок кода
(try_begin),
(bla-bla-bla),
(eq....),
(bla-bla-bla1),
(gt...),
(bla-bla-bla2),
(agent_has_item_eqquped....),
(bla-bla-bla3),
(end_try),
Вопрос простой при каких условиях какие куски кода выполняться? Я так понимаю, при истином (eq....), выполнится гарантированно (bla-bla-bla), и (bla-bla-bla1), потом едет проверка на (gt...), если и оно истинно, то выполняется (bla-bla-bla2), и т.д. а весь блок сразу заканчивается если хоть одлна проверка вернула ложь?
Сорри за нубский вопрос, просто есть подозрение, что оно не так выполняется :(
-
GreyB, чтобы все четыре действия (и bla-bla-bla и последующие 3) выполнились, необходимо, чтобы удовлетворялись все 3 условия (и ge, и gt и проверка на наличие экипированной вещи у юнита). Не будет выполняться хотя бы даже одно - ни одно из действий не будет выполнено. И порядок не имеет значения, так что советую сначала записывать все условия, а потом все действия. Если хочешь, чтобы по частям выполнялись - делай еще вложенные try_begin в этот блок.
То есть для примера:
(try_begin),
(eq1....), - общее для всех условие, без него не выполнится ни одно из действий
(try_begin),
(eq2....), - условие только для действия в этом блоке, то есть для bla-bla-bla1
(bla-bla-bla1),
(else_try),
(gt...),
(bla-bla-bla2),
(else_try),
(agent_has_item_eqquped....),
(bla-bla-bla3),
(try_end),
(try_end),
-
Если хочешь, чтобы по частям выполнялись - делай еще вложенные try_begin в этот блок.
Т.е. вложенные делать можно? Спасибо :) Вон она где значит собака порылась ;)
-
Если хочешь, чтобы по частям выполнялись - делай еще вложенные try_begin в этот блок.
Т.е. вложенные делать можно? Спасибо :) Вон она где значит собака порылась ;)
Только аккуратнее с числом этих блоков будь, проверяй, чтобы все блоки закрывались в нужных местах. А то я 1 раз пропустил всего-лишь 1 try_end и в итоге целый день ломал мозг, в чем же дело и почему в игре нужный мне эффект не выполняется. Модулька компилируется нормально, ошибок нет, проверял сам скрипт - все нормально написано...
-
Оффтоп.
TAB - великая вещь, у меня самые ужасные беды с пропущенной запятой бывают.
-
Ок.
Сегодня коротко.
При работе с операциями "ветвления" try_begin - else_try - try_end (которые очень похожи на if - else), надо помнить, что
условие попадания в параллельную ветку else_try определяется не в начале предыдущего блока, а всей историей выполнения этого блока.
Пример:
(assign, reg0, 0), #устанавливаем reg0 = 0
(try_begin),
(eq, reg0, 0), #да, все верно, reg0 = 0. Начинаем выполнять этот блок.
Действие 1. #выполняем какие-то действия.
(assign, reg0, 1), #устанавливаем reg0 = 1
(eq, reg0, 0), #операция eq возвращает false. reg0 уже не равен 0. Блок откидывается.
(else_try) #блок без условий. Он выполнится, если все блоки выше вернули false. Значит, начинаем выполнять этот блок
Действие 2. #выполняем какие-то действия.
(try_end), #конец ветвления.
Таким образом, были выполнены как Действие 1, так и Действие 2. Таким поведением модульная система не вписывается в парадигму структурного программирования
, где условия выполнения блока проверяются перед его запуском.
Be vigilant!
Хотя из этого следует, что все-таки действия выполняются сразу после проверки условия...
Мда, жаль я эту тему раньше не нашел.
-
А то я 1 раз пропустил всего-лишь 1 try_end и в итоге целый день ломал мозг, в чем же дело и почему в игре нужный мне эффект не выполняется.
очень полезная штука для проверки правильности написания скрипта это дебаг...
помогает, когда пропустил что-то вроде трай_энда
почему то про это нигде не написано, сам наткнулся случайно, когда похожая ситуация получилась - вроде нормальный скрипт, модулька его собирает без ошибок, а на выходе ахинея.
Включается так:
1) в оконном режиме в игре нажать View>>>Set Debug Mode Folder и в выскочившем окошке указать путь к папке с модульной системой
2) нажать View>>>Debug Mode Window? в появившемся окошке выбрать из выпадающего списка нужный скрипт и нажать на кнопочку Debug
3) в момент выполнения скрипта игра остановится и скрипт не будет выполняться пока не нажмешь клавишу "1", при нажатии на единичку выполняется вторая строка скрипта, третья ... и так далее. В общем достаточно удобно, можно посмотреть как оно все происходит :)
Правда при выборе в дебаговом окошке конкретного скрипта грузится он довольно долго, я сначала даже думал, что эта возможность в игре не работает.
Проверял таким образом какие команды из хедер_операйшенз как себя ведут и для чего предназначены
Наверняка все, кому надо, об этом уже знают, но может кому нибудь и пригодится... написал потому, что мне в начале моего пути копания в модульке очень не хватало этой инфы :)
Хотя из этого следует, что все-таки действия выполняются сразу после проверки условия
точно, и в дебаге это видно сразу и наглядно
-
Хотя из этого следует, что все-таки действия выполняются сразу после проверки условия...
То-то и оно, что мне кажется, что ты все-таки прав... вернусь домой - проверю.
shturmfogel, спасибо :) я вот не знал
-
Об отладчике не знал. Спасибо за информацию.
-
GreyB, Извини я опоздал, тебе уже ответили :)
Добавлено: 18 Мая, 2010, 00:10
GreyB Кстати если хочешь сделать новый пункт на карте то тебе надо будет прописывать (в скриптах), проверку на пункт который ты будешь использовать:
(try_begin),
(party_slot_eq, "$g_encountered_party", slot_party_type, spt_town),
(jump_to_menu, "mnu_castle_outside"),
(else_try),
(party_slot_eq, "$g_encountered_party", slot_party_type, spt_castle),
(jump_to_menu, "mnu_castle_outside"),
(neq, "$g_encountered_party", "p_fort"),
И далее прописать сам пункт:
(else_try),
(eq, "$g_encountered_party", "p_fort"),
(jump_to_menu, "mnu_fort"),
(else_try),
Без проверки на пункт (В этом случие "fort") будет просто появляться меню замка.
Ясно то что Меню надо будет создать для этого пункта,прописать его в партиес, и сцену(если она будет конешно). :)
-
Спасибо, Марк. Буду знать
-
Вот еще вопрос :)
Кто-нибудь знает как можно узнать бежит сейчас юнит (агент) или нет? Для ГГ просто - проверяем состояние кнопок, а как для неписей?
Функций на проверкусостояния атаки\защиты уйма, а вот как проверить состояние движения?
-
как можно узнать бежит сейчас юнит (агент) или нет
тоже задавался этим вопросом, ответа не нашел :(
можно попробовать запустить триггер, с кажем с интервалом в 1 секунду, в котором
1) фиксируется позиция агента, заносится в слот
2) через одну сикунду эта позиция извлекается из слота и сравнивается с новой позицией объекта (получаем расстояние между позициями),на основании расстояния высчитываем скорость. Заносим новую позицию в слот вместо старой
... ну и так до бесконечности
хотел попробовать, да все руки не доходят
Хотя способ конечно не больно красивый, может есть что-то простое как все гениальное? Узнает же ланса при рыцарском ударе на какой скорости ей следует опускаться
-
Вы знаете в кауой пееременной хранится скорость?,если да сверяйте перменную с 0,тогда юнит будут двигаться
-
Вы знаете в кауой пееременной хранится скорость?
неа, не знаем... тайна сия велика есть :cry: :) если знаешь, поделись
можно вызвать позицию агента в конкретный момент времени, но нельзя вызвать скорость
сверяйте перменную с 0,тогда юнит будут двигаться
это конечно свежая и креативная идея :thumbup:
-
можно попробовать запустить триггер, с кажем с интервалом в 1 секунду, в котором
1) фиксируется позиция агента, заносится в слот
2) через одну сикунду эта позиция извлекается из слота и сравнивается с новой позицией объекта (получаем расстояние между позициями),на основании расстояния высчитываем скорость. Заносим новую позицию в слот вместо старой
... ну и так до бесконечности
Не годиться :( юниты ведь не только прямо бегают, то и боком, полубокам, назад, просто ходят в конце-концов иногда (на гору например там не мендленный бег, а именно ходьба), если все эти действия обрабатывать одинакого, то фигня получится :( очень не красиво.
Вы знаете в кауой пееременной хранится скорость?,если да сверяйте перменную с 0,тогда юнит будут двигаться
Мысль конечно хорошая, но что-то мне подсказывает, что нет в модульке такой переменной "по духу" чтоли не подходит... а даже еслибы и была, то проблемы теже, что и в описанном камрадом shturmfogel-ем способе. Т.е. при реализации искуственность будет в глаза бросаться.
-
А кто нибудь знает, как в МС организовать двухмерный массив? :-\
-
Nobody Detected
Есть кортежи, которые считаются их аналогами...
-
Во-первых, спасибо за оперативный ответ :)
Если я правильно понял, то имеются в виду отряды (party). Можно, конечно, взять и запихнуть id нескольких отрядов в слот к другому, и тогда получится нечто двухмерное.
Но как создавать новые отряды, не прописывая их заранее module_parties? А то так размер у массива фиксированным получается(
-
Я говорил касательно Python в целом.
А на счет модульки, то для чего нужен массив?
-
Для магии :D
Хотя, пожалуй, и одномерных хватит. Просто из любопытства хочется узнать, вдруг способы есть.
-
А через что реализовывать собираетесь?
-
Через МС по аналогии с этим: http://forums.taleworlds.com/index.php/topic,68919.0.html
-
А зачем нужен двумерный массив?
-
Чтобы количество одновременно летящих фаерболлов не было ограничено. У меня сейчас стоит, что в полете могут одновременно находиться по два от каждого мага, в указанном примере только один.
-
Так в чем проблема? :)
Если я правильно понял, все это происходит на МиБе?
-
Да, в МиБе.
А какой предлагаете вариант?
-
В МиБе я не очень силен (хотя думаю особой разницы нет)...
Можно поподробней, каким образом Вы реализовали два шара? Изменили пример, приведенный выше?
-
Грубо говоря, просто продублировал его, чтобы если один шар уже есть, то для второго использовался другой набор массивов =)
Криво и неудобно, зато просто)
Добавлено: 25 Марта, 2011, 22:02
Но что-то это уже больше на флуд похоже.
-
Извиняюсь, что с задержкой...
Если честно, то у меня нет никаких идей, по созданию чего-то, вроде двумерного массива :(
В итоге у меня получается какой-то монстр, который только затормозит систему...
-
Не беда) Я уже понял, как нормально обойтись без этого ;)
-
Промтопереводчики это тру. :) Надо будет как-нибудь заняться переводом...
-
Промтопереводчики это тру. :) Надо будет как-нибудь заняться переводом...
Надо, мне самому было лень, когда темку создавал.
-
position_set_ *
----
Устанавливает X, Y или Z координаты входной позиции на входные значения.
Что это значит?
Конкретно интересуют следующие команды:
overlay_set_position
position_set
overlay_set_text
set_fixed_point_multiplier
str_store_string
create_text_overlay
Примерно понимаю что они делают, но хотелось бы больше инфы.
-
overlay_set_position
Задает позицию, даже не знаю как перевести, overlay (это то что отображается на экране в презентации: текст, меши, кнопки и т.д. - это все называется overlay, он имеет несколько типов) на экране.
position_set_ *
Задает X, Y или Z координаты позиции.
overlay_set_text
Задает текст overlay
set_fixed_point_multiplier
Используется для симуляции дробных чисел, задает точность при преобразовании в число с фиксированной запятой (на деле, при преобразовании целого числа в дробное число, оно умножается на число, заданное с помощью этой команды).
http://rusmnb.ru/index.php?topic=7910.msg283003#msg283003 (http://rusmnb.ru/index.php?topic=7910.msg283003#msg283003)
Небольшое замечание, в игре нет дробных чисел, это всего лишь симуляция. Если сделать например такой код:
(assign, ":val", 150),
(set_fixed_point_multiplier, 100),
(convert_to_fixed_point, ":val"),
в надежде, что число в переменной ":val" преобразуется в 1,5, то на деле, число в этой переменной просто умножиться на 100, и мы получим 15000.
str_store_string
Записывает текст, в переменную строки.
create_text_overlay
Создает overlay с текстом.
Подозреваю что вышло не очень понятно =/ так что если что-то не очень понятно, то спрашивай.
-
Если я правельно понимаю, когда подряд стоит несколько условий
Например: (eq...),
(eq...), - то они должны быть все "труе", чтобы функция сработала.
Озвучаю диалог с НПС и хотел расписать на муж. и жен. голоса.
(try_begin),
(eq, "$g_talk_troop", "trp_npc3"),
(eq, "$g_talk_troop", "trp_npc7"),
(eq, "$g_talk_troop", "trp_npc8"),
(eq, "$g_talk_troop", "trp_npc11"),
(eq, "$g_talk_troop", "trp_npc16"),
(play_sound, "snd_speak_npc"),
(else_try),
(play_sound, "snd_speak_npc1"),
(try_end),
Здесь будет всегда "snd_speak_npc1", так-как все условия верными быть не могут.
Кстати. Может есть проверка на определение пола? Я не нашёл.
А если нужно, чтобы одна из них была "труе". Или-или. Что делать в этом случае?
Если условий много, то расписывать через (else_try) получается громоздко. Может есть способ проще?
-
FinGall (http://rusmnb.ru/index.php?action=profile;u=19251), используй
this_or_next|
Должно выглядеть вот так:
(this_or_next|eq...),
(this_or_next|eq...),
(eq...)
this_or_next| ставится перед условием, в скобках вместе с ним. Дословно переводится как "это или следующие", действует также. Последнее условие в списке должно быть без this_or_next.
-
Понял Leon473. Спасибо.
А есть ли возможность добавлять собственные функции? В каком файле храняться их коды?
Например, если взять код troop_is_hero, то его можно легко преобразовать в troop_is_female.
Это намного упростило бы озвучку разнополых юнитов.
-
А есть ли возможность добавлять собственные функции? В каком файле храняться их коды?
Например, если взять код troop_is_hero, то его можно легко преобразовать в troop_is_female.
Это намного упростило бы озвучку разнополых юнитов.
Возможность то есть, но у нас нет возможности воспользоваться этой возможностью :) Все команды зарыты в движок игры, поэтому их могут изменять только те у кого есть исходники движка.
-
Подскажите пожалуйста. Есть ли функция, позволяющая приписывать к именам лордов приставки типа Count или Boyar. Если да, то в каком слоте потом хранится новое имя.
Когда лорд переходит из фракции во фракцию, ему каждый раз добавляются такие приставки. И их бывает по несколько сразу. Вот я и подумал, что можно самому давать разные титулы.
-
растолкуете пожалуйста операцию -
(party_set_extra_icon, <party_id>, <map_icon_id>, <up_down_distance_fixed_point>, <up_down_frequency_fixed_point>, <rotate_frequency_fixed_point>, <fade_in_out_frequency_fixed_point>)
начиная с up_down_distance_fixed_point
откуда до куда дистанция?
зарание Спасибо за ответ
-
Наконец-то нашел нужную тему. Я поначалу вообще не мог понять логики некоторых блоков, зная несколько разных языков программирования. Вроде условия, циклы, а работает иначе. Еще раз спасибо! :thumbup:
Но вопрос. Не могу найти рабочего способа получить текущие координаты партии игрока на глобальной карте (не стартовые). Как-то даже в списках команд об этом не говориться.
Пробовал
(party_get_position, reg3, "p_main_party"),
или
(position_get_x, reg3, "p_main_party"),
(position_get_y, reg4, "p_main_party"),
и еще некоторые команды вслепую
{reg3} и {reg4} выводятся в тексте в меню лагеря.
Но либо нули, либо ошибки, либо явно не координаты.
-
YaLAS (http://rusmnb.ru/index.php?action=profile;u=628),
в лаунчире ставишь галочки напротив "включить режим редактирования" и "показывать частоту кадров", во время игры на глобальной карте нажимаешь ctrl+E
-
(party_get_position, reg3, "p_main_party"),
эта команда, все правильно
только позицию нужно заносить не в reg а в pos
вот так
(party_get_position, pos3, "p_main_party"),
это специальный регистр для позиций, который может хранить сразу три координаты
чтобы получить какую то одну координату надо
(party_get_position, pos3, "p_main_party"),
(position_get_x, reg3, pos3),
(position_get_y, reg4, pos3),
(position_get_z, reg5, pos3),
т.е. извлекается координата уже из регистра позиций
но если просто посмотреть где партия игрока, то лучше как Van написал
-
в лаунчире ставишь галочки напротив "включить режим редактирования" и "показывать частоту кадров", во время игры на глобальной карте нажимаешь ctrl+E
У вас правда это работает? Конечно же я это пробовал. Еще советуют Z удерживать, но это никаких мне координат не выводит. И вообще ничего не происходит. Пробовал и на Варбанде и на Истории героя.
(party_get_position, pos3, "p_main_party"),
(position_get_x, reg3, pos3),
(position_get_y, reg4, pos3),
(position_get_z, reg5, pos3),
Вот спасибо, а это то, что нужно. А то как-то вслепую угадываю.
-
чтобы координаты показывало надо еще вроде в лаунчире поставить "показывать частоту кадров" =/
-
У вас правда это работает? Конечно же я это пробовал.
Работает, если сделать все как написал shturmfogel (http://rusmnb.ru/index.php?action=profile;u=6634)
-
Тут есть один момент, не очень понятный. На глобальной карте у всех объектов координаты дробные, а если считываешь, то они как бы умножаются на 100 и становятся целыми. Например: у "p_town_1" х=-17,6, а когда
(party_get_position, pos1, "p_town_1"),
(position_get_x, reg0, pos1),
(display_message, "@{!} {reg0}"),
На экран выводится -1760. То есть, при расчётах надо орентироваться на -1760 ? =/
-
FinGall, да это я уже заметил. Но мне и того хватило, это в основном для расположения новых объектов на карте, так что глазами "обрабатывается" отлично.
-
они как бы умножаются на 100
Они умножаются на текущий fixed_point_multiplier.
Через WSE можно напрямую с дробными работать.
-
RongarЭто, вот эта функция?
(set_fixed_point_multiplier, <value>),
Мне ещё не понятно, есть ли у партий идентификаторы? Вроде, должны быть. Но когда пытаешься вывести их на экран:
(troop_get_slot, ":party_no", "trp_x", slot_troop_leaded_party),
(assign, reg0, ":party_no"),
(display_message, "@{!} X = {reg0}"),
то всегда выдаёт 0.
Может регистры reg их не воспринимают? =/
-
Это, вот эта функция?
(set_fixed_point_multiplier, <value>),
Да.
Мне ещё не понятно, есть ли у партий идентификаторы? Вроде, должны быть. Но когда пытаешься вывести их на экран:
(troop_get_slot, ":party_no", "trp_x", slot_troop_leaded_party),
trp_x — это чё? slot_troop_leaded_party прописывается только у лордов. У остальных он 0.
-
trp_x — это собирательный образ всех трупсов.
Похоже, дело было в том, что я проверял №партии в скрипте "game_start". А лорды появляются в игре через 1-2 дня. Видно, партии ещё не загружены.
Потом, номера появляются. Они как бы продолжают номера партий из module_parties. Но распределяются немного странно. Не так, как лорды расписанны в module_troops. Вроде бы, в том порядке, как я их добавлял в игре. Хотя, может я и ошибаюсь.
-
Что означают эти операнды:
val_lshift
val_rshift
val_add
val_sub
val_mul
val_div
val_max
val_min
val_mod
-
val_lshift/val_rshift — побитовый сдвиг налево/направо (умножение/деление на два в степени)
val_add val_sub val_mul val_div — прибавить, вычесть, домножить, поделить
val_max/val_min — выбрать большее/меньше
val_mod — остаток от деления.
У всех команд первый аргумент является первым операндом и результатом, второй аргумент является вторым операндом.