Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
Author Попробую. Но, если честно, не совсем представляю, как это будет выглядеть. Функция (MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer) какая-то сильно навороченная. Я до конца не понимаю, как она пашет...
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
4) Обработка ситуаций, когда файла с сохранениями нет, когда он некорректный (любой из параметров за пределами допустимого).
Практически сделал. Любое редактирование (или отсутствие) файла приводит к его перезаписи дефолтными параметрами (первый уровень, средняя сложность, пистолет, 50 патронов, 100% здоровья). Единственно, неправильно отрабатывает, когда пытаешься загрузить такое "запорченное" сохранение после смерти. Загружается второй уровень, а не первый, и музыка играет другая, не соответствующая данному уровню. В принципе, на эту недоработку можно забить.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Author Было бы гораздо круче, если б одолели Rezfile. Вчера еще раз попросил Ребекку откомпилить ее старый makerez. Но у нее мало времени, это понятно. Обещала сделать, но когда это произойдет и произойдет ли... Занятная штука получается при попытке записи Demo в память приставки. Я уже писал об этом. 3DO Doom sources released Запись в буфер и последующее проигрывание записанных действий игрока работает. А в файл пишет совсем другое. Такое ощущение, что туда пишется чтение/запись каких-то чанков и прочей служебной ереси. Потом выложу скрины. Понятно, что это ошибка, что я пишу туда что-то не то, но фишка интересная.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Интересно, а как эти демки пишутся? Выставляется некий флаг записи DemoRecording = TRUE потом игра запускается в штатном режиме через MiniLoop, в MiniLoop при выставленном флаге DemoRecording вызывается
Convert a joypad response into a network joypad record. This is to compensate the fact that differant computers have differant hot keys for motion control.
И в буфер попадает этот конверт. При проигрывании всё ок, оно обратно конвертится, а может этот конверт не нужен? Хотя в самой функции я не увидел ничего такого... В том же Ягуаре никаких конвертов не делается (а там демки пашут?, я не в курсе)
Может, и не нужен, ведь проигрывается демка G_PlayDemoPtr-ом. А там просто приравнивается открытый rDemo1(2) буферу DemoBuffer, куда, собственно, и пишется вся ботва при записи. Вот только я писал постом выше, что эта ботва непохожа на нажатия клавиш. Скорее всего, нужно будет использовать какой-то аналог или саму LocalToNet.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Yaranga Все правильно ты ответил, спасибо за инфу. Значит, есть-таки... В нашем Rezfile, скорее всего, эти файлы демок и лежат: третий и шестой уровни. Ну, как уже я говорил, движения игрока хаотичные. Но общая черта все же есть. В начале шестого уровня игрок идет в угол за винтовкой. У нас он тоже туда "идет". Точнее, пытается.
Добавлено спустя 4 часа 51 минуту 47 секунд: Похоже победил. Сейчас пишутся нажатия кнопок. Остается скопировать эти байты в REZFILE и проверить работоспособность. Но то, что пишутся туда клавиши, это точно. А, ну еще нужно разобраться, чтобы реагировало на выставленный уровень и сложность и эти же параметры писались в этот же файл. Но если разобраться не получится, то можно легко дописать руками.
А вот картинки "дебаггера". Если кто разберется, то может оказаться полезным.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Демки это файлы D0143 и D0144. В них первые 4 байта это скилл, следующие 4 байта номер карты. Дальше должны идти команды по 2 байта каждая. С форматом команд пока не разбирался.
aliast Да, это я уже понял. Могу сделать табличку сопоставления байт- какая клавиша нажата. Там идут байты, разделенные несколькими нулями. Ненулевые байты и есть нажатия. Все просто. Но писать их вручную никакого смысла нет. И в автоматическом режиме пишется нормально.
Добавлено спустя 10 часов 6 минут 15 секунд: Вот соответствие байт и кнопок в Demo-файлах.
Up - 40 00 00 00 Down - 80 00 00 00 Right - 20 00 00 00 Left - 10 00 00 00 A - 04 00 00 00 B - 02 00 00 00 C - 08 00 00 00 Right Shift - 00 40 00 00 Left Shift - 00 20 00 00 Stop - 00 80 00 00 Start - 01 00 00 00
Получилось записать и номер уровня и сложность. Получился полноценный записанный демо-файл. Да, на каждое нажатие отводится по 4 байта. Если нажато одновременно 2 кнопки (при переключении оружия, например) то в эти 4 байта записываются обе клавиши.
Добавлено спустя 1 час 32 минуты 46 секунд: Демки работают. Взял из сохраненного в NVRAM файла свои данные, скопипастил в начало D0143. Мой файл получился меньше, но все отрабатывает корректно. Ура!
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Напиши, какие рекомендации по содержанию демок. Уровень/сложность/длительность/что-нибудь еще... Хочу записать начисто, чтобы к этому вопросу уже не возвращаться.
Добавлено спустя 43 минуты 22 секунды:
Author писал(а):
Заведи премененную такого же типа как и функция, приравняй ей значение функции, а потом сравнивай уже.
Ура! Сработало! Правда, я не понял, почему сработало... Сделал так:
if (MainLoop==ga_loading) { /* Process the menu */ S_StopSong(); G_InitNew_LOAD(gameskill,gamemap); /* Init the new game */ G_RunGame(); /* Play the game */ }
if (MainLoop==ga_completed) { /* Process the menu */ S_StopSong(); G_InitNew(StartSkill,StartMap); /* Init the new game */ G_RunGame(); /* Play the game */ }
}
Добавлено спустя 22 минуты 22 секунды: Из to do: 1) Сделать загрузку главного меню из игры, чтобы не приходилось перезагружать диск. 2) Уведомлять пользователя об успешном сохранении. Тут, скорее всего, потребуется измененный REZFILE. 3) Добавить украшавости. Пока не скажу, какие. Если получится, порадую.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
3) Добавить украшавости. Пока не скажу, какие. Если получится, порадую.
Таки, интересно, что...
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Напиши, какие рекомендации по содержанию демок. Уровень/сложность/длительность/что-нибудь еще... Хочу записать начисто, чтобы к этому вопросу уже не возвращаться.
Интересно было бы наблюдать три демки. Допустим, одна - обычное прохождение на среднем уровне сложности, ничем не примечательное. Вторая - на nitemare, с естественной гибелью, но так, чтоб успел посражаться. Ну и третья - просто быстрая пробежка мимо вражин без стрельбы. На каких уровнях это будет происходить - не столь важно. Ну, к примеру в первой демке будет третий уровень, во второй седьмой, а в третьей - двадцать третий.
aliast Нужно засунуть в него дополнительный файл. Запаковщик, как я понял, собирает обратно не тоже самое. Ты писал о каком-то отличии. Сейчас собранный обратно файл работоспособен, но хрен его знает, что будет, если мы будем менять/добавлять туда что-то.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Слепил сейчас подобие демок. Для первой, наверно, лучше брать пятый уровень. Показать несколько секретов и по-глупому убить себя не дойдя до очередного. На седьмом уровне пару раз пытался что-то сделать с кодом на всё оружие, но не особо получилось, а на двадцать третьем попробовал побегать среди баронов ада и какодемонов, попытавшись стравить их друг с другом... Сейчас видео на ютуб зальётся, здесь выложу.
Добавлено спустя 18 минут 58 секунд: В общем, срендерилось и залилось. Правда, пока ютуб сам что-то колдует с видео. Но через пару-тройку минут всё должно быть на месте. Вторая демка у меня вышла явно неудачная, если что, тему с кошмарным режимом можно забраковать ввиду сложности исполнения. А вот насчёт показа массы секретов и стравливания монстров стоит подумать...
Нужно засунуть в него дополнительный файл. Запаковщик, как я понял, собирает обратно не тоже самое.
С этим не должно быть проблем. А по поводу отличий вопрос открытый - чем отличается команда LOAD от LOADFIXED (это я про скрипт сборки из оригинального makerez)
Я думаю что это некая оптимизация памяти. В rezfile к оффсету добавляется 80 00. На структуру rez оно никак не влияет, но при загрузке такого файла движок игры что-то делает, только и всего. Можно конечно добавить в мой makerez поддержку запаковки по скрипту и там прописать команды loadfix, и тогда будет полное свпадение, но вот бы понять так ли это нужно и как быть с новыми файлами - фиксить их или нет?
aliast С новыми файлами можно экспериментировать. Главное, чтобы у нас работала сборка/разборка байт в байт. Так что, если можно, добавь эту фичу.
Добавлено спустя 5 часов 41 минуту 56 секунд: Раз пошла такая пьянка, попытаюсь сделать так, чтобы игрок мог сам записывать демки в память и при желании их проигрывать.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Други, скажите, а в каком формате музыка в Doom? Че-то я сжал в aifc и ни фига не поперло... Пардон, все работает. Подменил музыку. Буду думать, как расширить количество треков. Кандидаты - музон из PSX Doom. Или кто еще что предложит?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Пардон, все работает. Подменил музыку. Буду думать, как расширить количество треков.
Чем сжимал, средствами SDK? Просто интересно, может моя прога правильно конвертить wav в aifc или нет. Расширить количество треков вероятно можно, например, увеличив переменную отвечающую за их количество, если такая есть. Возможно треки просто ищутся в папке обычным перебором, т.е. сколько файлов найдёт приложение, столько и будет проигрывать. Правда я не помню, вроде за каждым уровнем своя музыкальная композиция закреплена. В общем, в исходниках стоит поискать названия треков и там смотреть, что да как реализовано.
То есть, имеем два входных параметра (номер песни, повторение). Внутри функции S_StartSong используем только параметр номер песни. Но не все так просто. Есть последовательность треков:
typedef enum { /* All the sounds in the game */ Song_None, Song_intro, Song_final, Song_bunny, Song_intermission, Song_e1m1, NUMMUSIC=Song_e1m1+24 /* Song count */ } musicnum_t;
Из нашего примера Song_final получается соответствует здесь 2 (двойке). Итого, получаем
И получается, что второй элемент массива SongLookup равняется 12. Фух... А вот в библиотеке burger уже прописан жестко путь Music\Song, к которому уже добавляется наше число 12. Получаем обращение к файлу
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения