You are not logged in.
Извиняюсь если вопрос не в ту тему) Вобщем у меня возникла проблема пр чтении памяти с Float значением. Мне нужно для своего плагина узнать скорость игры, но ничё не происходит. Делаю так:
//var f : real ; i : integer;
//i:=22050
//...
VirtualProtect(Ptr($00B7CB64),4,4,op);
f:=PDouble($00B7CB64)^;
i:=round(i*f);
//...
Это для аудио плагина чтобы скорость воспроизведения с игровой сравнять) Адресс вроде работает. Не знаю в чём прблема:(
Offline
возможно, проблема в том, что double - 8 байт, а нужно четыре.
Ааа. Не подскажешь какой тип использовать? Я уже много попробовал: PInt, PByte, PDouble и т.п. PFloat на Делфи нет и справочников в инете не нашёл по типам хороших. Полазил в Windows.pas, нарыл:
ULONG = Cardinal;
PULONG = ^ULONG;
А Кардинал, помоему и есть что-то типа Float, но не подошло. Вот не знаю что делать(
Offline
PLongInt. В дельфях LongInt - полный аналог простого dword.
Offline
Хм, интересно:
f:=PLongInt($00B7CB64)^;
//f:=0.5;
i:=round(i*f/100);
Поясняю свои действия - Я попробовал поменять на тип PLongInt, звук не воспроизвёлся вобще. Значение адресса по умолчанию 1.0, ну я поставил опкодом на 0.5, значит значение по идее 0.5. НО ничего не заработало, потом я попробовал со строкой f:=0.5 - идеально. Звук проигрался в 2 раза медленнее, когда же я дописал строку /100, то звук воспроизвелся только при обычной скорости игры... Пока не знаю что это означает, надеюсь вы мне поможете разобраться. Впринципе могу исходники своего Аудио Плеера выложить, если сильно надо будет. Но я этого не собирался делать до выхода финальной версии. Для тех кто ещё не знает что он делает, скажу только одно))):
0B51: $GTA3_WAV_SOUND = play_audio "audio\GTA3\LIB_A1.mp3" direct_path 0 volume 100 position 0.0 loop 0 menu_flag 0 temp 0.0 samplerate 0 pitch 0 reverse 0 synchronize speed 1 volume 1
Ссыль на плагин кину в темку как доделаю версию 1.5, если кого заинтересовало. Ну всё, жду помощи:)
Offline
Single 4 байта
PSingle($ADDR)^ - чтение запись адреса , который преобразован в тип указателя на сингл и в последствии разименован
Offline
А теперь у меня вопрос посложнее. Можно ли определить была ли загружена игра? Может загрузка оставляет за собой какой-нибудь мусор в памяти, по которому можно вычислить была ли недавно загрузка... В памяти игры я ничё поменять не могу в коде загрузки, т.к. нифига не смыслю в асме. Дак вот мне нужно сохранять инфу о звуках вместе с игрой(слот записи можно определить по адрессам 0xC16082 и 0xC16E0A). Слот загрузки можно определить по адрессам 0xC15FB2 и 0xC1601A. Но они всегда постоянны, поэтому даже при обнулении показывают текущий слот(да и кстати потом изменяют своё значение по непонятному для меня алгоритму(возможно последний занятый слот в списке + 1?) ). А как определить загружалась ли игра в ближайшее время не придумал. И нужно чтобы это определялось за минимальное время, иначе в Аудио Плеере возможны баги:rolleyes:
Первоначально расчитывал при запуске каждого опкода на проигрывание/остановку/проверку/установку параметров из Аудио Плеера проверять не загружалась ли игра. Если не определит, то возможно какой-то звук начнёт проигрываться и при последующей загрузке(если еще проверка сработает) он остановится, хотя должен играть по скрипту и загрузятся звуки по текущему слоту из файла... Вот пример бага, так что очень надеюсь на вашу помосчь:rolleyes:
*с этой проблемой справился
Last edited by Viger (17-08-2009 22:08)
Offline