[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Игры серии GTA » GTA San Andreas » SCM - Direct Drawing (Только для скриптеров :p)
SCM - Direct Drawing
DK22Pac
Друзья
TOP Скриптер
27.07.13 18:14
Offline
Идея 
Прямой рендер во фрейм-буфер, используя язык SCM. Работает только с 1.0 US exe.
Использование
Подключить файл: DirectRender к исходнику ({$I directrender}), далее - использовать scm-функции для обозначения кода, который будет выполнен при рендеринге.
Код
{$CLEO}
{$I directrender}
0000:
while true
     wait 0
     /* Также можно использовать имена:
     directRender, direct_render, directDrawing, direct_drawing, ExecuteCodeAtRendering, execute_code_at_rendering для вызова этой функции. */
     0AB1: call @DirectRender 2 from @RenderCodeStart to @RenderCodeEnd
end

:RenderCodeStart
// код
:RenderCodeEnd

Почему?
Прямой рендеринг невозможен во время исполнения скриптов.
Также
Для будущих планов, были реализованы функции для выполнения кода при рестарте игры и при рестарт графического устройства игры. Это @ExecuteCodeAtClosing (execute_code_at_closing) и @DeviceReset (ExecuteCodeAtResetting, execute_code_at_resetting, device_reset, ResetDevice, reset_device).
Прогресс
Тестовая версия.
Примеры
 

Текст и текстура
Вывод иконки кулака и текста под ней.
Код
{$CLEO}
{$I directrender}
0000:
while true
     wait 0
     0AB1: call @DirectRender 2 from @texture to @end_texture
     0AB1: call @DirectRender 2 from @text to @end_text
end

:texture
0@ = 0xFFFFFFFF
0AA6: call_method 0x728520 struct 0xBAB1FC num_params 9 pop 0 _color 0@v _yx4 10.0 100.0 _yx3 10.0 10.0 _yx2 100.0 100.0 _yx1 100.0 10.0
:end_texture

:text
0AA5: call 0x719430 num_params 1 pop 1 0xFFFFFFFF                          // SetColor
0AA5: call 0x719380 num_params 2 pop 2 _yx 0.9 0.6                         // SetScale
0AA5: call 0x719610 num_params 1 pop 1 _alignment 1                        // SetAlignment
0AA5: call 0x719490 num_params 1 pop 1 _style 1                            // SetStyle
0AA5: call 0x719590 num_params 1 pop 1 _size 1                             // SetOutLine
0AA5: call 0x71A700 num_params 3 pop 3 _text "Hello, world!" _yx 105.0 8.0 // PrintString
:end_text

Каркасные педы
Отрисовка модели педа поверх уже отрисованных моделей, но в режиме каркаса.
Код
{$CLEO}
{$I directrender}
0000:
while true
     wait 0
     0AB1: call @DirectRender 2 from @wireframe_peds to @end_wireframe_peds
end

:wireframe_peds
{$I forallpeds}
// Установка настроек рендеринга
0AA5: call 0x7FC2D0 num_params 2 pop 2 2 8
0AA5: call 0x7FE420 num_params 2 pop 2 1 6
// Рендер клампа педа
0A96: 0@ = actor ped struct
0@ += 0x18
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0AA5: call 0x749B20 num_params 1 pop 1 0@
// Установка настроек рендеринга
0AA5: call 0x7FC2D0 num_params 2 pop 2 3 8
0AA5: call 0x7FE420 num_params 2 pop 2 0 6
{$I for_end}
:end_wireframe_peds

Скачать
ССЫЛКА
Установка
Поместить .dll и .asi файлы в папку GTA SA, и файл 'DirectDrawing' в папку CLEO (или в папку SB).

wmysterio
Администраторы
Скриптер
27.07.13 20:01
Offline
Интересная затея, но вряд ли кто-нибудь с этого сайта сможет помочь.

Vital
Друзья
Скриптер
27.07.13 21:20
Offline
DK22Pac, здорово, выглядит действительно необычно, даже для тестовой версии.

Цитата
Прямой рендеринг невозможен во время исполнения скриптов.
 Это, если я не ошибаюсь в который раз, из-за способа обработки скриптов? Сначала процедуры, потом отрисовка на экране.
И, я так понимаю, этот способ позволяет сделать большее, нежели стандартные средства рисования текста/текстур? Если, например, можно вывести каркас людей, то можно, наверное, и кости скелета? Это было бы полезно тем, кто работает над анимациями, им каждое движение героя важно. Да и для моделей тоже.
2109: create_special_actor $VITAL in_front_of_computer

KiLLeR96
Модераторы
Модератор
27.07.13 21:53
Offline
Эх, сюда бы учителя по написанию asi плагинов.
МоДиРатОр)))000)))))

DK22Pac
Друзья
TOP Скриптер
01.08.13 00:32
Offline
Цитата (Vital)
Это, если я не ошибаюсь в который раз, из-за способа обработки скриптов? Сначала процедуры, потом отрисовка на экране.
Да.
Цитата (Vital)
И, я так понимаю, этот способ позволяет сделать большее, нежели стандартные средства рисования текста/текстур? Если, например, можно вывести каркас людей, то можно, наверное, и кости скелета? Это было бы полезно тем, кто работает над анимациями, им каждое движение героя важно. Да и для моделей тоже.
Верно. Рисовать можно что угодно. Правда, для этого надо знать, как именно рисовать.
Например, отрендерить текстуру на экране можно с помощью метода 0x728520. А если хочется создать что-то сложнее, например, 3д-обьект, придёться самому создавать массив с данными о каждой вершине модели и рендерить с помощью функций движка. На самом деле, это не очень сложно.

Добавлено (31.07.13, 23:32)
---------------------------------------------

Цитата (KiLLeR96)
Эх, сюда бы учителя по написанию asi плагинов.
Мог бы научить  wink Знания по С++/Ассемблеру есть?   happy
Вообще, написание плагинов - это полный хардкор. Для написания более-менее читабельного кода нужно пользоваться классами. "Единого" стандарта по этому вопросу нету. Его вообще не существует (тут всё запущено). Кодер сам составляет список классов, сам их обьявляет и описывает. То же самое - с функциями, методами классов.
Конечно, есть МТА с их открытым кодом. Но мне лично почему-то не хочеться брать их исходники. Уже полгода хочу создать что-то своё (даже писал автогенератор классов), но пока что - без успехов.
А так, что-простое, например там, вывод текста, управление хар-ками игрока, могу показать.

wmysterio
Администраторы
Скриптер
01.08.13 01:14
Offline
Вопросы конечно не ко мне, но
Цитата (DK22Pac)
Мог бы научить
Было бы здорово. Хоть бы простые примеры smile Дальше уже можно подхватить.
Цитата (DK22Pac)
Знания по С++/Ассемблеру есть?
На C++ я уже давно забил, но небольшие знания ещё остались. С ассемблером не приходилось сталкиваться лоб-в-лоб.
Цитата (DK22Pac)
Уже полгода хочу создать что-то своё
У меня вообще планы Наполеона - хочу перевести скриптинг на c# smile Но там так много тонкостей, что башка лысеет smile

DK22Pac
Друзья
TOP Скриптер
01.08.13 01:35
Offline
Цитата (wmysterio)
хочу перевести скриптинг на c#
ГТА4?

Что-то вроде урока напишу. На форум писать или в статью?

wmysterio
Администраторы
Скриптер
01.08.13 01:39
Offline
Цитата (DK22Pac)
Что-то вроде урока напишу. На форум писать или в статью?
В статьи лучше
Цитата (DK22Pac)
ГТА4?
 Хотя бы San Andreas. Что-то на подобие ScriptHookDotNet. Что бы скрипты в шарпе писать.

Форум » Игры серии GTA » GTA San Andreas » SCM - Direct Drawing (Только для скриптеров :p)
Страница 1 из 11
Поиск: