Перейти к содержанию

[HL Goldsrc]Телепорт относительно направления камеры.


Рекомендуемые сообщения

Всем привет. Столкнулся с проблемой при телепортировании  по координатам относительно камеры,телепортирует но не туда куда направлена камера написал код с пояснениями где ошибка посмотрите.

Буду рад если кто поможет разобраться.

 

Спойлер

[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(orig)
label(flag1) //флаг на срабатывание телепорта
label(dist)  //дистанция телепортирования
registersymbol(flag1) //флаг на срабатывание телепорта
label(xy) //метка для расчета куда телепортироваться
label(pi) //Пи для перевода Градусов в Радианы
label(radx)//Переведенная абсциса
//label(rady)//Переведенная одината // не нужен
label(18O)//180 градусов
newmem: 
cmp [flag1],1
je xy
jmp orig

xy:
mov [flag1],0
fld dword ptr [059769A8]//Загружаем взгляд камеры по Оси Х(в игре расчет
fmul [pi]               //от 0 до 360градусов) и переводим в радианы
fdiv dword ptr [18O]
fstp dword ptr [radx]

//[rady] - не нужен
/*fld dword ptr [059769A4]
fmul [pi]                   //Загружаем взгляд камеры по Оси Y(в игре расчет
fdiv dword ptr [18O]       //от -90 до 90градусов) и переводим в радианы
fstp dword ptr [rady]*/

fld dword ptr [radx]
fcos
fmul dword ptr [dist]
fadd dword ptr [eax+00000088] //При помощи формул пишем новое значение
fstp dword ptr [eax+00000088]    //x2 = x1 + dist*cos(angle);
                                 
fld dword ptr [radx]          //y2 = y1 + dist*sin(angle);   
fsin                                      //X[eax+88] и Y[eax+8C]
fmul dword ptr [dist]
fadd dword ptr [eax+0000008C]
fstp dword ptr [eax+0000008C]
//mov ecx,[eax+00000088]-лишнее
//jmp returnhere-лишнее

orig:
//mov [flag1],0 -лишнее
mov ecx,[eax+00000088]
jmp returnhere

dist:
dd (float)10

radx:
dd 0

rady:
dd 0

flag1:
dd 0

18O:
dd (float)180.0000

pi:
dd (float)3.1415


"hw.dll"+C1638:
jmp newmem
nop
returnhere:


 
 
[DISABLE]
unregistersymbol(flag1)
dealloc(newmem)
"hw.dll"+C1638:
mov ecx,[eax+00000088]
//Alt: db 8B 88 88 00 00 00

 

 

Ссылка на комментарий
Поделиться на другие сайты

Разобрался сам: 

1.все расчеты правильные.

2.камера нужна только от 0 до 360 то есть по оси X

3.Почему то  если mov [flag1],0 стоит вначале то в значение dist загружается не 180 а 128,если поставить в конец то все нормально(не понимаю с чем это связано) может быть кому пригодится.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

28 минут назад, lamalamazz сказал:

3.Почему то  если mov [flag1],0 стоит вначале то в значение dist загружается не 180 а 128,если поставить в конец то все нормально(не понимаю с чем это связано) может быть кому пригодится.

Потому что ты объявил 

 

23 часа назад, lamalamazz сказал:

flag1: db 0 // 1 байт

а в инструкции

 

23 часа назад, lamalamazz сказал:

mov [flag1],0 // 4 байт

исправь 

// либо так
flag1:
dd 0

// либо так
mov byte ptr [flag1],0
либо поставь его в самый низ при объявлении:


18O:
dd (float)180.0000

pi:
dd (float)3.1415

flag1:
db 0



 

 

  • Понравилось 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.