Bromvol Опубликовано 25 декабря, 2012 Поделиться Опубликовано 25 декабря, 2012 Доброго времени суток уважаемые геймхакеры!!!У меня вопрос как поменять тип значения в скрипте СЕ?Я ломал полосу жызни и там инструкция MOVSS [EBX+100] значение в типе float,а максимальное здоровье находится по смещению [EBX+1DC] и его тип int.Когда сделать запись максимума в инструкцию здоровья, то присваевается какая-то белеберда, а не максимум.Кто с этим стыкался помогите пожалуйста. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexander-mx Опубликовано 25 декабря, 2012 Поделиться Опубликовано 25 декабря, 2012 может так:mov [EBX+100], (float)1000mov [EBX+1DC], (int)1000 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 декабря, 2012 Поделиться Опубликовано 26 декабря, 2012 Наверно, такpush 0fstp [esp] // сохранение ST0 FPU, esp увеличился при push на 4fild [ebx+1dc] // загрузка intfstp [ebx+100] // запись как floatfld [esp] // восстанавливаем ST0sub esp, 04 // возвращаем esp Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 26 декабря, 2012 Поделиться Опубликовано 26 декабря, 2012 float 2 int:The easy way to get SSE output is to just convert to integer, like this:movss xmm3,[pi]; load up constantaddss xmm3,xmm3 ; add pi to itselfcvtss2si eax,xmm3 ; round to integerretsection .datapi: dd 3.14159265358979 ; constant Ссылка на комментарий Поделиться на другие сайты Поделиться
SnedS91 Опубликовано 26 декабря, 2012 Поделиться Опубликовано 26 декабря, 2012 должно и так работать:fild [ebx+1DC]fstp [ebx+100] Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 26 декабря, 2012 Автор Поделиться Опубликовано 26 декабря, 2012 Спасибо ребята.Этот вариант заработал:fild [ebx+1dc] // загрузка intfstp [ebx+100] // запись как floatПример keng'a мне непонятен. round на сколько я помню это округление, а не конвертация типа.Или я чего-то не знаю по round.А как сделать конвертацию из типа float в тип int? Ссылка на комментарий Поделиться на другие сайты Поделиться
SnedS91 Опубликовано 26 декабря, 2012 Поделиться Опубликовано 26 декабря, 2012 почти так же: fld [xxx] // загрузка floatfistp [yyy] // запись как int Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 26 декабря, 2012 Поделиться Опубликовано 26 декабря, 2012 В 26.12.2012 в 08:47, Bromvol сказал: Спасибо ребята.Этот вариант заработал:fild [ebx+1dc] // загрузка intfstp [ebx+100] // запись как floatПример keng'a мне непонятен. round на сколько я помню это округление, а не конвертация типа.Или я чего-то не знаю по round.А как сделать конвертацию из типа float в тип int?В том вся штука, что int - это целое, а float - дробное. Округление как раз затем и используется. Ну и я подумал, что тебе нужны SSE, а не FPU-инструкции. Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 26 декабря, 2012 Автор Поделиться Опубликовано 26 декабря, 2012 Спасибо ребята!!! Мне очень помогло.Тему можно закрывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения