Как запрограммировать что-либо с помощью IC10 для новичка
GHub Platform · Гайд · 0 ответов · 7 просмотров

Привет читатель. Этот раздел милый, но я удалю его позже. По сути, в «Самом большом обновлении за всю историю» Rocketwerkz внесли несколько огромных изменений в базовую логику просто потому, что почему бы и нет. Мне понадобится некоторое время, чтобы включить все эти изменения в руководство, плюс я подумал, что было бы удобно на некоторое время просто разместить всю новую информацию в одном разделе для вернувшихся игроков. Блин, мне придется переписать так много всего. Самое большое изменение в том, что ld и sd больше нет. Вместо этого s и l теперь автоматически работают с адресами устройств. Довольно крутая штука, если честно, Dynamic LogicType. Помните, как мы можем разветвляться в зависимости от того, подключено устройство или нет к bdns? Что ж, теперь мы можем разветвляться в зависимости от того, связан ли с устройством определенный LogicType с помощью bdnvs и bdnvl. Полезные математические вещи. Линейная интерполяция теперь является однострочной с помощью lerp, и теперь более эффективно упаковывать данные в регистр с помощью ext и ins. Новый вариант чипа Теперь вы можете выбросить свой сценарий ПИД-управления, поскольку существует специальный ПИД-чип с параметрами, которые можно настраивать прямо на корпусе. Заставьте пауков ревновать. Теперь есть веревочки. Итак, если вы хотите выводить текст на консоль: определите запуск STR («выполняется...») s db. Настройка запуска. Сначала убедитесь, что вы изменили режим экрана. Если вы написали один или два сценария, возможно, будет разумно пропустить этот раздел — мы просто будем управлять светом с помощью переключателя. Но в остальном давайте начнем: Компьютеры — это калькуляторы. В конце концов, все, что делает компьютер, можно свести к функции некоторых чисел; но мы можем заменить эти числа именами для создания ассемблерного кода, который мы используем в Stationeers. Итак, все, что делает наше оборудование, является функцией некоторых именованных чисел. LogicTypes Некоторые из этих именованных чисел являются LogicTypes (т. е. On, Setting, Activate). При написании скрипта мы пытаемся использовать номера с различных устройств, чтобы изменить номера, связанные с другими устройствами. Чем лучше вы понимаете, как эти логические типы связаны с функциональностью каждого устройства, тем лучше будут ваши сценарии! Для начала попробуйте изучить единицы измерения, связанные с определенными типами логики, например кПа для давления или кельвины для температуры. Самая сложная часть: присвоение имен вещам. Чтобы получить доступ к LogicTypes, нам нужно взаимодействовать с некоторыми устройствами. Самый простой способ связи с любым устройством в Stationeers — присоединить устройство к корпусу с помощью отвертки. Каждый корпус имеет шесть слотов: от d0 до d5. Еще есть db, или сам корпус. Вы также можете использовать эталонный идентификатор устройства, но об этом речь пойдет гораздо позже. Помимо связи с устройством, нам также приходится хранить значения в переменных для их изменения. Чтобы назвать наши устройства и переменные, мы используем инструкцию alias. Это не обязательно, но хорошие имена облегчают написание кода. Для переменных имеется всего 16 числовых регистров (r0-r15), поэтому используйте их с умом. переключатель псевдонима d0 #comments может объяснить ваш сценарий. Используйте '#' для запуска одного псевдонима индикатора d1 #device Register alias state r0 #numeric Register Чтение Первое, что нам нужно для управления индикатором, это получить состояние переключателя. Чтобы прочитать значение из устройства, мы используем инструкцию загрузки: l r? д? LogicType l состояние переключателя Запись настроек Если переключатель выключен, мы хотим, чтобы свет был выключен. Это означает, что мы хотим, чтобы настройка переключателя напрямую соответствовала включению света. Чтобы записать значение, мы используем инструкцию сохранения: s d? ЛогическийТип r? s свет в состоянии цикла и меток Теперь нам просто нужно сделать эти две инструкции вечными, и наш сценарий управления светом будет готов. Чтобы переходить к различным строкам, мы можем использовать инструкцию j. Мы можем дать ему номер строки, но если мы когда-нибудь изменим сценарий, он может изменить номер строки, которую мы должны использовать. Вместо этого мы можем создать метку для динамического хранения важных номеров строк. Итак, наш базовый бесконечный цикл выглядит так: Цикл: l переключатель состояния. Параметр #'Loop:' — это помеченная строка. Никаких комментариев к индикаторам меток. Включено состояние j Цикл #перейти к строке с пометкой «Цикл:» Такты и время Приведенный выше сценарий будет работать, но на данный момент он выполняется 31 дополнительный раз за такт. Тик в Stationeers составляет полсекунды, а тики — это то, что игровой движок использует для синхронизации всех систем логики и физики. На самом деле это означает, что устройство будет меняться не более двух раз в секунду. Мы можем остановиться и подождать, пока не начнется следующий тик с инструкцией доходности. Чтобы ждать еще дольше, мы могли бы использовать сон. Или вы можете просто подождать, пока скрипт выполнит 128 строк. доходность сна a #where a=timeInSeconds Контроллер освещения/переключателя Собираем все это вместе: Я не видел многих баз с одним настенным светильником, поэтому предполагаю, что вам придется контролировать и несколько баз. Установка инструкций для пакета. Для одновременной связи со многими устройствами одного типа мы можем использовать инструкции для пакета и имени пакета. Мы можем загрузить настройки переключателя, как и раньше, но со всеми этими новыми индикаторами все становится сложнее. Пакетные инструкции сохранения имеют следующий вид: sb prefabHash LogicType r? sbn prefabHash nameHash LogicType r? ХЭШ и макросы Чтобы получить prefabHash и nameHash, мы можем использовать макрос HASH. Это функция, которая превращает имена в числа. Чтобы получить prefabHash, просто ХЭШируйте PrefabName (которое можно найти в Stationpedia). nameHash — это просто HASH имени. Итак, если у нас есть настенные светильники по умолчанию и длинные настенные светильники, все они называются «autolight» с помощью метки, мы можем управлять всем с помощью следующих определений: define LightName HASH («autolight») #=some num define LightID HASH («StructureWallLight») #=some num define longLightID HASH («StructureLightLong») #=some num Обратите внимание, что когда мы определяем что-то, мы не можем это изменить. LightName не является переменной в регистре, это постоянное значение, которое просто подставляется везде, где в скрипте встречается имя LightName. Дополнительные элементы управления Теперь давайте усложним логику состояния «Включено». Допустим, мы хотим, чтобы свет горел, если переключатель включен или если датчик присутствия обнаруживает игрока. Таким образом, мы можем оставлять свет включенным, когда идем ночью в шахту, чтобы монстры не могли залезть к нам под кровать: или r0 isOn isOccupied Переключение множества источников света Чтобы выполнить все это, нам нужно будет добавить в скрипт устройство, новую переменную, и для единообразия мы изменим имя существующей переменной. Объединив все это, мы получаем: Мы могли бы даже переключить инструкцию или для операции xor (исключающее или ), которая позволила бы нам выключать свет, даже когда игрок находится на базе, включив переключатель. Затем свет снова включится, когда игрок покинет базу: Чтобы лучше предсказать поведение логических операторов, таких как или , рассмотрите возможность поиска таблицы истинности для операции. А как насчет инструкций по пакетной загрузке? Инструкции по пакетной загрузке немного сложнее, поскольку они имеют дополнительный параметр BatchMode: lb r? prefabHash LogicSlotType BatchMode lbn r? prefabHash nameHash LogicSlotType BatchMode Регистр может содержать только одно значение, но мы загружаем сразу много значений с помощью инструкции пакетной загрузки, верно? Что ж, BatchMode сообщает компьютеру, как объединить все эти значения. Существует четыре пакетных режима: Средняя сумма Минимальная максимальная мощность Де
ИсточникGHub Platform · автор31.08.2026, 00:00:35
Привет читатель. Этот раздел милый, но я удалю его позже. По сути, в «Самом большом обновлении за всю историю» Rocketwerkz внесли несколько огромных изменений в базовую логику просто потому, что почему бы и нет. Мне понадобится некоторое время, чтобы включить все эти изменения в…
Войдите, чтобы писать в группе