Привет! Поучаствовать в ассембли не получилось - и ладно (может оно и к лучшему Выставляю на обозрение мою интру. Интересно услышать ваше мнение. 2110882987__bublz.zip
Хорошая штука, работает без тормозов на моём древнем компе, что очень порадовало А почему не поучаствовал, если не секрет?
угу мне очень понравилось , особенно сетчатый переливающийся \ сливающийся эфект ... только музыку бы поразнообразнее.. былоб супер
Kozyr__ Ну вот, молодец Для начала неплохо Вот тебе мое мнение (как советы на будущее): 1. Синхронизация с музыкой. Камера и предметы просто обязаны прыгать/ерзать/мигать/или болтать какими-либо другими параметрами под музыку. Хотя бы иногда. Это сразу же смотрится лучше. 2. Не хватает динамики. Продублируй эти комнатки и пусть камера то в одной сидит, то над всеми летает. И пусть они еще разной гаммы будут. 3. Код очень "жирный". Многие вещи излишни. Думай на тему "обезжиривания". У тебя это просто непаханая целина. PS. Как кислотный звучек сгенерил?
Спасибо за отзывы S_T_A_S_ работает без тормозов на моём древнем компе наверное, у тебя не очень древний комп - на Cel-800 притормаживает. А почему не поучаствовал, если не секрет? если обобщенно, то очень не вовремя ушел в отпуск без средств связи (хуже не придумаешь, как раз последние 2 недели перед пати). а вариант выставить интру был - вот только узнал я о нем после отпуска Музон, конечно, подгулявший, но на это у меня есть объективная причина - размер интры правда, _DEN_ говорит, что можно еще где-то взять место, но я пока этого не вижу. _DEN_ Для начала неплохо сенкс советы на будущее с пунктами 1 и 2 согласен, только для их реализации расскажи подробнее про пункт 3. где и как код можно сократить? yureckor у меня слетает Celeron 560, 128MB, видео не 32 битное слетает после установки экрана 800х600х32 (я там проверку не делал, думал ошибок не будет. сори)
Простор для оптимизации... Сразу навскидку: push 0 push 0 ... заменить на xor reg, reg push reg push reg ... Немного можно сэкономить если выкинуть stub'ы (call->jmp [] заменить на call [] ). inc/dec reg8 надо бы позаменять на inc/dec reg32 Код (Text): FF3584294000 push d,[000402984] ; 7 58 pop eax ; на Код (Text): mov eax, [402984] ; 5 cbw/cwde лишние в первом цикле... (и вообще 1й цикл можно хорошо оптимизировать) В целом можно здорово сократить код, возможно даже более 25%
_BC_ c push'ами я игрался - у меня программа хуже паковалась. Немного можно сэкономить если выкинуть stub'ы (call->jmp [] заменить на call [] ). расскажи как (в этом я чайник). inc/dec reg8 надо бы позаменять на inc/dec reg32 точно, прозевал cbw/cwde лишние в первом цикле... почему? там есть байт 0ffh который я приводил к 0ffffffffh В целом можно здорово сократить код, возможно даже более 25% буду работать над собой и кодом
Kozyr__ В масме импорт без заглушек можно например так сделать: Код (Text): extrn _imp__ExitProcess@4 :dword ... call [_imp__ExitProcess@4] Про 1й цикл: Код (Text): xor eax, eax mov al, [edi] shr al, 4 inc al and al, 0EFh dec al cbw cwde Это равносильно Код (Text): add al, 10h shr eax, 4 dec eax
_BC_ В масме импорт без заглушек можно например так сделать спасибо. Про 1й цикл супер, я так не умею
_BC_ Kozyr__ Не все то солнышко что встает Уменьшение исходного кода не гарантирует уменьшение архива. 1. По конвенции stdcall ebx, esi, edi и ebp не трогаются функциями, поэтому: 1.1. В начале проги xor ebx,ebx, а потом, в любом месте где нужен ноль юзаем ebx. 1.2. Остальные регистры тоже можно под что-нибудь приспособить. Главное чтобы код был как можно более однороден. Да простит меня volodya, необходимо снижать энтропию. 2. Вот это API нахрен не надо: ExitProcess RegisterClassExA DefWindowProcA PeekMessageA Можно обойтись и без этого. Соответственно импорт меньше, лишних вызовов нет, а следовательно меньше и размер. 3. Что там у тебя за данные прилеплены к exe-шнику? Только не говори что это звук? Такие вещи генерить надо. В 10 раз эффективнее.
_DEN_ По конвенции stdcall ebx, esi, edi и ebp не трогаются функциями а функции DX не поганят эти регистры (мне кажется, я как-то столкнулся с их изменением... может быть и путаю с чем-то)? Вот это API нахрен не надо а подробнее? ExitProcess - можно заменить просто на ret? DefWindowProcA - заменить на функцию return(TRUE)? а без этих как: RegisterClassExA PeekMessageA ? Что там у тебя за данные прилеплены к exe-шнику? таблицы для вычисления marching cubes (около 2кб).
Kozyr__ Незнаю Я на ГЛ пишу. Проверь, по идее не должны. Конечно. Экономия байт 20 сразу же, если не больше. Они вобще нахер не нужны. Код (Text): invoke CreateWindowEx,... ; Init MainLoop: ; Render invoke GetAsyncKeyState,VK_ESCAPE or eax,eax jz MainLoop Для CreateWindowEx обычто берется edit, как самый которкий халявный класс окна. Плохо, очень плохо. Нельзя такие вещи хранить в коде, 2кб это слишком жирно. Такие штуки генерить надо. Не верю что там нет никакой закономерности.
И еще, в импорте начиная с WinXP название dll-ек можно писать без .dll, тоесть user32 вместо user32.dll Дополнительная экономия при упаковке. Чем MZ резал? Он у тебя длиннее на 4 байта чем надо. Козир! Где взял кислотный звучек??
Поменял я ExitProcess на ret - теперь у меня после завершения проги окно удалаятся, а процесс продолжает висеть Наверное, нужно как-то DX подчистить правильно перед выходом... От RegisterClassExA избавился Плохо, очень плохо. Нельзя такие вещи хранить в коде, 2кб это слишком жирно. Такие штуки генерить надо. Не верю что там нет никакой закономерности. А ты с marching cubes разбирался? Вообще, там таблиц на 4,5 кб - я оставил полезного веса 2 кб + две процедуры, которые приводят данные к нормальному виду. Врядли, конечно, эти таблицы вручную считаны, хотя я себе с трудом представляю как их генерить (может со временем прийдет понимание в импорте начиная с WinXP название dll-ек можно писать без .dll расскажи как это реализовать (я пишу на масме). Чем MZ резал? Он у тебя длиннее на 4 байта чем надо хм... это ты о чем? в упаковке я пользовался связкой 20to4 + Cab Dropper (20to4 оптимизирует, Cab Dropper жмет). Козир! Где взял кислотный звучек?? э-э-э, по-русски я не Козир, а Козырь со звуком длинная история: у меня был очень коряво нагенеренный wav добрый человек подогнал мне код на си обрезанного синтезатора с паттерном (синт by franky//Kolor, используется DirectSound). А играющие звуки называются бочками: затухающие колебания и затухающая амплитуда (вроде, ничего не перепутал
Kozyr__ Нет, не разбирался, но в 1кб на асме можно нагенерить все что угодно. Ну или почти все. Не думаю что там супер-сложные таблицы. рИальные паЦЦаны на фасме пишут Ну а если на масме - просто возьми hiew32 и ручками забей .dll нулями Не, у нас что-то другое было, не помню, надо jekyll-а спросить. Извини, сразу не узнал А я-то думаю что-то лицо больно знакомое Ну по поводу бочек там все ясно, A*sin(B*sqrt(t))*exp(t/tau) к примеру. А вот как формула этого кислотного выглядит?
в 1кб на асме можно нагенерить все что угодно так и есть внял я советам этого треда: сократил импорт и избавился от таблицы, теперь моя интра занимает.... (стыдно признаться) меньше 2,5 кб Теперь у меня куча места написать полноценную интру. Ну а если на масме - просто возьми hiew32 и ручками забей .dll нулями забить нулями дело не хитрое, а на фасме можно вручную функции импорта задавать? А я-то думаю что-то лицо больно знакомое А вот как формула этого кислотного выглядит? вложил исходник - смотри. Я в нем формулы бочки, которую ты привел, не вижу (возможно формула как суслик - ее не видно, но она есть 1680766139__sintez.cpp