#26 Re: Программирование » Exception handler? » 06-08-2013 14:19

@Alien - Не надо на "Вы" - я чувствую себя от этого древним и ветхим.
Заказ принят. С ARM я сам особо не разбирался (это еще впереди: нужно будет покопаться CTW/iOS и VC/iOS), а вот очередная часть по PPC будет точно, предположительно, где-то в районе выхода пятерки.

@DK22Pac - Хорошо, доберусь до дома, попробую заглянуть в базу (у меня с собой ее нет). exception-handlerы, если не происходит исключения, ничем не отличаются от любых других функций. Место в ntdll гораздо больше похоже на случайное, чем на обработчик исключения (точно можно сказать, если включить в студии загрузку  debug-info с микрософтовских серверов)

#27 Re: Программирование » Exception handler? » 05-08-2013 15:03

Мне еще ни разу не приходилось пользоваться fastcall. Обычные методы либо cdecl, либо stdcall, либо thiscall, а то, что генерируется линкером, обычно получает параметры так, что без declspec(naked) не обойтись (тем более, что о сохранении регистров там тоже стоит позаботиться самому).

auto _RegisterFxSystem = reinterpret_cast<CFxSystem * (__thiscall *)(CParticleData *particleData, const char *filename, FILE *file)>(0x5C1F50);

PS. Я, кстати, научился инжектить нормально методы, так что последняя часть соответствующей статьи будет дописана (не прошло и пяти лет)

#28 Re: Программирование » Exception handler? » 05-08-2013 12:29

__thiscall * мобжно объявлять где угодно. первый параметр автоматом пойдет в ECX.

__fastcall - это совсем не то (два параметра в регистрах). Вылет - по рассыпанию стека из-за несовпадения ожидаемого и реального количества параметров на стеке

#29 Re: Беседка » Использование игры в виде подключаемого модуля » 19-04-2013 15:12

@009 - Физика в SA достаточно рудиментарна (осбенно после IV)
В тех кусках, что я выкладывал, были, как минимум структуры физического движка.
Если нужно (и если будет время), могу попробовать вспомнить, что к чему.

#30 Re: Справочная информация » Работа с компонентами машины » 03-11-2012 12:09

@Shag - Компоненты должны быть в массиве.
Если есть хотя бы два компонента - то все остальные находятся тривиально

#31 Re: Вопросы по скриптингу » Один вопрос » 02-09-2012 07:34

4D0 - это направление фюзеляжа при полете (например, лететь боком).

#32 Re: Справочная информация » Ресурсы и структуры GTA IV » 01-08-2012 20:10

@DK22Pac - DC == Display Command.
Т.е., несколько упрощая, по ходу обработки, они набираются в очередь и потом отрисовываются все пачкой. CBaseDC - базовый класс  для всех DC, а Execute - метод, непосредственно выполняющий команду.

#33 Re: Программирование » Структура с фиксированным размером » 26-07-2012 17:27

@Alien - Не совсем так.
Определения структуры может не быть вообще: указатель на структуру считается complete type.
Определение структуры требуется только в случае, если либо используется сама структура (не по указателю), либо производится обращение к каким-то ее полям

#34 Re: Программирование » Подключение устройства к LabView » 17-06-2012 07:58

А что у LabView есть на тему подключения внешних dll ?

(в общем случае, пишется модуль-адаптер, который предоставляет требуемые LabView функции и, из них, вызывает функции устройства)

#35 Re: Программирование » Создание своего буфера в игровой структуре » 15-05-2012 13:57

Можно, но это тоже получится не меньше четырех точек (а делать это будет сложнее).
С одной стороны, приятно, что можно ограничиться только CPed (т.е. не нужно трогать CPlayerPed и CEmergencyPed), с дургой стороны, у CPed три конструктора и один деструктор (что и дает нам четыре точки)

#36 Re: Программирование » Создание своего буфера в игровой структуре » 12-05-2012 11:35

Метод, в общем, логичный.
Неиспользуемое поле в CPed - найти не вопрос. Как вариант - использовать поля CPlacement, которые используются только в статических объектах.

Проблема с созданием/удалением объекта решается перехватом конструктора и деструктора (~5 точек)

#37 Re: Вопросы по скриптингу » Границы действия. » 07-05-2012 14:49

Из точки фокуса строишь четыре плоскости и проверяешь, что объект их не пересекает.
Поскольку у тебя камера фиксирована, все проверки получаются плоские (т.е. строишь плоскость параллельно экрану, считаешь в ней четыре лимита и проверяешь, что у тебя проекция объекта за них не выходит)

Это нужно один раз нарисовать и все станет очевидно.

#38 Re: Справочная информация » Ресурсы и структуры GTA IV » 29-04-2012 12:26

Хорошо. До катсцен я еще не добирался.
Маленькое замечание: размер rage::Vector3 - не 12, а 16 байт (SSE-aligned)
В паре объектов "лишние" четыре байта используется для хранения даных, но, практически везде, это просто выравнивание.

Пропустил вопрос про FrameDof
DOF = Degree Of Freedom
короче, на первый взгляд, это ограничения для инверсной кинематики.
Они у меня были слегка разобраны, если надо - попробую поискать

#39 Re: Вопросы по скриптингу » Проблемы с компиляцией\декомпиляцие cleo-скриптов » 08-04-2012 09:26

Да и сейчас можно.
Там, правда, написано "Our HDD has broken and entirely site has lost. We are trying to recover. Please wait."

#40 Re: Программирование » Избавление от зависимостей в проекте vc++ 2010 » 28-03-2012 00:29

Как правило, при компиляции, делается обратное - чем больше вынесено во внешние модули, тем компактнее получается свой проект.

/MT достаточно, чтобы msvcrXX не использовался.
Если хочется собрать вообще без стандартных библиотек, придется повозиться.

Кстати, RtlCopyMemory медленнее memcpy примерно в десять раз, если включены /arch:SSE2 и /Oi

#41 Re: Справочная информация » Работа с компонентами машины » 26-03-2012 09:12

У компонентов в SA и ниже, вообще нет коллизий

#42 Re: Работа с памятью, EXE » GTA IV и ArtMoney/CheatEngine » 12-03-2012 00:37

что касается xmmN - они всегда по 128 бит. В x86 их 8, в x64 - 16.
Они могут использоваться для разных целей. Самая распространенная - использование для floating point, чтобы не возиться со стековой сопроцессорной арифметикой. 

Альтернативное (вообще-то, оно задумывалось как основное) использование - параллельное выполнение действий над несколькими операндами.

   // прибавление числа ко всем элементам вектора двумя командами
    __inline Vector4& operator += (const float f) { v = _mm_add_ps (v, _mm_set_ps1 (f)); return *this; }

С пересылкой: нужно именно MMX или SSE ? MMX не работает с плавающей точкой.

@DK22Pac -
Вместо указателя на rwFrame, есть указатели на несколько структур.
Кусочек ivModels.h

class ivBaseModelInfo {  // size = 0x60
public:
// ... здесь были методы...
    phArchetypeGta *        m_pArchetype;   // +04 - физика
    gtaFragType *           m_pFragType;    // +08 - frag. используется только в ivPedModelInfo и ivVehicleModelInfo
    ivDrawableReference *   m_pDrawableRef; // +0C - модель. Используется для всех остальных классов
    Vector4             m_vCenter;      // +10
//#define m_fRadius (m_vCenter.w) // +1C
    Vector4             m_vAabbMin;     // +20
//#define m_fDrawDistance (m_vAabbMin.w) // +2C
    Vector3             m_vAabbMax;     // +30
//#define m_dwModelId (_f30.pad)  // +3C 
    DWORD               m_dwFlags;      // +40  -- 0x800000: auto allocated
    DWORD               m_dwRefCount;   // +44
    WORD                m_wTxdId;       // +48
    WORD                m_wFirst2dfxRef;// +4A  - index of the first 2dfx reference in ivModelInfoStore::ms_2dfxRefs1
    WORD                m_wAmatCount;   // +4C  - number of the first audio material
    WORD                m_wFirstAmatID; // +4E  - count of the audio materials used
    WORD                _f50;           // +50 - index of _F27FC4 
    WORD                m_wBoundId;     // +52
    WORD                m_wLodId;       // +54
    WORD                m_wAnimationId; // +56
    WORD                m_wBlendshapeId;// +58
    BYTE                m_nb2dEffectCount; // +5A
    BYTE                _f5B;   // 2dfx flags: 0x40 - have light shaft
    DWORD               _f5C;   // +5C TODO: m_dwFragTypeAssignTime ? 
};

struct ivDrawableReference {
    rage::rmcDrawable *         pDrawable;      // +0
    ivCustomShaderEffectBase *  pShaderEffect;  // +4
    DWORD                       _f8;
    ivDrawableReference *       pPrev;          // +C
    ivDrawableReference *       pNext;          // +10
// и здесь были методы
};

#44 Re: Работа с памятью, EXE » GTA IV и ArtMoney/CheatEngine » 19-02-2012 01:48

Как-то так:

dwLoadOffset = (DWORD)GetModuleHandle (NULL)-0x400000;

С глобальной точки зрения, это не совсем корректный пример, потому что он позволяет получить адрес загрузки только основного модуля, но, в практических целях его хватит.

#46 Re: Справочная информация » Ресурсы и структуры GTA IV » 09-02-2012 00:11

В ModelInfo есть указатель на drawable

Если не понятно, как получить modelinfo из entity - позже найду пример.

#47 Re: Беседка » Нужна помощь в создании сайта про гта » 28-01-2012 03:27

"Пользователи делятся на тех, кто увидев сообщение на экране, нажимает 'Да' и тех, кто нажимает 'Нет'. Если пользователь читает сообщение - это уже продвинутый пользователь".

Там же написано: админа с локалхоста не пускают. Либо пароль не совпадает, либо прописано ограничение по адресам.

#48 Re: Справочная информация » Организация и анализ структур в коде » 22-01-2012 18:49

@BritishColonist - Debugger -> Attach to process

__thiscall описывать как __cdecl нельзя. У __cdecl все параметры на стеке, у __thiscall -  this передается в ECX

#49 Re: Справочная информация » Организация и анализ структур в коде » 03-01-2012 21:54

@BritishColonist
1. Здесь поможет не сам конструктор, а место, откуда он вызывается. Если объект выделяется динамически, перед вызовом конструктора вызывается оператор new. Ему передается параметром точный размер объекта. (примеры в 5.1). Если объект выделяется статически, пользы от конструктора ровно столько же, сколько и от любого другого метода - можно установить минимум, меньше которого объект быть не может (по максимально используемому смещению полей).

2. Функции члены класса никак не связаны с данными (и вообще не отличаются от функций, которым указатель на объект этого класса передается первым параметром). 

3. Не влияет, т.к. они никак не связаны с данными.

#50 Re: Справочная информация » Ресурсы и структуры GTA IV » 25-12-2011 16:44

Графические форматы RAGE разобраны процентов на 80 для IV и процентов на 50 для RDR.
(MC:LA - тоже процентов на 50). Просто большого потока интересующихся не было, и информация перестала выходить за пределы "узкого круга"

Board footer

Powered by FluxBB