bublz. 4k intro

Тема в разделе "WASM.DirectX", создана пользователем Kozyr__, 3 авг 2005.

  1. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    Привет!



    Поучаствовать в ассембли не получилось - и ладно (может оно и к лучшему ;)



    Выставляю на обозрение мою интру. Интересно услышать ваше мнение.

    [​IMG] 2110882987__bublz.zip
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Хорошая штука, работает без тормозов на моём древнем компе, что очень порадовало :) А почему не поучаствовал, если не секрет?
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    угу мне очень понравилось , особенно сетчатый переливающийся \ сливающийся эфект ...

    только музыку бы поразнообразнее.. былоб супер :)
     
  4. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Интра классная, но музон действительно нудноват.
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Рульный эффект, а музон не очень... Честно говоря, даже без музона было бы лучше.
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    чего вы на музон взъелись, это ж 4K!
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Kozyr__



    Ну вот, молодец :) Для начала неплохо :derisive:



    Вот тебе мое мнение (как советы на будущее):



    1. Синхронизация с музыкой. Камера и предметы просто обязаны прыгать/ерзать/мигать/или болтать какими-либо другими параметрами под музыку. Хотя бы иногда. Это сразу же смотрится лучше.

    2. Не хватает динамики. Продублируй эти комнатки и пусть камера то в одной сидит, то над всеми летает. И пусть они еще разной гаммы будут.

    3. Код очень "жирный". Многие вещи излишни. Думай на тему "обезжиривания". У тебя это просто непаханая целина.



    PS. Как кислотный звучек сгенерил? :)
     
  8. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
  9. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    Спасибо за отзывы :)



    S_T_A_S_

    работает без тормозов на моём древнем компе

    наверное, у тебя не очень древний комп :) - на Cel-800 притормаживает.



    А почему не поучаствовал, если не секрет?

    если обобщенно, то очень не вовремя ушел в отпуск без средств связи (хуже не придумаешь, как раз последние 2 недели перед пати). а вариант выставить интру был - вот только узнал я о нем после отпуска :)



    Музон, конечно, подгулявший, но на это у меня есть объективная причина - размер интры ;) правда, _DEN_ говорит, что можно еще где-то взять место, но я пока этого не вижу.



    _DEN_

    Для начала неплохо :derisive:

    сенкс :)



    советы на будущее

    с пунктами 1 и 2 согласен, только для их реализации расскажи подробнее про пункт 3. где и как код можно сократить?



    yureckor

    у меня слетает Celeron 560, 128MB, видео не 32 битное

    слетает после установки экрана 800х600х32 (я там проверку не делал, думал ошибок не будет. сори)
     
  10. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Простор для оптимизации...



    Сразу навскидку:



    push 0

    push 0

    ...



    заменить на



    xor reg, reg

    push reg

    push reg

    ...





    Немного можно сэкономить если выкинуть stub'ы (call->jmp [] заменить на call [] ).





    inc/dec reg8 надо бы позаменять на inc/dec reg32




    Код (Text):
    1. FF3584294000    push      d,[000402984] ; 7
    2. 58      pop       eax       ;




    на
    Код (Text):
    1.         mov eax, [402984]   ; 5




    cbw/cwde лишние в первом цикле... (и вообще 1й цикл можно хорошо оптимизировать)





    В целом можно здорово сократить код, возможно даже более 25%
     
  11. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    _BC_

    c push'ами я игрался - у меня программа хуже паковалась.



    Немного можно сэкономить если выкинуть stub'ы (call->jmp [] заменить на call [] ).

    расскажи как (в этом я чайник).



    inc/dec reg8 надо бы позаменять на inc/dec reg32

    точно, прозевал :)



    cbw/cwde лишние в первом цикле...

    почему? там есть байт 0ffh который я приводил к 0ffffffffh



    В целом можно здорово сократить код, возможно даже более 25%

    буду работать над собой и кодом :)
     
  12. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Kozyr__



    В масме импорт без заглушек можно например так сделать:


    Код (Text):
    1. extrn   _imp__ExitProcess@4 :dword
    2.  
    3.         ...
    4.         call    [_imp__ExitProcess@4]








    Про 1й цикл:


    Код (Text):
    1.         xor eax, eax
    2.         mov al, [edi]
    3.  
    4.  
    5.         shr al, 4
    6.         inc al
    7.         and al, 0EFh
    8.         dec al
    9.         cbw
    10.         cwde




    Это равносильно


    Код (Text):
    1.         add al, 10h
    2.         shr eax, 4
    3.         dec eax
     
  13. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    _BC_

    В масме импорт без заглушек можно например так сделать

    спасибо.



    Про 1й цикл

    супер, я так не умею :)
     
  14. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _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 раз эффективнее.
     
  15. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    _DEN_

    По конвенции stdcall ebx, esi, edi и ebp не трогаются функциями

    а функции DX не поганят эти регистры (мне кажется, я как-то столкнулся с их изменением... может быть и путаю с чем-то)?



    Вот это API нахрен не надо

    а подробнее? :)



    ExitProcess - можно заменить просто на ret?

    DefWindowProcA - заменить на функцию return(TRUE)?



    а без этих как:

    RegisterClassExA

    PeekMessageA

    ?



    Что там у тебя за данные прилеплены к exe-шнику?

    таблицы для вычисления marching cubes (около 2кб).
     
  16. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Kozyr__





    Незнаю :) Я на ГЛ пишу. Проверь, по идее не должны.







    Конечно. Экономия байт 20 сразу же, если не больше.







    Они вобще нахер не нужны.
    Код (Text):
    1.  
    2.     invoke CreateWindowEx,...
    3.     ; Init
    4. MainLoop:
    5.     ; Render
    6.     invoke GetAsyncKeyState,VK_ESCAPE
    7.     or eax,eax
    8.     jz MainLoop


    Для CreateWindowEx обычто берется edit, как самый которкий халявный класс окна.







    Плохо, очень плохо. Нельзя такие вещи хранить в коде, 2кб это слишком жирно. Такие штуки генерить надо. Не верю что там нет никакой закономерности.
     
  17. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    И еще, в импорте начиная с WinXP название dll-ек можно писать без .dll, тоесть

    user32

    вместо

    user32.dll

    Дополнительная экономия при упаковке.



    Чем MZ резал? Он у тебя длиннее на 4 байта чем надо.



    Козир! :) Где взял кислотный звучек?? :)
     
  18. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    Поменял я ExitProcess на ret - теперь у меня после завершения проги окно удалаятся, а процесс продолжает висеть :dntknw:

    Наверное, нужно как-то DX подчистить правильно перед выходом...

    От RegisterClassExA избавился :)



    Плохо, очень плохо. Нельзя такие вещи хранить в коде, 2кб это слишком жирно. Такие штуки генерить надо. Не верю что там нет никакой закономерности.

    А ты с marching cubes разбирался? Вообще, там таблиц на 4,5 кб - я оставил полезного веса 2 кб + две процедуры, которые приводят данные к нормальному виду.

    Врядли, конечно, эти таблицы вручную считаны, хотя я себе с трудом представляю как их генерить (может со временем прийдет понимание ;)



    в импорте начиная с WinXP название dll-ек можно писать без .dll

    расскажи как это реализовать (я пишу на масме).



    Чем MZ резал? Он у тебя длиннее на 4 байта чем надо

    хм... это ты о чем? :)

    в упаковке я пользовался связкой 20to4 + Cab Dropper (20to4 оптимизирует, Cab Dropper жмет).



    Козир! :) Где взял кислотный звучек?? :)

    э-э-э, по-русски я не Козир, а Козырь :)

    со звуком длинная история: у меня был очень коряво нагенеренный wav :) добрый человек подогнал мне код на си обрезанного синтезатора с паттерном (синт by franky//Kolor, используется DirectSound).

    А играющие звуки называются бочками: затухающие колебания и затухающая амплитуда (вроде, ничего не перепутал :)
     
  19. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Kozyr__





    Нет, не разбирался, но в 1кб на асме можно нагенерить все что угодно. Ну или почти все. Не думаю что там супер-сложные таблицы.







    рИальные паЦЦаны на фасме пишут :derisive: Ну а если на масме - просто возьми hiew32 и ручками забей .dll нулями :)







    Не, у нас что-то другое было, не помню, надо jekyll-а спросить.





    Извини, сразу не узнал :) А я-то думаю что-то лицо больно знакомое :derisive:



    Ну по поводу бочек там все ясно, A*sin(B*sqrt(t))*exp(t/tau) к примеру. А вот как формула этого кислотного выглядит?
     
  20. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    в 1кб на асме можно нагенерить все что угодно

    так и есть :)

    внял я советам этого треда: сократил импорт и избавился от таблицы, теперь моя интра занимает.... (стыдно признаться) меньше 2,5 кб :) Теперь у меня куча места написать полноценную интру.



    Ну а если на масме - просто возьми hiew32 и ручками забей .dll нулями

    забить нулями дело не хитрое, а на фасме можно вручную функции импорта задавать?



    А я-то думаю что-то лицо больно знакомое

    :)



    А вот как формула этого кислотного выглядит?

    вложил исходник - смотри. Я в нем формулы бочки, которую ты привел, не вижу (возможно формула как суслик - ее не видно, но она есть :)

    [​IMG] 1680766139__sintez.cpp