[size=14][b][url=http://klimaleksus.narod2.ru/Other/POSTS/Drui_1.PNG][color=green]Первый комментарий от Drui7[/color][/url][/b][/size] [r][i][color=gray][url=http://klimaleksus.narod2.ru/Other/realms/135.txt]#135[/url], 30.05.12[/color][/i][/r] Drui7. Вы программист. Я это понял по методу изложения сути. Но всё-таки вы как-то странно её излагаете… Словно куда-то очень-очень спешите! [quote=Drui7]вот что нашел: тайловый редактор … мб поможет[/quote] Скачал-проверил. А что так слабоват? Максимум – 4 бита на пиксель. А у нас все 8 да 15! Прикольные развороты (которые проще и понятнее выполнить в любом нормальном редакторе). Странный метод открытия… я не смог вытащить графику ни из одного нашего файла. В применение палитры я вообще не врубился. PVV был проще и понятнее! Почему горизонтальная развёртка так ограничена? Здесь – 16 пикселей; PVV – 1024 пикселя. Разработчики не заботились об универсальности. [quote=Drui7]вроде бы как та программа на ABS паскале,но что то более продвинутое.[/quote] Чего? Кто – я? АВС паскаль? Удобно? Да заводской PVV + мой PGG = лекарство от [s]головной[/s] тайловой боли! [quote=Drui7]в начале обсуждений видел, что инициатор всего этого хотел бы wad распаковщик[/quote] Ёлки… фразы несогласованно-непонятные как у DrWho… «Инициатор» – это я. (Или вы кого имели в виду?) Ещё раз: [quote=Drui7]в начале обсуждений видел, что инициатор всего этого хотел бы wad распаковщик переписать на другой язык программирования,но что [u]то не увидел удалось ли?[/u][/quote] Зачем вам другой язык? Чем плоха платформа GML? Ну есть В-Ад-Перемещатель на АВС, но он слабоват по сравнению с AWM. [quote=Drui7]можно вкраце узнать [u]по каким именно "признакам" он делит на файлы?[/u][/quote] Что? Кто? Кого делит? WAD структура. Вы читали начало темы, где я как раз её описывал? Короче… Если быстро. Есть файл. Он как бы архив без сжатия. Имеет заголовок – таблицу размещения и последовательно перечисленные файлы без имён, только с порядковым номером. Файлы описываются следующим образом: Первые четыре байта заголовка (unsigned integer pointer DWORD little-endian – называйте как хотите) обозначают адрес первого СУБФАЙЛА (субфайлом называем заархивированный файл) в пространстве WAD. То есть это по сути размер самой шапки. Следующие четыре байта – размер первого субфайла. Третья четвёрка – адрес начало второго субфайла. Обычно равен {адрес предыдущего + размер предыдущего} Ещё четвёрка – его размер. И так до тех пор, пока мы не считаем количество байт шапки (значение первой четвёрки) или пока тупо одно из чисел не будет равно нулю. Ошибки: – Адрес[n]+Размер[n] не равен Адрес[n+1]; – Адрес[n] больше чем Адрес[n+1]; – Адрес[n]+Размер[n] больше объёма WAD. – Адрес[n] меньше чем Текущий считываемый байт шапки, но не Ноль. – Адрес[n] больше нуля, а Размер[n] равен нулю. Все эти ошибки нефатальные, то есть извлечение можно продолжать, игнорируя их. Также WAD может не содержать размеров, а только адреса. Методы работы: 1) Создание-разбиение. Программа считывает шапку WAD и копирует данные по адресам и размерам в новые отдельные файлы. Или собирает последовательно файлы в новый WAD, оставив сперва {n*8} (n-заранее известное максимальное количество файлов в архиве) нулей. А при записи очередного файла просто вносит его адрес и размер в заголовок. 2) Импорт-экспорт. Программа берёт существующий WAD. Переходит по адресу {(n-1)*8} (n-номер нужного субфайла, начиная с «1») и считывает адрес-размер субфайла. Переходит к нему и копирует в файл. Наоборот, копирует файл по адресам WAD, затирая старые данные, но при этом нельзя запихать больше, чем там отведено места. Но зачем вам это знать, словно вы хотите свой менеджер написать! Берите мой. Исходник есть. Поковыряйте, там весь алгоритм. [quote=Drui7]а то в пм ответа нет и нет =([/quote] Где нет ответа? [quote=Drui7]и может кто то показать [u]заголовки тех самых wad файлов[/u] ? (скрин с винхекса) . а то у меня есть подозрения,что аналог такого Wad вшит в архив,которым я занимаюсь[/quote] Хосподи… Их скриншотами завалена эта тема. Но ладно, вот вам новые: http://Klimaleksus.narod2.ru/Files/STARS/HEX1.PNG http://Klimaleksus.narod2.ru/Files/STARS/HEX2.PNG Первый – заметьте 32bit(+) Второй – сравните offset. [quote=Drui7]upd: увидел на сайте пост:[/quote] Вау, вы его читали! И остались в непонятках!? [quote=Drui7]почему BGR?! т.е. если байты выставить не little endian,а big endian (местами поменять), то получится RRR-GGG-BBB-(STP) ! а у тебя (STP)-BBB-GGG-RRR! (если поменять)[/quote] Я сделал как оно есть. Главное что работает! [quote=Drui7]поясню: STP - индекс прозрачности (документацию я читал и в ней RGB,а не BGR как у тебя)[/quote] Ну хоть буду знать, что это за бит. Кстати, как вы поняли, при разбивке на 4 бит и 8 бит он уже является неотъемлемой частью тайла, а не атавизмом. [quote=Drui7][u]не говори,что ты прав потому что прав.[/u] а скажи почему у тебя не как в документации.[/quote] Хей! Я разве похож на человека, который может так сказать!? Обидно даже… [quote=Drui7]еще твои слова:[/quote] Интересно, а как вы по-другому приведёте 16 миллионов к 32 тысячам? [quote=Drui7]зачем так? получется 5 бит, т.е. в 10ричной [0..31]. берем round(sqrt(sqrt(2^([0..31]+1))))-1 и получаем [0..255]. на мой взгляд это более корректно,чем умножение и деление.[/quote] Ни фига не понял. Так-с… [quote=Drui7]как то опровергнешь?[/quote] Да мне опровергать нечего! Я лучше объясню всё ещё раз. «GGGR-RRRR=0BBB-BBGG» Вы понимаете ЭТО? Я, например, с трудом. Я взял пять зелёных карандашей, пять красных, пять синих и один простой, чтобы имитировать 16 бит. Пытался по-разному разложить их на столе, чтобы получить УПОРЯДОЧЕННУЮ структуру формата цвета. Для меня это RGB. Красный-зелёный-синий. Стандарт. Почему нет? Смотрим, как ЧИТАЮТСЯ биты. 1) Берём ПЕРВЫЙ байт. 2) Считываем биты С КОНЦА к началу. 3) Берём ВТОРОЙ байт. 4) Считываем биты С КОНЦА к началу. Я записал RRRRRGGGGGBBBBB0 в таком формате: «GGGR-RRRR=0BBB-BBGG». Иллюстрация по шагам (по четыре бита в каждом шаге): 1) – RRRR 2) – RRRR-RGGG 3) – RRRR-RGGG=GGBB 4) – RRRR-RGGG=GGBB-BBB0. Вот и вся техника. И прямо в этот миг появился PVV! Я создал две мега-палитры (массивы записи двухбайтовых целых в big-endian и little-endian). Попробовал на них – работает. Сам набрал некую последовательность битов в WinHex (через Data Interpreter) и предсказал цвет. Результат полностью подтвердился. [quote=Drui7] зы: я не знаю как верно конвертировать 32 в 256, скорее всего алгоритма нет[/quote] Ну вы монстр… А как цветное изображение привести к серому? А как полноцветное сделать VGA? [quote=Drui7]тем не менее рискну предположить вот так,ибо просто умножить на 256/32=8 немного не то...теряется оч большое кол-во оттенков и теряется так ужасно равномерно...пфф, лучше задать степенную функцию для тех же пределов[/quote] Именно что: «РАВНОМЕРНО». Я приводил яркое фото к 15bpp палитре своим методом и почти не заметил искажения. Только если конвертировать плавные градиенты. Конвертация. У нас есть две множества цветов: [0..31] и [0..255], согласны? Они пересекаются (0=0 {чёрный}, 31=255 {белый}). Но при этом второй диапазон содержит больше оттенков, чем первый (например, как метр в измерении полевой линейкой с чёрточками в 1см и чертёжной линейкой с чёрточками в 1мм) Цель: сопоставить одно множество другому с наименьшими потерями. Ясно, что тупо приравнять не получится. Мы находим ПРОЦЕНТ интенсивности. Например, «18» по 5бит чему равно для 8бит? Максимальное значение нашего диапазона – 31. Находим процентное отношение: 18/31*100%= 58,0645161290…% Более половины. Теперь находим процент от числа для максимума второго множества (255): 58,0645161290…%*255/100%=[b]148,064516128…[/b] Округляем до целого: «148». Результат: 18 по 5бит максимально похоже на цвет 148 по 8бит. Точно так же и обратное преобразование. Но если вам и сейчас не ясно, приведу тупо явное сопоставление: [spoiler][c]5 -> 8 0=0 1=8 2=16 3=25 4=33 5=41 6=49 7=58 8=66 9=74 10=82 11=90 12=99 13=107 14=115 15=123 16=132 17=140 18=148 19=156 20=165 21=173 22=181 23=189 24=197 25=206 26=214 27=222 28=230 29=239 30=247 31=255 [/c]8 -> 5[c] 0=0 1=0 2=0 3=0 4=0 5=1 6=1 7=1 8=1 9=1 10=1 11=1 12=1 13=2 14=2 15=2 16=2 17=2 18=2 19=2 20=2 21=3 22=3 23=3 24=3 25=3 26=3 27=3 28=3 29=4 30=4 31=4 32=4 33=4 34=4 35=4 36=4 37=4 38=5 39=5 40=5 41=5 42=5 43=5 44=5 45=5 46=6 47=6 48=6 49=6 50=6 51=6 52=6 53=6 54=7 55=7 56=7 57=7 58=7 59=7 60=7 61=7 62=8 63=8 64=8 65=8 66=8 67=8 68=8 69=8 70=9 71=9 72=9 73=9 74=9 75=9 76=9 77=9 78=9 79=10 80=10 81=10 82=10 83=10 84=10 85=10 86=10 87=11 88=11 89=11 90=11 91=11 92=11 93=11 94=11 95=12 96=12 97=12 98=12 99=12 100=12 101=12 102=12 103=13 104=13 105=13 106=13 107=13 108=13 109=13 110=13 111=13 112=14 113=14 114=14 115=14 116=14 117=14 118=14 119=14 120=15 121=15 122=15 123=15 124=15 125=15 126=15 127=15 128=16 129=16 130=16 131=16 132=16 133=16 134=16 135=16 136=17 137=17 138=17 139=17 140=17 141=17 142=17 143=17 144=18 145=18 146=18 147=18 148=18 149=18 150=18 151=18 152=18 153=19 154=19 155=19 156=19 157=19 158=19 159=19 160=19 161=20 162=20 163=20 164=20 165=20 166=20 167=20 168=20 169=21 170=21 171=21 172=21 173=21 174=21 175=21 176=21 177=22 178=22 179=22 180=22 181=22 182=22 183=22 184=22 185=22 186=23 187=23 188=23 189=23 190=23 191=23 192=23 193=23 194=24 195=24 196=24 197=24 198=24 199=24 200=24 201=24 202=25 203=25 204=25 205=25 206=25 207=25 208=25 209=25 210=26 211=26 212=26 213=26 214=26 215=26 216=26 217=26 218=27 219=27 220=27 221=27 222=27 223=27 224=27 225=27 226=27 227=28 228=28 229=28 230=28 231=28 232=28 233=28 234=28 235=29 236=29 237=29 238=29 239=29 240=29 241=29 242=29 243=30 244=30 245=30 246=30 247=30 248=30 249=30 250=30 251=31 252=31 253=31 254=31 255=31 И вот вам GML код: [/c] [code] { game_end(); f=file_text_open_write("C:\Drui7.txt"); // Из пяти в восемь: in=5; out=8; max_in=power(2,in)-1; max_out=power(2,out)-1; for (i=0;i<=max_in;i+=1){ str=string(i)+"="; val=i/max_in*max_out; str=str+string(round(val)); file_text_write_string(f,str); file_text_writeln(f)} file_text_writeln(f) // Из восьми в пять: in=8; out=5; max_in=power(2,in)-1; max_out=power(2,out)-1; for (i=0;i<=max_in;i+=1){ str=string(i)+"="; val=i/max_in*max_out; str=str+string(round(val)); file_text_write_string(f,str); file_text_writeln(f)} file_text_close(f); exit } [/code] [/spoiler] Но я не понимаю, зачем вам заново изобретать велосипед, если есть PVV и PGG? Исходные коды тоже. Ковыряйте! А нам нужно распотрошить Crash Bash. И хоть PVV читает VRAM, я пока открытых текстур не обнаружил, но текст с лёгкостью. [quote=gitgeg]Ну, если сможете поменять предметы местами, то почему бы и музыку не заменить?[/quote] О, как ни странно, но это я понял. А спросил же я вот что: так чё за музыка? Я ни о чём таком не знаю, не видел. А её как-нибудь прослушать можно, чтобы я имел вообще представление о том, что вы предлагаете? Впихнуть-то удастся всё что угодно, но вот «подойдёт» ли? Я не могу ответить ни «да» ни «нет», пока не увижу саму эту музыку. Но изменить музыку в игре я и сам желаю. 1) В титрах. Вернее, хочу её обработанную версию. «Ремикс»! 2) Можно «откромсать» часть трека какого-нибудь уровня, в котором музыка часто повторяет себя. И аккуратно дополнить нашей. Но только: в Greatest Hits и так хорошая музыка! Ей нельзя жертвовать! P.S [i]3215-4321=0543-2121[/i] Тут что-то напутано. Должно быть: [s][b]3215-4321=0543-21[u]45[/u][/b][/s] Блин, опять не так! Нужно: [u][b]3215-4321=0543-2154[/b][/u] [size=14][b][url=http://klimaleksus.narod2.ru/Other/POSTS/Drui7.rar][color=green]Все удалённые комментарии Drui7[/color][/url][/b][/size]