Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
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;
typedef enum { /* All the sounds in the game */ 0, ///Song_None=0, нет музыки 1, ///Song_intro=1, вступительная музыка 2, ///Song_final=2, победная музыка 3, ///Song_bunny=3, что это за музыка?? :))) 4, ///Song_intermission=4, какая-то промежуточная музыка 5, ///Song_e1m1=5, номер муз.трека уровня 6 ///NUMMUSIC=Song_e1m1+24 /* Song count */ хитрое исчиление } musicnum_t; :du_ma_et:
Versus писал(а):
S_StartSong(Song_e1m1-1+gamemap,TRUE);
окончательно запутался так и не поняв как получится номер файла Song5...Song8
Последний раз редактировалось Author 29 июн 2015, 12:05, всего редактировалось 1 раз.
Я не помню, а они фактически есть в игре? Играют? Для Song5 получается мы должны вызвать: SongLookup[5] или SongLookup[6] или SongLookup[16]. Для этого выражение S_StartSong(5-1+gamemap,TRUE) должно получать эти цифры.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Versus, в общем лучше в дебаггере смотреть какие значения приходят и что выбирается по ним. В SongLookup 36 значений. Что значит коментарий /*Map 1 */ я так и не врубился, то ли он для всей строки, то ли для первого значения т.е. "5", что значило бы на первом уровне играет 5 мелодия, тогда на 6 уровне должна играть 10, а её нет. Надо весь исходник смотреть видимо.
Versus, да в этом ничего сложного нет, но вот как это сделать с приложением, которое должно запускаться не на ПК вопрос хороший. В среде разработки, после сборки программы (компиляции) и запуска или до этого в интересующих участках исходного кода ставятся точки останова напротив строки, где мы хотим посмотреть промежуточные результаты каких либо вычислений в программе. Начинаем выполнение программы (запускаем игру) и как только мы достигнем точки останова выполнение проги прерывается и мы может залезть в содержимое переменных. Но это когда прога/игра на ПК запускается. Для наших целей видимо нужен DEV kit или эмуль со спец.возможностями.
Как вариант ты можешь сохранить файл с данными в NVram (раз сейвы удалось добавить) в который скинешь, что передаётся в S_StartSong и как это было вычислено (т.е значения формирующиеся до вызова S_StartSong(5-1+gamemap,TRUE). Либо пробовать методом тыка менять значения в SongLookUp.Либо в перечисляемом типе musicnum_t изменить NUMMUSIC=Song_e1m1+24 на NUMMUSIC=Song_e1m1+25 и добавить в папку с музыкой трек с именем SONG9. Затем проверить поменялся ли где-то звук?
Author На счёт NVRAM мне уже приходила мысль, но что именно туда писать? В какие моменты? Пока вплотную не брался за музыку, может, удастся раскурить и без дебаггера.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
На счёт NVRAM мне уже приходила мысль, но что именно туда писать?
Пиши туда содержимое переменной music_id и по возможности значение Song_e1m1 (хотя вероятно оно всегда 5) вместе с NUMMUSIC.
Versus писал(а):
В какие моменты?
Скидывание в файл вероятно следует разместить в процедуре S_StartSong перед строкой PlaySong(SongLookup[music_id]) файл sound.c, можно и после этой строки. Тогда информация в файл будет скидываться при старте мелодий (т.е. в начале уровня или входе в главное меню).
Чтобы знать, откуда произошёл вызов процедуры S_StartSong с этими параметрами желательно в этот же файл писать текст типа "главное меню", "загрузка уровня", для этого придётся найти все обращения к этой процедуре в исходнике. Но, если это сложно сделать можно ограничиться параметрами.
Да, все эти файлы есть. Как ты написал, я уже пробовал, все работает. SongLookup[] можно ведь и больше сделать. Обнаружилась проблемка с сохранениями. Вернее, недоработка. Нужно вырубить возможность сейва, когда мы закончили уровень 23. А то получается, что при последующей загрузке запускается секретный уровень 24. И еще. Даже в оригинале после окончания 22 уровня не пишется Entering Dis. Надо как-то пофиксить.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Для чего? У меня только вариант с увеличением количества уровней.
Versus писал(а):
А то получается, что при последующей загрузке запускается секретный уровень 24.
Ну, это не баг, а фича! Своего рода награда за прохождение всей игры. Игрок видит финальный экран, делает сейв, а потом решив его вдруг загрузить попадает в секретный уровень. А так-то выпилить это не проблема судя по всему.
У меня только вариант с увеличением количества уровней.
Ну да... Я все-таки надеюсь на победу над REZFILE. Произойдет когда-нибудь это или нет?
Author писал(а):
Ну, это не баг, а фича!
Кстати, да, не подумал об этом.
Author писал(а):
Поздравляю с подвижкой в замене музыки!
Спасибо!
Добавлено спустя 58 минут 58 секунд:
Versus писал(а):
Даже в оригинале после окончания 22 уровня не пишется Entering Dis. Надо как-то пофиксить.
Пофиксил. Странно, Ребекка написала все правильно, а почему-то не работало... И оставил возможность выбора 24 уровня из главного меню, когда мы его прошли. Мне кажется, что так будет честно.
Добавлено спустя 5 часов 5 минут 31 секунду: Уточню. После прохождения игры без захода в секретный уровень максимально возможный уровень для выбора из главного меню - 23. А если мы прошли (получили доступ) секретный уровень, то максимально возможный уровень для выбора 24.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Хм... Косячокс... Дело в том, что когда мы делаем возможным выбор 24 уровня из меню после его прохождения, то тем самым открываем доступ ко всем НЕПРОЙДЕННЫМ уровням 4-23. Неправильно это. Придется возвращать назад. Ну, или извращаться и делать возможным выбор уровня 1-3, 24. Хз, как это делать...
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Author Когда мы проходим секретный 24 и сохраняемся в конце уровня, то он становится доступным для выбора. Но вот только получается, что мы можем теперь перелистать уровни назад и запустить любой, хотя до этого прошли только 3.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Versus, если возможно покажи кусок кода, который за сейв этого хозяйства отвечает и за загрузку тоже, т.е. там, где параметры пройденных уровней сохраняются.
На секретный уровень, если нужно, там выходить если идти прямо после открытия первой двери в третьем уровне, для этого надо пойти сразу влево и после того как... Блин, легче показать...
Author Вопрос комплексный. По умолчанию (то есть, в оригинале) уровень сохраняется в NVRAM, когда пройден. Вроде, все так, но у меня ситуация уже другая. Когда просто проходишь и сохраняешь игру, все работает четко. Но представим, что мы потерли файл DoomPrefs и оставили наш DoomSave. Тогда при первом запуске игры у нас доступен только первый уровень. Но, когда мы загружаем игру, то нам нужно обновить DoomPrefs нашими загружаемыми параметрами. Итого, имеем: Приравниваем максимально доступный уровень из меню текущему уровню загружаемой игры. Но когда мы загружаем сохранение уровня 24, получается, что мы открываем на него доступ. Вот одна из моих вставок:
void G_InitNew_LOAD(skill_t skill,Word map) { Randomize(); /* Reset the random number generator */ ReadPrefsFile(); /*Read params from PrefsFile. I need only MaxLevel value */ ReadSaveFile(); /*Override params loaded*/
/* Force players to be initialized upon first level load */
players.playerstate = PST_LOAD; players.mo = 0; /* For net consistancy checks */
DemoRecording = FALSE; /* No demo in progress */ DemoPlayback = FALSE;
if (skill == sk_nightmare ) { /* Hack for really BAD monsters */ states[S_SARG_ATK1].Time = 2*4; /* Speed up the demons */ states[S_SARG_ATK2].Time = 2*4; states[S_SARG_ATK3].Time = 2*4; mobjinfo[MT_SERGEANT].Speed = 15; mobjinfo[MT_SHADOWS].Speed = 15; mobjinfo[MT_BRUISERSHOT].Speed = 40; /* Baron of hell */ mobjinfo[MT_HEADSHOT].Speed = 40; /* Cacodemon */ mobjinfo[MT_TROOPSHOT].Speed = 40; } else { states[S_SARG_ATK1].Time = 4*4; /* Set everyone back to normal */ states[S_SARG_ATK2].Time = 4*4; states[S_SARG_ATK3].Time = 4*4; mobjinfo[MT_SERGEANT].Speed = 8; mobjinfo[MT_SHADOWS].Speed = 8; mobjinfo[MT_BRUISERSHOT].Speed = 30; mobjinfo[MT_HEADSHOT].Speed = 20; mobjinfo[MT_TROOPSHOT].Speed = 20; } StartMap = gamemap; StartSkill = gameskill; if (MaxLevel<gamemap){ MaxLevel = gamemap; }
if (gamemap == 24) { MaxLevel = 3; ВОТ ТУТ НУЖНО ПРОПИСАТЬ ПРАВИЛЬНО!!!! StartMap = 3; ЭТОТ КОД НЕПОЛНЫЙ! } WritePrefsFile(); }
Вроде, работает. Криво, но часто эта фигня не вызывается, поэтому можно забить. Правда, палево получается. Третий уровень намекает, что выход на 24 находится там. А как иначе сделать?
Добавлено спустя 58 минут 49 секунд: Yaranga Выходить-то известно как. Задача - что делать с параметрами игрока после.
Добавлено спустя 3 часа 2 минуты 43 секунды: Появился околовсяческий вопрос. Как использовать внешний asm файл в своем c# проекте?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
if (MaxLevel > gamemap) { MaxLevel = MaxLevel; //// это точно правильно?? если да, то этот кусок вообще можно выбросить ибо ничего не меняется в переменной. }
if (MaxLevel<=gamemap){ MaxLevel = gamemap; }
if (gamemap == 24) { MaxLevel = 3; /// может замененить на 1??? StartMap = 3; }
А не получится, что после выхода на 24 уровень мы потеряем доступ к пройденному 3му?
Нет. У нас идет отработка ситуации, когда в файле настроек информация противоречит загружаемому уровню. Здесь нам сразу же нужно подкорректировать файл настроек. При загрузке на 24 уровень мы и корректируем его, назначая доступным для выбора только первый уровень. А если уже много уровней открыто (первое мое условие), то ничего не меняем.
Author писал(а):
можно вообще это условие убрать
Почему-то без него корректно не работало.
Добавлено спустя 11 часов 56 минут 22 секунды: Просьба потестировать образ (подписан). -Работают сохранения. -Добавлена музыка (на каждом уровне своя, музыка финальных титров и между уровнями). Оригинальная тоже присутствует вся. -Тест записи демок работает по кнопке С на Load game, Заканчиваем запись демки по кнопке Start. Потом демка циклически повторяется. Файл деморолика также сохраняется в NVRAM. Чтение демки из памяти приставки пока не работает. Планирую делать проигрывание демки из памяти, скажем, кнопкой B на Load game. -Работает остановка чтения музыки, когда громкость установлена на ноль. Если есть какие пожелания, или будут найдены ошибки, буду рад критике. https://yadi.sk/d/OhY_a-YNhexW2
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Versus очень понравилась муз. тема после прохождения уровня тогда может заодно и перемещения черепа и Loading озвучишь в меню игры, как в версии PS1, если конечно имеется возможность?
а вот Load game хорошо бы перенести в раздел options, а то надпись "DOOM" перекрывает, но если всех устраивает, то можно не заморачиваться
Сейчас этот форум просматривают: Trendiction [Bot], Yandex [Bot] и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения