Хм, мне кажется, топик задумывался как некое аккультное место для тех, кто имеет желание склепать М3, написать код в домашних условиях, такскать. Попытаюсь продолжить идею в этом русле. Не С++шников прошу меня не слушать.
Приснилось мне такое устройство движка:
1) Движок умеет генерить некоторый набор типов событий. К примеру, загрузка карты, нажатие клавиши, изменение положения объекта в пространстве и т.д. Ну, собсно, в первом посту так примерно и изложено.
2) Движок обладает набором утилит и данных, определяющих все игровые фичи, и эта феня упакована в известную всем и вся структуру.
3) На каждый тип события есть свой EventHandler, прогоняемый движком каждый раз, как сгенерится событие. Суть EventHandler'а - при каждом своём запуске выполнять по-порядку все функции, прописанные в данное событие (бинарные скомпилленные скрипты), передавая каждой из них:
а. указатель на структуру, содержащую информацию о событии (для каждого типа события своя определённая структура данных)
б. указатель на структуру, где находятся все фичи движка.
Таким образом, скрипты могут управлять всем и вся, и ничто не будет жёстко прописано в коде движка.
Но основная идея - компиллировать скрипты отдельно в независимые функции и сохранять сий бинарный код тела функции в файл, откуда при запуске игры они будут считаны, загружены в память, и прилинкованы каждая к своему EventHandler'у.
На домохозяйственном уровне, это мне представилось так: EventHandler - это DynamicArray, содержащий указатели на все исполняемые скриптофункции и алгоритм, запускающий по очереди каждую из этого "списка", пиная проц по соответствующему адресу.
А вопросы "простые": как писнуть функцию, чтобы после компилляции она была такой самостоятельной, чтобы её бинарное тело можно было сохранить в файл, а потом загрузить в память и прилинковать? Насколько я понимаю, в ассемблере никаких проблем всё это проделать не возникло бы (знаю, хотя и ни разу на сиим не программил
). Но как в С++?
Если кто-то понял идею, и может на домохозяйском левеле дать указания...