lamalamazz Опубликовано 20 января, 2019 Поделиться Опубликовано 20 января, 2019 Всем привет. Столкнулся с проблемой при телепортировании по координатам относительно камеры,телепортирует но не туда куда направлена камера написал код с пояснениями где ошибка посмотрите. Буду рад если кто поможет разобраться. Спойлер [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 Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamazz Опубликовано 21 января, 2019 Автор Поделиться Опубликовано 21 января, 2019 Разобрался сам: 1.все расчеты правильные. 2.камера нужна только от 0 до 360 то есть по оси X 3.Почему то если mov [flag1],0 стоит вначале то в значение dist загружается не 180 а 128,если поставить в конец то все нормально(не понимаю с чем это связано) может быть кому пригодится. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 21 января, 2019 Поделиться Опубликовано 21 января, 2019 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 21 января, 2019 Поделиться Опубликовано 21 января, 2019 ЗЫ: поправил скрипт в первом посте. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения