|
#размышления #теория_магии #много_букф
... и програмирование магии Первая часть: https://fanfics.me/message750029 Итак. Теперь посмотрим, какую магию можно программировать. Программирование - это в широком смысле слова создание из простых элементов последовательности действий. Или более сложное, но полное описание- создание закономерности поведения системы. Чтобы программировать магию, нам нужно соблюдение нескольких условий: 1. Детерминированность - предсказуемость и повторяемость результата. Если у нас каждый раз слово огня вызывает огонь разного размера, то ни о каком программировании речи и быть не может. 2. Наличие языка и чёткого синтаксиса. Если магия строится на образах и намеренье, то тоже никакого программирования. 3. Наличие памяти у исполняющей среды. Если нам некуда записать программу, то опять-таки никакого программирования - у нас просто будут слова силы, которые моментально срабатывают после произношения. Например, в одной истории есть магия, где сказав слово "Огонь" ты моментально вызываешь огонь. Там можно добавить к нему модификаторы типа "большой/малый", но это не делает такую магию программируемой. 4. Наличие метамагии. Определенная часть магии должна быть посвящена управлению и изменению другой магии. Например, в предыдущем примере кроме слов "большой/малый" нужны слова граница, дальность и т.д. И тогда слово "огонь" превращается в кнопку пуск для заклинания "задаю круг диаметром 20 метров на расстоянии 30 метров, при попадании живого в круг, наполни его большим огнём". И у нас по сути главные слова задают "стихию" заклинания, а второстепенные задают программу. Теперь небольшой оксюморон: если мы берём "физичную" магию рун/глифов (вариант С), то руны становятся аналогом транзисторов и конденсаторов, и такие руны нельзя программировать. Здесь у нас вместо маго-программистов появляются маго-конструкторы-схемотехники. А вот божественные руны с концептуальным эффектом прекрасно программируются. Если у нас есть только 4 базовых условия, то это, скажем так, маги программирующие на ассемблере. Поясню: у нас доступны только базовые функции и простая метамагия. Каждый раз маг должен полностью зачитать код программы. На поле боя такие маги - это стеклянные пушки, которых надо защищать, в общем - артиллерия. Всё разительно изменяется, если мы вводим создание пользовательских процедур: маги могут записать заранее программу, чтобы потом вызвать её одним кодовым словом. Тут опять-таки возможны разные варианты, от магов ДнД, которые записывают в память несколько экземпляров программы в день, до магов ГП, которые могут кастовать сколько хотят. Понятное дело, что как только мы вводим пользовательские процедуры, так сразу же хочется сделать и долговременное хранение библиотек таких процедур. Чтобы не повторять их код каждый раз, а вызывать уже готовые. Тут опять-таки множество вариантов исполнения: от личных гримуаров, до ноосферы как в моём хедканоне в ГП. Естественно, наиболее развита будет магия в мире, где пользовательская процедура может вызывать другие пользовательские процедуры, то есть - программа в составе которой есть другие программы. Тогда мы можем говорить о полноценном процедурном программировании. В нашем мире это уже нечто устаревшее, но в подавляющем большинстве историй это был бы офигеть какой прорыв в развитии. Если память среды позволяет поддерживать своё внутреннее состояние. То возможно более сложное объектно-ориентированное программирование. Если в процедурном программировании маг сам кастовал заклинание, то теперь маг создаёт обьект, который его кастует. Ключевое отличие в наличии внутренней памяти обьекта. Если процедурное заклинание - это просто что-то, чем маг выстрелил и забыл, то обьект обычно существует неопределённое количество времени в ожидании действия, и кроме своего метода, которое и есть заклинание, также имеет внутреннее состояние. Поэтому обьект может многократно применять метод, при этом помня историю и приспосабливаясь, либо срабатывая по разному в зависимости от взаимодействия с другими обьектами. И т.д. Охранные чары с паролем - это тоже оно. Есть и другие отличия: наследуемость и полиморфизм, но давайте не будем о сложном. Это не все программисты-то понимают. ))) И да, обьект похож на что-то, что должно быть артефактом. Но это не обязательно так. Например, шар молний, который летит над полем боя, и атакует разрядами только врагов - это проще программировать как обьект. Было бы очень интересно посмотреть на вариант, где магия программируется как язык Lisp. Концепция, где всё является и программой и данными, а также функции, которые работают над функциями - это смотрится просто сумасшедшими возможностями в мире магии. Увы, но у меня так и не дошли руки до Lisp в своё время. Так что я не вполне понимаю, что именно можно в нём сделать. Такие вещи надо познать на практике, чтобы мышление перестроилось. Отдельно хотел бы пройтись по големам. Если голем - это не конструкция, в которую засадили управляющий дух, то это должна быть агентская система на уровне сложности нынешних нейросетей. Ерунда, когда "вот тебе заклинание огненного шара, а вот заклинание голема" - это именно что ерунда. Алгоритмическая сложность подобного просто зашкаливает. Если хотите посмеяться - посмотрите как ходили роботы до создания нейросетей, очень смешно. И ведь даже такую простую задачу как ходьба толком решить не могли. И ещё кое-что: баги. Баги неизбежны. Мало кто пишет программу с первого раза без багов. Но если в нашем мире большинство багов отловит компилятор, а оставшиеся просто вызовут ошибки в поведении или в крайнем случае крах программы, то в мире магии баг - это смертельно опасно. Поэтому неофитов будут заставлять заучивать стандартные заклинания. Поэтому у неофитов будет очень мало опыта нахождения багов. Этот замкнутый круг приводит к тому, что разработкой новых заклинаний занимаются либо храбрые, либо безумные. Ну, либо очень богатые, которые могут позволить себе особо защищенные лаборатории и деньги для найма храбрых безумцев в качестве тестировщиков. Ваши мысли? 12 января в 00:19
1 |
|
Вспомнились печати, которые в некоторых анимэшках напоминали этакий рунный вариант антикитерского механизма.
Вообще, вариация псевдо-механических магических конструктов... |
|
|
Asteroid Онлайн
|
|
|
Asteroid Онлайн
|
|
|
Заменил "функциональное" на "процедурное", потому что это была терминологическая ошибка.
|
|
|
Asteroid
Заменил "функциональное" на "процедурное", потому что это была терминологическая ошибка. В чем разница? |
|
|
Asteroid Онлайн
|
|
|
Elven Kingdoms
В том что есть функциональное, и оно будет в следующем посту на тему. |
|