#1 14-05-2009 02:43

Viger
Registered: 14-05-2009
Posts: 24

[Delphi] Нужна помощь по памяти

Извиняюсь если вопрос не в ту тему) Вобщем у меня возникла проблема пр чтении памяти с Float значением. Мне нужно для своего плагина узнать скорость игры, но ничё не происходит. Делаю так:

//var f : real ; i : integer;
//i:=22050
//...
VirtualProtect(Ptr($00B7CB64),4,4,op);
f:=PDouble($00B7CB64)^;
i:=round(i*f);
//...

Это для аудио плагина чтобы скорость воспроизведения с игровой сравнять) Адресс вроде работает. Не знаю в чём прблема:(

Offline

#2 14-05-2009 08:07

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: [Delphi] Нужна помощь по памяти

возможно, проблема в том, что double - 8 байт, а нужно четыре.

Offline

#3 14-05-2009 10:17

Viger
Registered: 14-05-2009
Posts: 24

Re: [Delphi] Нужна помощь по памяти

listener wrote:

возможно, проблема в том, что double - 8 байт, а нужно четыре.

Ааа. Не подскажешь какой тип использовать? Я уже много попробовал: PInt, PByte, PDouble и т.п. PFloat на Делфи нет и справочников в инете не нашёл по типам хороших. Полазил в Windows.pas, нарыл:

ULONG = Cardinal;
PULONG = ^ULONG;

А Кардинал, помоему и есть что-то типа Float, но не подошло. Вот не знаю что делать(

Offline

#4 14-05-2009 11:07

Alien
Registered: 12-10-2008
Posts: 564

Re: [Delphi] Нужна помощь по памяти

PLongInt. В дельфях LongInt - полный аналог простого dword.

Offline

#5 14-05-2009 11:28

Viger
Registered: 14-05-2009
Posts: 24

Re: [Delphi] Нужна помощь по памяти

Хм, интересно:

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

#6 14-05-2009 11:32

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: [Delphi] Нужна помощь по памяти

Single 4 байта
PSingle($ADDR)^ - чтение запись адреса , который преобразован в тип указателя на сингл и в последствии разименован

Offline

#7 14-08-2009 16:33

Viger
Registered: 14-05-2009
Posts: 24

Re: [Delphi] Нужна помощь по памяти

А теперь у меня вопрос посложнее. Можно ли определить была ли загружена игра? Может загрузка оставляет за собой какой-нибудь мусор в памяти, по которому можно вычислить была ли недавно загрузка... В памяти игры я ничё поменять не могу в коде загрузки, т.к. нифига не смыслю в асме. Дак вот мне нужно сохранять инфу о звуках вместе с игрой(слот записи можно определить по адрессам 0xC16082 и 0xC16E0A). Слот загрузки можно определить по адрессам 0xC15FB2 и 0xC1601A. Но они всегда постоянны, поэтому даже при обнулении показывают текущий слот(да и кстати потом изменяют своё значение по непонятному для меня алгоритму(возможно последний занятый слот в списке + 1?) ). А как определить загружалась ли игра в ближайшее время не придумал. И нужно чтобы это определялось за  минимальное время, иначе в Аудио Плеере возможны баги:rolleyes:

Первоначально расчитывал при запуске каждого опкода на проигрывание/остановку/проверку/установку параметров из Аудио Плеера проверять не загружалась ли игра. Если не определит, то возможно какой-то звук начнёт проигрываться и при последующей загрузке(если еще проверка сработает) он остановится, хотя должен играть по скрипту и загрузятся звуки по текущему слоту из файла... Вот пример бага, так что очень надеюсь на вашу помосчь:rolleyes:

*с этой проблемой справился

Last edited by Viger (17-08-2009 22:08)

Offline

Board footer

Powered by FluxBB