Просмотр полной версии : Помощь по редактору Dizzy-AGE
Заработало! :) В папке tiles нужно было найти папку menu и тоже закинуть этот же файл :).
Добавил еще одну главу Свойства объектов (http://dizzyage.narod.ru/page09_properties.html)
А так же поправил наконец-то форматирование в предыдущих главах.
В папке tiles нужно было найти папку menu и тоже закинуть этот же файл
Это обязательно надо делать. Больше ничего в буквах менять не надо. Русификацию игры уже делаешь в папке scripts --> game, просто пишешь русскими буквами все диалоги и названия предметов и всё. Но ведь сейчас все же умные стали, могут диалоги разбросать и на другие папки. А меню, чтобы сделать на русском, вообще исправлять надо в шести файлах, вроде. Если надо, скажите, я его переведу. Просто я уже знаю, где чего менять.
А, названия экранов лежит всегда тут: map --> dizzy.nam Открывать блокнотом.
Воду тоже надо менять, она сначала в три кадра нарисована. Птицу и летучую мышь тоже, эти в два кадра. Вообщем, вот папка с кучей изменённых спрайтов. Просто файлики подменяй и всё будет как надо.
http://sderni.ru/146373
---------- Post added at 10:40 ---------- Previous post was at 10:07 ----------
Вода находится в основном в папке tiles --> objects и objects2, а птичка с мышью в tiles --> creatures.
Номера, что в начале названия файлов, это какие они есть. Иногда бывают разные, так что там сами решайте, как лучше. Но в основном они именно такие, как в самом начале написано.
Что-то я сегодня туплю. Не поняла куда кидать файлы. Там три папки: font, water и Bat & Hawk. Куда кидать файлы из и куда конкретно по каждой папке?
Что-то я сегодня туплю. Не поняла куда кидать файлы. Там три папки: font, water и Bat & Hawk. Куда кидать файлы из и куда конкретно по каждой папке?
Вся графика в игре хранится в папке tiles, а в ней уже произвольное название любой подпапки. Для удобства это сортируется по разным папкам. Font хранится в подпапке menu, вода в подпапке objects, а мышь, наверное, в подпапке creatures. Но ты можешь сделать свои собственные папки. Главное, чтобы у каждого спрайта был в имени свой уникальный номер и все. А в какой он папке - это не важно.
Что-то я сегодня туплю. Не поняла куда кидать файлы. Там три папки: font, water и Bat & Hawk. Куда кидать файлы из и куда конкретно по каждой папке?
Ну я же написал. Файл из папки water нужны в основном под номерами 148 (в папку tiles --> objects) и 240 (в папку tiles --> objects2). Это вода, просто она иногда бывает разной, даже оранжевой, вот по-этому её там и столько видов. Но с самого начала, именно те воды поменять (№№148 и 240). Но иногда 240 вообще нет.
Русский шрифт подменяется в папке tiles --> menu --> 4 font.tga. У меня там разные версии, вплоть до Спектрумовского файла сделанного в ART-Studio. Там нужен именно вот тот, что с расширением .tga
Птица с мышью заменять в папке tiles --> ctreatures --> далее в основном они находятся под номерами 151 и 152.
Файлы все менять (если надо изменить название файла, у меня просто ещё номера другие расставлены в скобках, чтобы удобней было их искать, если автор задумал их в другом месте сохранить), старые просто стереть.
Так, хорошо, я скинула эти файлы. Но проблема осталась. Как сделать так, чтобы вода появилась после использования предмета?
Так, хорошо, я скинула эти файлы. Но проблема осталась. Как сделать так, чтобы вода появилась после использования предмета?
А вот тут, я пас. Я - не кодер. При переводе игр, такой проблемы не было ни разу.
А вот тут, я пас. Я - не кодер. При переводе игр, такой проблемы не было ни разу.
Это потому, что нигде так не было кроме Диззи 5 (если мне память не изменяет)
---------- Post added at 17:20 ---------- Previous post was at 17:10 ----------
И еще такой вопрос: а можно сначала написать скрипты (например, кирка разбивает камень), а потом предмет использования (кирка) перемещать по карте?
Так, хорошо, я скинула эти файлы. Но проблема осталась. Как сделать так, чтобы вода появилась после использования предмета?
По скольку вода - это не только спрайт поверхности воды, но и спрайт массива воды, то тебе надо появлять и то, и это.
/\/\/\/\/\/\/\/\ - это спрайт поверхности воды
ШШШШШШШШШШШШШШШШ - это большой спрайт массива воды со свойством воды,
ШШШШШШШШШШШШШШШШ должен находится на слое с меньшим приоритетом, чем
ШШШШШШШШШШШШШШШШ подводный ладншафт, чтобы не загораживать собой ландшафт
---------- Post added at 17:34 ---------- Previous post was at 17:33 ----------
И еще такой вопрос: а можно сначала написать скрипты (например, кирка разбивает камень), а потом предмет использования (кирка) перемещать по карте?
Да, предмет можно перемещать, т.к. единственный идентификатор предмета - это его ID, а он не зависит от координат.
Это потому, что нигде так не было кроме Диззи 5 (если мне память не изменяет)
В Диззи-5 лайт вообще всё в других файлах находилось. При чём ещё и инишник тоже пришлось изменять. Та что там, тихий ужас. Посмотри, как польский перевод сделан.
По скольку вода - это не только спрайт поверхности воды, но и спрайт массива воды, то тебе надо появлять и то, и это.
/\/\/\/\/\/\/\/\ - это спрайт поверхности воды
ШШШШШШШШШШШШШШШШ - это большой спрайт массива воды со свойством воды,
ШШШШШШШШШШШШШШШШ должен находится на слое с меньшим приоритетом, чем
ШШШШШШШШШШШШШШШШ подводный ладншафт, чтобы не загораживать собой ландшафт
---------- Post added at 17:34 ---------- Previous post was at 17:33 ----------
Да, предмет можно перемещать, т.к. единственный идентификатор предмета - это его ID, а он не зависит от координат.
Вроде я все правильно делаю. Вот файл, посмотрите: http://sderni.ru/146592
Вроде я все правильно делаю. Вот файл, посмотрите: http://sderni.ru/146592
Нет, множество грубейших ошибок)
1. Все активные обьекты должны иметь СВОЙ собственный номер. А ты дала кирке и месту применения ожерелья ID 1000, а всем водам ID 2000. Естественно, у тебя ничего не работает. КАЖДЫЙ обьект должен иметь свой номер. Все кусочки воды, свои номера, и каждый из них надо разрешать в своей строчке программы.
2. Ты рисуешь все в слое 0, он по умолчанию. Это тоже не верно, т.к. тебе будет сложно потом подставлять задние фоны и т.д. Надо рисовать основное, скажем, в слое 3. Предметы в слое 4. Воду в слое 2 и т.д. Тогда будет удобно отключать для редактирования тот или иний слой. А отключаются они кликаньем правой кнопкой на номер слоя в правом верхнем углу редактора. Активный слой для редактирования выбирается левой кнопкой.
3. Ты используешь прозрачное наложение спрайтов без маски. Пример - ладшафт где вода, и заборчик. Из-за этого ландшафт накладывается некрасиво сам на себя, а заборчик без маски плохо накладывается на Диззи. Чтобы проверять, хорошо ли ты используешь спрайты с маской, попробуй сделать фон игры голубым, поставив на задий фон огромный голубой спрайт в слое 0, а поверх него уже все рисовать. И станет сразу понятно, как и что на что накладывается.
Нет, множество грубейших ошибок)
1. Все активные обьекты должны иметь СВОЙ собственный номер. А ты дала кирке и месту применения ожерелья ID 1000, а всем водам ID 2000. Естественно, у тебя ничего не работает. КАЖДЫЙ обьект должен иметь свой номер. Все кусочки воды, свои номера, и каждый из них надо разрешать в своей строчке программы.
Это они здесь совпали (не обратила внимание), в моей игре там нет похожих номеров. По поводу воды: для каждого кусочка воды надо что писать свой скрипт? Я поэтому и поставила один номер.
2. Ты рисуешь все в слое 0, он по умолчанию. Это тоже не верно, т.к. тебе будет сложно потом подставлять задние фоны и т.д. Надо рисовать основное, скажем, в слое 3. Предметы в слое 4. Воду в слое 2 и т.д. Тогда будет удобно отключать для редактирования тот или иний слой. А отключаются они кликаньем правой кнопкой на номер слоя в правом верхнем углу редактора. Активный слой для редактирования выбирается левой кнопкой.
А сейчас можно будет изменить слой (не перерисовывать же мне(((( )?
3. Ты используешь прозрачное наложение спрайтов без маски. Пример - ладшафт где вода, и заборчик. Из-за этого ландшафт накладывается некрасиво сам на себя, а заборчик без маски плохо накладывается на Диззи. Чтобы проверять, хорошо ли ты используешь спрайты с маской, попробуй сделать фон игры голубым, поставив на задий фон огромный голубой спрайт в слое 0, а поверх него уже все рисовать. И станет сразу понятно, как и что на что накладывается.
То, что наверху - это то, что я пишу вслед за видеопримером (остановилась на летучей мыши)
По поводу воды: для каждого кусочка воды надо что писать свой скрипт? Я поэтому и поставила один номер.
Для каждого кусочка воды свою СТРОЧКУ, типа ObjSet(ObjFind(xxx), O_DISABLE, 0);
Потому что каждый отдельный кусок - это отдельный активный обьект.
Воду можно сделать одним большим куском на слое с меньшим приоритетом, и включать разом этот кусок. А не вырисовывать по крохам.
---------- Post added at 19:06 ---------- Previous post was at 19:03 ----------
А сейчас можно будет изменить слой (не перерисовывать же мне(((( )?
Можно.
Нажимаешь пробел, затем отмечаешь мышкой переносимый фрагмент, затем в меню выбираешь Change Selected Brushes, там в свойстве layer ставишь галочку и нужный слой. И жмешь кнопку Change.
Для каждого кусочка воды свою СТРОЧКУ, типа ObjSet(ObjFind(xxx), O_DISABLE, 0);
Ох, спасибо! А то у меня никак не хотел исчезать второй камень, а теперь все в порядке!
Потому что каждый отдельный кусок - это отдельный активный обьект.
Воду можно сделать одним большим куском на слое с меньшим приоритетом, и включать разом этот кусок. А не вырисовывать по крохам.
То есть, к примеру, у меня земля на третьем слое, а воду на втором, так что ли?
Можно.
Нажимаешь пробел, затем отмечаешь мышкой переносимый фрагмент, затем в меню выбираешь Change Selected Brushes, там в свойстве layer ставишь галочку и нужный слой. И жмешь кнопку Change.
Мммм.... А он должен как-то отображать то, что я изменила слой? А то я нажимаю на отдельный блок, а слой все так же нулевой.
---------- Post added at 19:49 ---------- Previous post was at 19:24 ----------
Нарисовала воду на 2 слое, землю - на третьем. Дала индивидуальные номера всем. Прописала скрипт для воды (и для видимой, и для не видимой части), но появляется только видимая часть (волны). Что не так?
http://sderni.ru/146610
idx = BrushFind(5001);
BrushSet(idx,B_DRAW,2);
GameCommand( CMD_REFRESH );
этот момент не прописан в доках. у динамических кистей нет материала, он есть только у статических.
Воду сделай статической
также в gamedef включи waterplay (поставь 1 вместо 0 )
этот момент не прописан в доках. у динамических кистей нет материала, он есть только у статических.
Воду сделай статической
Все верно Оса написал. Но в доках это описано.
idx = BrushFind(5001);
BrushSet(idx,B_DRAW,2);
GameCommand( CMD_REFRESH );
этот момент не прописан в доках. у динамических кистей нет материала, он есть только у статических.
Воду сделай статической
также в gamedef включи waterplay (поставь 1 вместо 0 )
Если я воду делаю статической, то она тогда присутствует уже до использования предмета((((
а ты еще поставь свойство DRAW 0 или none
---------- Post added at 21:57 ---------- Previous post was at 21:57 ----------
в редакторе
ВАУ! СПАСИБО!!!!!!!!!!!!!!!!! Теперь смогу осуществить свою задумку!!!!!!!!!!!!!!!!!!!!
ВАУ! СПАСИБО!!!!!!!!!!!!!!!!! Теперь смогу осуществить свою задумку!!!!!!!!!!!!!!!!!!!!
И еще раз напоминаю - не забудь использовать спрайты с маской, чтобы не пришлось потом все переделывать.
юрий выйдет на связь.попрошу его выделить основные спрайты, он все перетряхнул. у него ребенок родился вчера, с чем его, пользуясь случаем и поздравляю!:)
И еще раз напоминаю - не забудь использовать спрайты с маской, чтобы не пришлось потом все переделывать.
Я не могу разобраться со слоями - когда я выделяю нужные мне обьекты и меняю слой (это уже все вместе, после того, как я нарисовала), нажимаю на CHANGE, он выдает: no props checked. Спрайты с маской - это как?
Надо было мне сначала маленькую карту сделать и на ней учится и исправлять ошибки, а теперь в большой замучаюсь(((
Я не могу разобраться со слоями - когда я выделяю нужные мне обьекты и меняю слой (это уже все вместе, после того, как я нарисовала), нажимаю на CHANGE, он выдает: no props checked. Спрайты с маской - это как?
Потому что ты галочку не поставила напротив меняемого свойства.
крестики поставь рядом со свойствами, которые будешь менять у группы спрайтов
Спрайты с маской - это как?
Спрайты с маской, это спрайты, у которых вокруг изображения есть черная окантовка. Такая окантовка позволяет не сливаться спрайту и обьекту, который данный спрайт загораживает. У самого персонажа Диззи есть маска, это черная окантовка. А, скажем, у заборчика, который ты нарисовала, маски нет, и он сливается с загораживаемым обьектом. Использовать спрайты без маски - это моветон.
Да, и еще одно замечание - не используй такие темные цвета, которыми у тебя нарисованы камни комнаты. Они может быть хорошо смотрятся на LCD-мониторе, но на CRT очень темные, приходится выкручивать яркость, чтобы их увидеть нормально. Не знаю, может только у меня так. Но вроде кто-то еще жаловался на обилие темных цветов в играх DizzyAGE.
И еще одно замечание, освещение у камней, из которых сделана комната, должно быть направлено вверх, а не вправо, как у тебя.
Насколько я понял, то слои - это те квадратики сверху с правой стороны от 0 до 7 ?
да, правой кнопкой отображение слоя отключается
Да, и еще одно замечание - не используй такие темные цвета, которыми у тебя нарисованы камни комнаты. Они может быть хорошо смотрятся на LCD-мониторе, но на CRT очень темные, приходится выкручивать яркость, чтобы их увидеть нормально. Не знаю, может только у меня так. Но вроде кто-то еще жаловался на обилие темных цветов в играх DizzyAGE.
И еще одно замечание, освещение у камней, из которых сделана комната, должно быть направлено вверх, а не вправо, как у тебя.
Такие - темные? Или лучше посветлее?
http://s51.radikal.ru/i133/1209/7c/c89680479511.jpg (http://www.radikal.ru)
Такие - темные? Или лучше посветлее?
http://s51.radikal.ru/i133/1209/7c/c89680479511.jpg (http://www.radikal.ru)
На мой взгляд лучше посветлее.
Все?
Все темное) Зачем темнить? Посмотри игры для спектрума, там все ярко, а в Dizzy-AGE взяли манеру рисовать тусклыми цветами.
Желтый и под ним я сделала светлее, серый не буду светлить - это фон, а вот камни (красное) не знаю каким цветом сделать - это подземелье.
---------- Post added at 18:00 ---------- Previous post was at 17:56 ----------
И еще у меня такая проблема: нужно один предмет принести и положить (он просто устанавливается - мы его видим, но брать не можем), а потом другой и тогда убирается перегородка. Я это все написала. Но у меня получается так, что второй предмет я могу использовать и без первого, а нужно чтобы обязательно они взаимодействовали.
И еще у меня такая проблема: нужно один предмет принести и положить (он просто устанавливается - мы его видим, но брать не можем), а потом другой и тогда убирается перегородка. Я это все написала. Но у меня получается так, что второй предмет я могу использовать и без первого, а нужно чтобы обязательно они взаимодействовали.
Сумбурное описание, ничего не понял)
Млин, не хочется выкладывать файл уже с игрой, иначе сюрприза не будет. Ну, к примеру: мне нужно из колодца набрать воды в ведро, но прежде чем кидать ведро в колодец, мне нужна веревка. Сначала я использую веревку (для нее пишу скрипт), потом уже ведро (и для него уже есть скрипт). А у меня пролучается, что я ведро сразу могу использовать, без веревки. Как сделать так, чтобы я не могла использовать ведро, пока не использую веревку?
PS: каким все же сделать цветом подземелье?
Млин, не хочется выкладывать файл уже с игрой, иначе сюрприза не будет. Ну, к примеру: мне нужно из колодца набрать воды в ведро, но прежде чем кидать ведро в колодец, мне нужна веревка. Сначала я использую веревку (для нее пишу скрипт), потом уже ведро (и для него уже есть скрипт). А у меня пролучается, что я ведро сразу могу использовать, без веревки. Как сделать так, чтобы я не могла использовать ведро, пока не использую веревку?
PS: каким все же сделать цветом подземелье?
Ты хочешь, чтобы проверялось наличие сразу двух предметов в корзине?
Или же ты хочешь, чтобы при применении ведра проверялось, не использована ли уже веревка?
---------- Post added at 18:20 ---------- Previous post was at 18:16 ----------
Короче, в общем случае используется свойство обьекта O_STATUS.
Допустим, изначально у триггера под названием 'колодец' (а триггер - это то место, где применяется предмет, может быть в виде квадратика невидимого, а может быть в виде предмета обстановки), так вот у триггера O_STATUS = 0. Когда ты применяешь веревку, и она появляется, ты изменяешь статус обьекта триггера на 1. А когда применяешь ведро, проверяешь, не равно ли O_STATUS у триггера 1? Если равно, то веревка уже применена, и можно применять ведро.
Второе. Что бы ведро не использовалось, если перед этим не использована веревка.
---------- Post added at 18:24 ---------- Previous post was at 18:21 ----------
Где должен прописан этот статус (у м еня его нет в скрипте) в скрипте с веревкой или в скрипте с ведром?
Где должен прописан этот статус (у м еня его нет в скрипте) в скрипте с веревкой или в скрипте с ведром?
В скрипте с веревкой ты его устанавливаешь,
а в скрипте с ведром проверяешь.
Хотя, на самом деле у тебя же один обработчик триггера колодца, а не два.
---------- Post added at 18:28 ---------- Previous post was at 18:27 ----------
Вот ТУТ (http://dizzyage.narod.ru/page08_items.html) все по-русски описано, как раз про подобный случай. Как использовать и зачем свойство O_STATUS. Не ленись читать)
Это в этом примере один триггер - колодец, а у меня в оригинале их два, поэтому и два скрипта. попробую со статусом разобраться.
PS: каким все же сделать цветом подземелье?
Порода - красным цветом. Но если будет вот так, то это высший пилотаж.
http://s019.radikal.ru/i639/1209/5f/d43e25761443.png
Порода - красным цветом. Но если будет вот так, то это высший пилотаж.
По графике пилотаж высший, но задняя стена темновата.
По графике пилотаж высший, но задняя стена темновата.
А там комната такая тёмная. В других подземельях, вот так обстановка выглядит.
http://i068.radikal.ru/1209/0c/fb8a82a168c9.png
Порода - красным цветом. Но если будет вот так, то это высший пилотаж.
http://s019.radikal.ru/i639/1209/5f/d43e25761443.png
Ну у меня в общем и есть красный цвет. Или сделать светлее? Кстатии, а как менять шапку (там где диззи с заксом нарисованы)?
Кстатии, а как менять шапку (там где диззи с заксом нарисованы)?
В папках tiles --> menu --> есть файл 1 menu.
Rindex, скоро ведь всю карту выложишь, я итак стараюсь побыстрее
Rindex, скоро ведь всю карту выложишь, я итак стараюсь побыстрее
Там экранов ~200, так что ещё выкладывать и выкладывать. :) Тем более они меняются немного. Например, графика перил в замке, явно изменилась в лучшую сторону. DLL, кстати, тоже поменялась. Или у Юрия её скачай, ну, или я ссылку кину.
Так лучше?
http://s016.radikal.ru/i337/1209/27/2c8b188f4a96t.jpg (http://radikal.ru/F/s016.radikal.ru/i337/1209/27/2c8b188f4a96.jpg)
Так лучше?
Да как-то с камнями там, как будто они квадратные. Вот ещё разные цвета породы. В Иллюжн Исланд всё это идёт от верха в низ (вверху красная порода, в самом низу серая), в Райл Роад всё перемешано.
http://s49.radikal.ru/i123/1209/e2/25d001342765.pnghttp://s019.radikal.ru/i607/1209/a7/e72760cb25f7.png
http://s005.radikal.ru/i210/1209/91/2141fc32e354.pnghttp://s42.radikal.ru/i097/1209/1e/872b756e4744.png
Так лучше?
http://s016.radikal.ru/i337/1209/27/2c8b188f4a96t.jpg (http://radikal.ru/F/s016.radikal.ru/i337/1209/27/2c8b188f4a96.jpg)
Очень неплохо. Но ввиду того, что камни у тебя без масок, они накладываются квадратами. Надо найти спрайты с маской, возможно yuriy даст, и их использовать.
func UseObject_1000( idx )
{
// проверяем, является id предмета 101
if(idx==ObjFind(101))
{
Message2(3,8,"предмет 101!");
ObjSet(ObjFind(1000),O_STATUS,1);
MessagePop();
InventorySub(idx); // удалить предмет из корзины
}
if((idx==ObjFind(102))&&(ObjGet(ObjFind(1000),O_STATUS)==1))
{
// для всех других предметов
Message2(3,8,"Предмет 102");
MessagePop();
}
}
как то так
не получается. Вот два скрипта. Наверняка я что-то напутала с этим статусом(
"веревка"
func UseObject_1006( idx )
{
if(ObjGet(idx,O_ID)==3010)
{
Message1(5,4, "ВЫ ....");
Message2(6,5, "НО ....");
ObjSet(ObjFind(1006),O_STATUS,1);
MessagePop();
InventorySub(idx);
idx = ObjFind(1006);
ObjSet(idx,O_CLASS,0);
idx = ObjFind(3011);
ObjSet(idx,O_DISABLE,0);
}
else
{
DropObject(idx);
}
}
"ведро"
func ActionObject_1007() //
{
idx = OpenDialogInventory();
if(idx!=-1) UseObject(idx);
}
func UseObject_1007( idx )
{
if(ObjGet(idx,O_ID)==3012)
{
Message0(5,4, "ВЫ...");
Message0(6,5, "И...");
MessagePop();
InventorySub(idx);
if((idx==ObjFind(3012))&&(ObjGet(ObjFind(1006),O_STATUS)==1))
idx = ObjFind(1007);
ObjSet(idx,O_DISABLE,1);
idx = BrushFind(2008);
BrushSet(idx,B_DRAW,0);
GameCommand(CMD_REFRESH);
idx = ObjFind(3011);
ObjSet(idx,O_DISABLE,1);
}
else
{
DropObject(idx);
}
}
-------------------------
Где 1006 - место, где используется веревка
1007 - место, где используется ведро
3010 - веревка
3011 - веревка в виде картинки
3012 - ведро
2008 - преграда
Очень неплохо. Но ввиду того, что камни у тебя без масок, они накладываются квадратами. Надо найти спрайты с маской, возможно yuriy даст, и их использовать.
Я думаю, ему немного не до этого :)
юрий выйдет на связь.попрошу его выделить основные спрайты, он все перетряхнул. у него ребенок родился вчера, с чем его, пользуясь случаем и поздравляю!:)
А без маски нельзя как-то это поправить?
Я думаю, ему немного не до этого
Ну, думаю подскажет, как сделать. Конечно, прорисовка камней у него отлично сделана. Даже между камнями породу видно.
попробуй так
func UseObject_1007( idx )
{
if((idx==ObjFind(3012))&&(ObjGet(ObjFind(1006),O_STATUS)==1))
{
Message0(5,4, "ВЫ...");
Message0(6,5, "И...");
MessagePop();
InventorySub(idx);
idx = ObjFind(1007);
ObjSet(idx,O_DISABLE,1);
idx = BrushFind(2008);
BrushSet(idx,B_DRAW,0);
GameCommand(CMD_REFRESH);
idx = ObjFind(3011);
ObjSet(idx,O_DISABLE,1);
}
else
{
DropObject(idx);
}
}
Теперь вообще ведро не срабатывает(
по твоему скрипту должно срабатывать только после веревки. если светить не хочешь, кинь мне в личку гаму.
кинь мне в личку гаму.
Кинуть что? )
если светить не хочешь, кинь мне в личку гаму.
Кинуть что? )
Игру. ;)
Разобрались мы с ведром и веревкой, спасибо osa!
Составьте список предпочитаемых в переводе глав (http://dizzyage.narod.ru/). Чтобы, если у меня будет время, я с них начинал.
# 1. About DizzyAGE
# 2. Features and requirements
# 3. Devtools content
# 4. Creation steps
# 5. Скритпы
# 6. Диалоги
# 7. Активные обьекты
# 8. Предметы
# 9. Свойства объектов
# 10. The player
# 11. Collectables
# 12. The rooms
# 13. A.I.
# 14. Static brushes
# 15. The Hud
# 16. Interactive menus
# 17. Cutscenes
# 18. Sound and Music
# 19. Debug
# 20. Release
Поскльку тема про редактор, то немного изменил второй пост в этой ветке. Думаю, Титус будет не против. ;)
Rindex, Это в первый нужно, и шапку закрепить, если возможно.
Rindex, Это в первый нужно, и шапку закрепить, если возможно.
В первом задан вопрос. Во-втором получен ответ. Раньше ответ был другим. Так что нормально.
Titus, да, 13 глава судя по всему будет актуальна и, я даже понимаю к чему osa её обозначил первоочередной.
Скажите, как сделать так, что бы мышь, бегая туда-сюда, не возвращалась задом наперед, а разворачивалась?
поиграйся в путевых точках со свойством O_USER+1(третья вкладка, второе сверху)
По просьбам теле-радиослушателей Глава 13. Искусственный интеллект
(http://dizzyage.narod.ru/page13_ai.html)
Скажите, как сделать так, что бы мышь, бегая туда-сюда, не возвращалась задом наперед, а разворачивалась?
посмотри пример http://www.yolkfolk.com/dizzyage/books/dizzyage/code/sol12_mouse.txt
посмотри пример http://www.yolkfolk.com/dizzyage/books/dizzyage/code/sol12_mouse.txt
В 13-й главе все это описано более простыми способами.
Ну чего, вам помогает перевод, или так себе?)
В гостевой книги не отписываются.
Ну чего, вам помогает перевод, или так себе?)
Ну, а ты сам как думаешь, на чём лучше читать, на русском или на английском, особенно человеку кто его не очень знает или не знает вообще.
Ну чего, вам помогает перевод, или так себе?)
В гостевой книги не отписываются.
мне помог, я теперь прочитал до конца главу, в отличие от англ. варианта:biggrin: но, ничего не понял. Но мой интерес в этом есть. А вот осе очень даже пригодится, поэтому в любом случае, спасибо.
Ну, а ты сам как думаешь, на чём лучше читать, на русском или на английском, особенно человеку кто его не очень знает или не знает вообще.
Были бы читатели.
Были бы читатели.
А ты думаешь их нет? Сильно ошибаешься.
Titus, да мне это интересно, но ситуация так сложилась, что такие вещи просто ОООчень тяжело воспринимает мой мозг. Мне как бы легче придумать, нарисовать/порисовать. И я прекрасно понимаю, что если мне что-то бы было нужно, то хоть совет я знаю у кого спросить. Прошу не путать совет и помощь :) Если б я кодил, я б уже 3-ю часть допиливал :biggrin:
Новая глава 14. Статические кисти (http://dizzyage.narod.ru/page14_brushes.html)
Были бы читатели.
Между прочим очень интересно. Я раньше мельком как-то смотрела, а теперь читаю каждую строчку.
У меня сейчас вот какая проблема: нужно чтоб предмет стал видимым и не вещью, а блоком. Как в диззи2, когда ставишь сундук. У меня предмет видим изначально - не хочет скрываться( Что не правильно?
Данные предмета:
Тип - статик
материал - блок
драв - имг+мат
дисайбл - да
Между прочим очень интересно. Я раньше мельком как-то смотрела, а теперь читаю каждую строчку.
У меня сейчас вот какая проблема: нужно чтоб предмет стал видимым и не вещью, а блоком. Как в диззи2, когда ставишь сундук. У меня предмет видим изначально - не хочет скрываться( Что не правильно?
Данные предмета:
Тип - статик
материал - блок
драв - имг+мат
дисайбл - да
Пришли игру в личку.
---------- Post added at 23:04 ---------- Previous post was at 23:02 ----------
Но вообще, disable действует только на динамические кисти, а не на статические. Статические надо скрывать через свойство draw = 0.
Пришли игру в личку.
Потом не интересно будет) Давайте оставим это как запасной вариант. Если уж не разберемся - тогда скину.
Но вообще, disable действует только на динамические кисти, а не на статические. Статические надо скрывать через свойство draw = 0.
Ага. Пропал. Только теперь я видать что-то напутала в скрипте:
func UseObject_1008( idx )
{
if(ObjGet(idx,O_ID)==3013)
{
Message1(5,4, "ВЫ...");
MessagePop();
InventorySub(idx);
idx = ObjFind(1008);
ObjSet(idx,O_CLASS,0);
idx = ObjFind(2009);
ObjSet(idx,O_DISABLE,0);
}
else
{
DropObject(idx);
}
}
Пропал. Только теперь я видать что-то напутала в скрипте
Может и напутала) Из сего скрипта не понятно, что ты хотела получить, а что получила)
Лучше пришли, заодно может посоветую, если замечу какие огрехи, которые легче исправить сейчас, чем когда игра будет дописана.
рисуешь сундук-блок с draw=0 делаешь место применения предмета. пишешь скрипт, что бы при приминении сундука-предмета предмет пропадал, а сундук-блок делаешь draw=3
---------- Post added at 23:19 ---------- Previous post was at 23:16 ----------
idx = BrushFind(2009); // если это сундук-блок
BrushSet(idx,B_DRAW,3);
Уговорили) Скинула
---------- Post added at 23:25 ---------- Previous post was at 23:22 ----------
osa, сундук - 3013
---------- Post added at 23:26 ---------- Previous post was at 23:25 ----------
Да, еще такой вопросик: за что отвечает №23 (в данных предмета) colider?
нужен сундук-предмет и сундук блок:) или на сундуке предмете сделать свойство hard collision
---------- Post added at 23:29 ---------- Previous post was at 23:27 ----------
и вот оно свойство colision:)
и вот оно свойство colision:)
Это я вижу :) Я не понимаю, что оно делает. Например, в видеопримере используют это свой-во для летучей мыши. Причем с ним она убивает, без него - ноль.
Daisy, посмотрел твой скрипт про мост.
Во-первых, ты применяешь функцию ObjFind и к статическим, и к динамическим кистям, хотя эта функция ТОЛЬКО для динамических кистей, а для статических свои функции и свои названия свойств, хотя и похожие. Мост у тебя статическиой кистью нарисован. Для статических эта функция называется BrushFind(id).
Попробуй исправить) Сегодня же в главе описано новой было на русском.
---------- Post added at 00:30 ---------- Previous post was at 00:03 ----------
Да, еще такой вопросик: за что отвечает №23 (в данных предмета) colider?
Это свойство описано в главе про игрока. Пока только на английском)
HandlerCollision()
This is the collision handler that is called by the engine when the player collides with a dynamic brush that has the O_COLLIDER property set to call handler. It can detect if this is the first time when the collision happened, if the collision is still going on, or if it has just ended. By default, it also deals with hurt or kill class objects.
CollideObject_ID_MODE()
This latent callback is requested from the collision handler, when the player collides with a collider object (set to call handler), that has the same brush id, as specified in the callback's name (ID). If the MODE number, from the callback's name, is 0, then the callback is called when the player and the object exit from collision. If MODE is 2, the callback is called during the collsion, and if it's 1, the callback is called when the player enters in collsion with the object for the first time.
HandlerCollision()
Этот хендлер обработки столкновений вызывается движком, когда игрок соприкасается с динамической кистью, у которой в свойстве O_COLLIDER установлено call handler. Он способен определять только ли началось соприкосновение, идет ли оно, или только что закончилось. Так же этот хендлер используется при обработки столкновений с объектами, у которых установлен класс hurt или kill.
CollideObject_ID_MODE()
Этот фоновой колбек вызывается из хендлера столкновений (collision handler), когда игрок соприкасается с объектом, id-номер которого прописан в поле ID имени функции. Если поле MODE в имени функции равно 0, то, колбек вызывается, когда игрок и объект прекращают соприкасаться. Если это поле равно 2, то колбек вызывается всегда, когда имеется в наличие соприкосновение. И, наконец, если поле MODE равно 1, то колбек вызывается в момент первого соприкосновения с объектом.
The second kind of dynamic collision, is with objects that have the collider property set to hard collision. This is usual to platforms, elevators, bridges or other similar things that must move.
The collision is not too precise, but it will try to rise the player on top of these objects. No handlers are called, it's all part of the player's movement system.
Второй тип реакции на соприкосновение с объектом - это соприкосновение с твердым объектом. Для этого у объекта должно быть установлено свойство collider = hard collision (твердое соприкосновение). Обычно это используется в платформах, лифтах, мостах и тому подобных перемещающихся объектах.
Данный тип соприкосновения не очень точный, но но зато позволяет автоматически поднимать игрока на вершину объекта. Никаих хендлеров при этом не вызывается, эта функциональность заложена в движок.
---------- Post added at 00:32 ---------- Previous post was at 00:30 ----------
И еще, ты легкомысленно относишься к маске спрайтов. Нужно ее использовать, чтобы было красиво)
Daisy, посмотрел твой скрипт про мост.
Во-первых, ты применяешь функцию ObjFind и к статическим, и к динамическим кистям, хотя эта функция ТОЛЬКО для динамических кистей, а для статических свои функции и свои названия свойств, хотя и похожие. Мост у тебя статическиой кистью нарисован. Для статических эта функция называется BrushFind(id).
Попробуй исправить) Сегодня же в главе описано новой было на русском
Заменила
idx = ObjFind(2009);
ObjSet(idx,O_DISABLE,0)
на
idx = BrushFind(2009);
BrushSet(idx,B_DRAW,3);
Мост появляется, но он воздушный(
Я только вчера прочитала про активные объекты. Немножко не понятно вот это: что такое ObjGet( idx, property ) и ObjSet( idx, property, value ). Там написано, а я не понимаю. Врое не блондинка :o
И еще, ты легкомысленно относишься к маске спрайтов. Нужно ее использовать, чтобы было красиво)
Я еще ничего больше не рисовала после того, как усышала про маски. Только у меня все-равно их нет.
Заменила
idx = ObjFind(2009);
ObjSet(idx,O_DISABLE,0)
на
idx = BrushFind(2009);
BrushSet(idx,B_DRAW,3);
Мост появляется, но он воздушный
Это потому, что:
После изменения свойств одной или нескольких статических кистей, вносящих изменения в карту материалов, необходимо обязательно вызвать функцию обновления карты материалов. Если этого не сделать, карта материалов данного экрана останется прежней, пока вы не войдете заново в данную комнату.
Опять же все это написано в той главе, надо внимательно читать. И в примерах показано.
Поэтому просто добавь после изменений строчку
GameCommand(CMD_REFRESH);
и все будет в шоколаде.
---------- Post added at 10:17 ---------- Previous post was at 10:11 ----------
Я только вчера прочитала про активные объекты. Немножко не понятно вот это: что такое ObjGet( idx, property ) и ObjSet( idx, property, value ).
Эти две функции равносильны следующему:
a = ObjGet(idx, property) ->
a = значение параметра property объекта idx.
т.е.
a = ObjGet(idx,O_FLIP); ->
а = свойство O_FLIP обьекта с индексом idx
а индекс получаем функцией ObjFind()
таким образом:
idx = ObjFind(1000);
a = ObjGet(idx, O_FLIP); ->
a = свойство O_FLIP обьекта с ID = 1000
А функция ObjSet делает все наоборот, присваивает свойству какое-то значение.
idx = ObjFind(1000);
ObjSet(idx, O_FLIP, 1); ->
(свойство O_FLIP обьекта с ID = 1000) = 1
---------- Post added at 10:19 ---------- Previous post was at 10:17 ----------
Я еще ничего больше не рисовала после того, как усышала про маски. Только у меня все-равно их нет.
Попроси набор графики с маской у Yuriy. У него они самые лучшие)
---------- Post added at 10:46 ---------- Previous post was at 10:19 ----------
Несколько замечаний для начинающих DizzyAGE писателей:
Начинайте делать игру на большой карте, заведомо шире, чем предполагаемая игра. Размер карты не влияет на размер игры. На размер игры влияет количество нарисованной графики на этой карте. И рисовать игру начинайте из центра карты, чтобы не столкнуться с нехваткой поля деятельности.
Активно используйте слои 0-7. Я рекомендую распределять слои так:
Слой 0 - слой неба. На этом слое должно отображаться небо. Оно может быть не задействовано в игре и быть черным. Может быть одноцветным, голубым. Может быть одноцветным, меняющимся в зависимости от времени дня. Может быть многоцветным, меняющимся, как, например, в игре Fantastic Dizzy на Amig'e.
Слой 1 - слой дальних обьектов на фоне неба. Это может быть луна, солнце, какие-то летящие по небу объекты, например, кометы, звезды. Так же это может быть пейзаж заднего фона, например, лес вдалеке, город и т.д.
Слой 2 - слой персонажей дальнего плана. Летающие ЗА деревьями птицы, плавающие ЗА водорослями и кораблями рыбы и т.д.
Слой 3 - слой ладшафта заднего плана. Это лес, земля, обстановка домов. Словом, практически весь основной ландшафт.
Слой 4 - слой персонажей ближнего плана. Персонажи игры, а так же движущиеся на переднем плане птички, рыбки и т.д.
Так же на этом плане предпочтительно сделать игрока (его слой задается в файле gamedef.gs в свойстве PLAYER_LAYER). Так же это может быть слоем предметов, которые берет и кладет игрок.
Слой 5 - слой подводного пейзажа ближнего плана. Здесь находится все, что загораживает игрока, но должно находиться под водой. Например мачты, водоросли и т.д.
Слой 6 - слой воды. Вода это не только спрайт анимированного контура воды, но еще и полупрозрачный спрайт толщи воды, который накладываясь на весь подводный пейзаж, делает его подводного цвета.
Слой 7 - слой пейзажа ближнего плана. Это все, что загораживает игрока. Это могут быть столбы, деревья, мебель и т.д. Так же в этом слое можно размещать рельеф подводного мира, который не загораживается слоем воды. В частности это дно и бока водоемов.
Так же это слой триггеров, которые желательно делать полупрозрачными фиолетовыми квадратиками. Можно варировать цвет триггеров, в зависимости от их функционала.
Старайтесь использовать графику только с маской. Это и красиво, и поможет избежать проблем, когда вы вдруг захотите в вашей игре сделать другой фон или пейзаж заднего плана. Чтобы сразу представить, как будет выглядеть ваша графика на фоне чего-либо, начинайте рисовать карту на фоне голубого неба. Сделайте план 0 огромным голубым небом, и уже поверх него рисуйте спрайтами с маской. Это небо всегда можно убрать или запретить к рисованию поставив ему draw = 0.
Рисуйте ландшафт так, чтобы в перспективе он мог бы свободно скроллироваться. Возможно, вы захотите потом или сразу сделать игру именно со скроллирующимся ландшафтом. Так же отдельно для красоты могут скроллироваться фоны заднего плана.
Избегайте использования в игре монотонного земляного ландшафта наподобие игр Dizzy 5. Игра при этом выглядит просто унылым лабиринтом.
По возможности рисуйте свои спрайты предметов и игроков. Повторение в играх одних и тех же персонажей и предметов делает игры мене интересными.
Titus, добавлю свои пять копеек к пункту 1 из практического опыта так сказать, но это на усмотрение/желание автора:
Изначально я сделал просто и банально сетку в ворде с примерными размерами (масштабом) комнат, и отпечатал лист формата а4 на принтере. Обычной шариковой ручкой без излишних подробностей начал рисовать всё, что было придумано на бумаге, схематически, чтобы избежать дурной работы непосредственно в редакторе. И только тогда как было нарисована практически вся карта, и была заложена основная линия сюжета с небольшими головоломками, тогда я начал переносить всё в редактор. Сложность возникла с замком, поскольку мне в первый раз было трудно определиться с кол-вом комнат, этажностью и прочими мелочами, он был сырым на бумаге до последнего момента, а хотелось сделать и небольшим и интересным, чтобы играющий не бродил бессмысленно по "пустотам", но это мелочи и уже в процессе, всё, как говорит Риндекс - "взошло" и стало на свои места. После рисованного варианта я четко знал свой размер карты, и что делать дальше. Уже в процессе переноса, приходили разные интересные мысли в виде декоративных украшений и, незначительных для общего сюжета, решений тех или иных головоломок.
Это лично мой опыт создания, и я не принуждаю делать именно так, но мне было так легче работать. Мне кажется, что сразу представлять что хочешь и наносить на карту - это удел профи.
Я допустил одну единственную ошибку - слишком много нарисовал :) Наверное, нужно было сделать что-то в 10 комнат и остановиться, но мы же не ищем легких путей? ;) Тем более не хотелось действительно урезать то, что нарисовалось в голове.
----------------------------------------------
Daisy & all
Спрайты, маски и прочее. Те или иные готовые спрайты с масками можно взять из буржуйских игр, предварительно распаковав. Категорически рекомендую начинающим не ломать дров с написанием игры/рисованием карты, а посидеть недельку другую и просто распаковать десяток игр и покурить готовые игровые карты, слои, то, как делали и наносили спрайты на карту по слоям другие авторы. Вы сэкономите себе кучу времени в будущем делая что-то свое не задумываясь о многих нюансах.
Я, практически все стандартные спрайты (которые использовал) на примере других делал маску сам, поскольку хотел набраться опыта и разобраться, чтобы потом что-то модернизировать или делать своё. Конечно, приветствуется опыт работы в графическом редакторе, но при большом желании, что касается спрайтов для игры, можно научиться самостоятельно. На досуге я надергал/переделал/немного систематизировал очень много "общих для рисования" стандартных и своих спрайтов для редактора и планирую это выложить здесь в паблик только после релиза нашей совместной игры. Нужно будет или нет кому-то каждый решит сам для себя. Ранее никак.
[Я, практически все стандартные спрайты (которые использовал) на примере других делал маску сам, поскольку хотел набраться опыта и разобраться, чтобы потом что-то модернизировать или делать своё. Конечно, приветствуется опыт работы в графическом редакторе, но при большом желании, что касается спрайтов для игры, можно научиться самостоятельно. На досуге я надергал/переделал/немного систематизировал очень много "общих для рисования" стандартных и своих спрайтов для редактора и планирую это выложить здесь в паблик только после релиза нашей совместной игры. Нужно будет или нет кому-то каждый решит сам для себя. Ранее никак.
Ну отщепил бы хотя бы общеупотребительные спрайты для нее, но с маской. Камешки, землю и т.д.
Могут быть не все спрайты с маской, например:
http://www.onlinedisk.ru/cache/d528ed1b893b398b96721295b0706f81 (http://www.onlinedisk.ru/view/954647/sample.png)http://www.onlinedisk.ru/cache/9a1c789c0109fd8f2e1976d9064f6304 (http://www.onlinedisk.ru/view/954654/sample2.png)
Что с маской, то с черным слоем.
Общеупотребительные спрайты. (http://sderni.ru/147521)
100 ground.tga
101 boulders1.tga
102 boulders2.tga
103 cave.tga
120 bricks.tga
124 pipes.tga
125 woods.tga
Нужно заменить файлы с архива на те, что есть в движке - \dizzyage\game\data\tiles и далее по папкам.
Замечательно. Это как раз то, что ей нужно.
Это те, которые можно заменить без потери нарисованного просто заменой. На новых я еще масок добавил, но они уже не совместимы со стандартными - ни номерами, ни расположением спрайтов. Только предварительное удаление папки tiles и копирование новой.
Категорически рекомендую начинающим не ломать дров с написанием игры/рисованием карты, а посидеть недельку другую и просто распаковать десяток игр и покурить готовые игровые карты, слои, то, как делали и наносили спрайты на карту по слоям другие авторы. Вы сэкономите себе кучу времени в будущем делая что-то свое не задумываясь о многих нюансах.
Лучшее обучение - это практика.
Идеальный вариант - совместить составление своей какой-либо тестовой карты, пусть из 2-3 экранов с изучением карт от других хороших игр и чтение документации.
Мне кажется, что сразу представлять что хочешь и наносить на карту - это удел профи
Я, конечно, не профи, но на листке рисовать я не могу. Пыталась что-то сделать, но результат на компе совершенно другой. В результате я плюнула на эти листки и рисую сразу в компе, как только в голову что-то стукнет)
yuriy, спасибо за спрайты с масками. Я заменила файлы, но... то ли я что-то не так сделала, то ли это так и должно быть... Я не вижу изменений :|
Активно используйте слои 0-7. Я рекомендую распределять слои так:
Слой 0 - слой неба. На этом слое должно отображаться небо. Оно может быть не задействовано в игре и быть черным. Может быть одноцветным, голубым. Может быть одноцветным, меняющимся в зависимости от времени дня. Может быть многоцветным, меняющимся, как, например, в игре Fantastic Dizzy на Amig'e.
Слой 1 - слой дальних обьектов на фоне неба. Это может быть луна, солнце, какие-то летящие по небу объекты, например, кометы, звезды. Так же это может быть пейзаж заднего фона, например, лес вдалеке, город и т.д.
Слой 2 - слой персонажей дальнего плана. Летающие ЗА деревьями птицы, плавающие ЗА водорослями и кораблями рыбы и т.д.
Слой 3 - слой ладшафта заднего плана. Это лес, земля, обстановка домов. Словом, практически весь основной ландшафт.
Слой 4 - слой персонажей ближнего плана. Персонажи игры, а так же движущиеся на переднем плане птички, рыбки и т.д.
Так же на этом плане предпочтительно сделать игрока (его слой задается в файле gamedef.gs в свойстве PLAYER_LAYER). Так же это может быть слоем предметов, которые берет и кладет игрок.
Слой 5 - слой подводного пейзажа ближнего плана. Здесь находится все, что загораживает игрока, но должно находиться под водой. Например мачты, водоросли и т.д.
Слой 6 - слой воды. Вода это не только спрайт анимированного контура воды, но еще и полупрозрачный спрайт толщи воды, который накладываясь на весь подводный пейзаж, делает его подводного цвета.
Слой 7 - слой пейзажа ближнего плана. Это все, что загораживает игрока. Это могут быть столбы, деревья, мебель и т.д. Так же в этом слое можно размещать рельеф подводного мира, который не загораживается слоем воды. В частности это дно и бока водоемов.
Так же это слой триггеров, которые желательно делать полупрозрачными фиолетовыми квадратиками. Можно варировать цвет триггеров, в зависимости от их функционала.
Вот прочесть бы это до начала рисования :D Грамотно написано. Вот я постоянно теряюсь - где и на каком слое мне что-то рисовать, а здесь все четко)
Daisy, если ты заменила файлы, то изменения ты увидишь, например:
Земля находится в низшем слое, чем камень которым ты будешь перекрывать землю. Земля в 3-е слое, камень в 4-м. Маска обязательна на предмете, которым ты хочешь перекрыть что-то находящееся за ним.
http://www.onlinedisk.ru/cache/9eeca0ce5b09859e5a639f8d22339bca (http://www.onlinedisk.ru/view/955358/sample03.png)
1. Камень без маски в 4 слое. Земля в 3 слое тоже безмаски.
2. Камень с маской в 4 слое. Земля в 3 слое с маской или без не имеет значения.
Нет, ничего не изменилось(
---------- Post added at 12:08 ---------- Previous post was at 12:02 ----------
Я поняла в чем разница (есть кустики с маской), а вот камни - никак(
---------- Post added at 12:31 ---------- Previous post was at 12:08 ----------
Все получилось! Спасибо!
Вода (ее видимая часть) должна быть перед Диззи или за ним?
Daisy, гребень? перед Диззи.
Как теперь?
http://s018.radikal.ru/i521/1210/c7/18d48ef33208t.jpg (http://radikal.ru/F/s018.radikal.ru/i521/1210/c7/18d48ef33208.jpg)
Как теперь?
Так, как надо! :v2_thumb: А Диззи чего весь белый? Перчатки и ботинки же есть красные.
Как теперь?
Замечательно!)
А Диззи чего весь белый? Перчатки и ботинки же есть красные.
А я не знаю, он у меня изначально такой. А как сделать с красным? Меня смущает вот что: нет пузырьков, когда он в воду ныряет и монетки полупрозрачные (без маски) и такая же трава, вот:
http://s019.radikal.ru/i629/1210/9c/c7a89cb59cbft.jpg (http://radikal.ru/F/s019.radikal.ru/i629/1210/9c/c7a89cb59cbf.jpg)
http://s50.radikal.ru/i128/1210/1e/6cddef8737b0t.jpg (http://radikal.ru/F/s50.radikal.ru/i128/1210/1e/6cddef8737b0.jpg)
Или так подойдет?
Кстати, там, где монетка - надо что-то еще вокруг рисовать (ну, землю там, камни...) или так оставить (у меня почти точно так же и колодец)?
Или так подойдет?
Кстати, там, где монетка - надо что-то еще вокруг рисовать (ну, землю там, камни...) или так оставить (у меня почти точно так же и колодец)?
Нет, так не пойдет. Это признак плохого тона.
Если ты считаешь, что это выглядит красиво, то так оставь)
А я не знаю, он у меня изначально такой. А как сделать с красным?
В красных перчатках надо просто скачать спрайты из игры, где он в них ходит.
Меня смущает вот что: нет пузырьков, когда он в воду ныряет
Он у тебя под водой будет находится? Т.е. ещё нужны спрайты с аквалангом?
Daisy, файлы из архива (http://sderni.ru/147733) закинь в папку \dizzyage\game\data\tiles\dizzy
Там, где камни-фон, вертикали из камней режут глаз - творчески, творчески, а не быстрому. То же касается и с заполнением земли - делай несколькими спрайтами, используй клавишу F в движке для вращения спрайтов земли, чтобы не было ярко выраженного повторяющегося узора земли.
Ласты и акваланг. Чтоб ходил в костюме и плавал, тож нужно включать поддержку в gamedef.gs
#def ID_SCUBA 4000
#def ID_FLIPPERS 4001
здесь id 4000 и 4001 нужно прописать соответственно те, которые ты назначила ранее. Про пузыри не помню.
Ага, там, у Юрия, голубенькие баллоны. А вот папочка dizzy с жёлтыми - http://sderni.ru/147737
Нет, так не пойдет. Это признак плохого тона.
Если ты считаешь, что это выглядит красиво, то так оставь)
Да нет, просто я в какой-то игре видела такую пустоту, поэтому и спросила. Но если я все там сделаю красным (породой), то то же, мне кажется, будет не очень(
В красных перчатках надо просто скачать спрайты из игры, где он в них ходит.
Ща поищем)
Он у тебя под водой будет находится? Т.е. ещё нужны спрайты с аквалангом?
Акваланг у меня есть. Нет пузырьков(
http://s54.radikal.ru/i145/1210/93/dbd356c10978t.jpg (http://radikal.ru/F/s54.radikal.ru/i145/1210/93/dbd356c10978.jpg)
http://s004.radikal.ru/i207/1210/51/60cc6a8c2df1t.jpg (http://radikal.ru/F/s004.radikal.ru/i207/1210/51/60cc6a8c2df1.jpg)
Ща поищем)
Тебе две версиии дали в двух предыдущих постах.
Подарите девушке траву и монетки с маской)
Акваланг у меня есть. Нет пузырьков(
В папке tiles --> objects2 --> файл 238 airbubbles есть?
Тебе две версиии дали в двух предыдущих постах.
А я успела стырить с фентази ворлд :p Сейчас скачала с преыдущх постов - с голубеньким аквалангом мне больше нравится - но нчего не происходит (как был белым, так и остался). Что-то еще надо сделать?
В папке tiles --> objects2 --> файл 238 airbubbles есть?
Есть
их нужно нарисовать в каком нибудь дальнем углу карты(подсмотри в игре, нарисованы они не очень стандартно), номера этих спрайтов тоже подсмотри в игре.
Там, где камни-фон, вертикали из камней режут глаз - творчески, творчески, а не быстрому.
Ммм.. Не поняла... Серый фон?
На счет земли понятно - учту
Ласты и акваланг. Чтоб ходил в костюме и плавал, тож нужно включать поддержку в gamedef.gs
#def ID_SCUBA 4000
#def ID_FLIPPERS 4001
здесь id 4000 и 4001 нужно прописать соответственно те, которые ты назначила ранее. Про пузыри не помню.
Это я знаю, уже давно сделала :p после того, как мне сказали включить поддержку воды, я догадалась то же самое сделать с аквалангом и ластами.
Daisy, держи из четырёх игр папки tiles. Там и монеты, и алмазы, и акваланги разные, и даже гидрокостюм есть. Вообщем, полный набор - выбирай что надо. ;)
http://sderni.ru/147744
их нужно нарисовать в каком нибудь дальнем углу карты(подсмотри в игре, нарисованы они не очень стандартно), номера этих спрайтов тоже подсмотри в игре.
Нарисовала, а дальше что?
И что насчет с Диззи - он все еще белый(
С Диззи разобралась - цветной. Теперь осталось разобраться с пузырьками...
Теперь осталось разобраться с пузырьками...
А это уже скрипты, по-моему. Тут я, увы, не помощник.
Daisy, при использовании сторонних спрайтов в большинстве случаев в папке tiles у всех авторов создана папка custom куда ложатся какие-либо новые спрайты. Обрати внимание на номера перед каждым спрайтом, они уникальны и не должны повторятся. Проверить всё ли у тебя нормально можно после запуска движка, а после в корневой папке движка глянуть файл editor.log и найти строчку
Loading tiles from "game\data\tiles\"
а ниже ты увидишь перечень всех спрайтов подгруженных в движок. После них будет строчка типа
Tiles report: total=362, failed=0 (duplicates=0)
что означает кол-во используемых спрайтов = 362, битых = 0 и повторов = 0. Ну типа все нормально. Если failed и duplicates отличные от нуля, то в перечне ищи проблемный спрайт, в начале строки с проблемным спрайтом будет знак ! (заметь, что перед каждой строчкой в перечне есть два пробела).
Daisy, а ты им номера id присвоила? где-то в def есть параметр, который отвечает за id пузырьков
где-то
:) где где, там же в gamedef.gs следующий за ластами и аквалангом:
#def ID_BUBBLES -1
Daisy, а ты им номера id присвоила? где-то в def есть параметр, который отвечает за id пузырьков
Присвоила. И ничего(
надо тоже встроить пузыри в нашу игру, так что вечером скажу.
Daisy, при использовании сторонних спрайтов в большинстве случаев в папке tiles у всех авторов создана папка custom куда ложатся какие-либо новые спрайты. Обрати внимание на номера перед каждым спрайтом, они уникальны и не должны повторятся. Проверить всё ли у тебя нормально можно после запуска движка, а после в корневой папке движка глянуть файл editor.log и найти строчку
Loading tiles from "game\data\tiles\"
а ниже ты увидишь перечень всех спрайтов подгруженных в движок. После них будет строчка типа
Tiles report: total=362, failed=0 (duplicates=0)
что означает кол-во используемых спрайтов = 362, битых = 0 и повторов = 0. Ну типа все нормально. Если failed и duplicates отличные от нуля, то в перечне ищи проблемный спрайт, в начале строки с проблемным спрайтом будет знак ! (заметь, что перед каждой строчкой в перечне есть два пробела).
Я все прорверила, там действительно много чего повторялось. Все исправила, теперь по нулям. Добавляю предметы (items), которые мне дал Rindex. Ничего не меняется, проблемных файлов нет. Единственное, что добавляется - это из одной папки цветные, но мне они не нравятся, хочется обычные, но с маской.
хочется обычные, но с маской.
Я пока не делал на все стандартные маску, а только переработал предметы, которые я использовал. Поэтому загоняй любой стандартный спрайт в граф. редактор и делай маску, например так это выглядит в фотошопе:
http://www.onlinedisk.ru/cache/5a968c69c88bfaaddab52b171e0c6a90 (http://www.onlinedisk.ru/view/956318/sampleps.png)
Готовый стандартный 210 спрайт (http://sderni.ru/147886) с монеткой, который представлен выше. Как настроить сетку, для того, чтобы было все ровно и красиво, я писал где-то на форуме или в этой ветке.
Я пока не делал на все стандартные маску, а только переработал предметы, которые я использовал. Поэтому загоняй любой стандартный спрайт в граф. редактор и делай маску, например так это выглядит в фотошопе:
http://www.onlinedisk.ru/cache/5a968c69c88bfaaddab52b171e0c6a90 (http://www.onlinedisk.ru/view/956318/sampleps.png)
Готовый стандартный 210 спрайт (http://sderni.ru/147886) с монеткой, который представлен выше. Как настроить сетку, для того, чтобы было все ровно и красиво, я писал где-то на форуме или в этой ветке.
Он у меня не хочет открывать ни в одном граф. редакторе. Только могу посмотреть.
Спасибо за монетку!
Как назвать комнаты по-русски? Я жму ctril+R, хочу написать, а он выдает английские буквы(
Как назвать комнаты по-русски? Я жму ctril+R, хочу написать, а он выдает английские буквы(
Где это ты жмёшь ctril+R, и зачем? Названия комнат находятся data --> map --> dizzy.nam (открывается блокнотом)
Вот там и пиши названия комнат по русски, вот прмер:
0;6;КРУТОЙ УТЕС
1;6;НЕБЕСА
2;6;КРЫША ПАРОВОЗНОГО ДЕПО
3;6;БОЛЬШЕ ОБЛАКОВ
4;6;ОБЛАКА
Где это ты жмёшь ctril+R, и зачем? Названия комнат находятся data --> map --> dizzy.nam (открывается блокнотом)
Вот там и пиши названия комнат по русски, вот прмер:
Спасибо! Я жала в самом редакторе - так было показано в видиопримере.
Спасибо! Я жала в самом редакторе - так было показано в видиопримере.
Нет, названия комнат именно там находятся. Они единственные вынесены за папку scripts.
---------- Post added at 20:27 ---------- Previous post was at 20:21 ----------
В редакторе, наверное, только нумерация комнат будет видна. По-русски там ничего не выйдет написать, он не поймёт. Однако, когда всю карту сделаешь, можешь нажимая уже в самой игре crtl+стрелки писать названия комнат. Вроде так делается.
Хочу поделиться своими недавними зарисовками (на выставке делать было нечего, решила на листке порисовать). Вот скажите - кому-нибудь в них что-то понятно? :rolleyes::D
http://s51.radikal.ru/i132/1210/e9/1edcd867e801.jpg (http://www.radikal.ru)
http://s51.radikal.ru/i134/1210/50/4319c3b2ea36.jpg (http://www.radikal.ru)
Хочу поделиться своими недавними зарисовками (на выставке делать было нечего, решила на листке порисовать). Вот скажите - кому-нибудь в них что-то понятно? :rolleyes::D
Ну вот зачем игру засветила? )
Да там только малая часть и еще не известно, сколько я буду менять. А что, не ужели все понятно? ))))
Вот скажите - кому-нибудь в них что-то понятно?
Не понятно, да и толком не видно, особенно на второй картинке.
Не понятно, да и толком не видно, особенно на второй картинке.
:D
Вопрос: как нарисовать новый спрайт?
Вопрос: как нарисовать новый спрайт?
Где? Я лично, свои в ART-Studio на Спектруме рисовал в ч/б цвете.
http://img829.imageshack_.us/img829/6828/dage2.png
Потом Юрий их в Фотошопе разукрашивал.
http://www.onlinedisk.ru/get_image.php?id=850263http://www.onlinedisk.ru/get_image.php?id=850243
Мне так просто удобнее было.
Да в том-то и дело - я не знаю, где рисовать(((
Да в том-то и дело - я не знаю, где рисовать(((
Я же сказал, фотошоп. У меня арт-студио+фотошоп. Ещё раз говорю, мне удобней было именно так, надо было видеть героя. А рамка эмулятора Унреал такая-же, как в играх Dizzy-AGE.
Я же сказал, фотошоп.
учитывая его размер и стоимость не самый лучший вариант.
учитывая его размер и стоимость не самый лучший вариант.
Зато самый удобный. Да, размер конечно ого-го, про стоимость... это фирмы себе позволить могут, или профессиональные художники, каждый день работающие в нём, остальные идут другим путём. Надеюсь, не стоит говорить каким.
Тогда GraphicsGale, что-ли... - http://www.humanbalance.net/gale/us/
или PaintNET - http://paintnet.ru
А я рисую в том числе в mtPaint. Там удобно маску делать, простенький такой редактор.
http://sourceforge.net/projects/mtpaint/
учитывая его размер и стоимость не самый лучший вариант.
учитывая прогресс телекома и неизменную тягу к халяве я с чистой совестью (я не зарабатываю этим, а только для личных нужд) пользуюсь очень давно сборкой от alexagf с руборды. И вес небольшой, порядка 290 метров и ставится быстро. Рекомендую. Для меня это лучший вариант, к убогим простеньким редакторам не охота привыкать. Хотя каждому своё и смотря для каких нужд, конечно.
Вот недавно обновил.
Adobe Photoshop CS6 v13.0 Extended Lite RU/EN Registered & Unattended
юра, прошу прощенья, что потерялся ненадолго, я тут, обновление копятся, как будет возможность, сгружу.
надо тоже встроить пузыри в нашу игру, так что вечером скажу.
Ну как там, с пузырьками?
Ну как там, с пузырьками?
В файле gamedef.gs установи:
#def PLAYER_BUBBLES 12 // set this to the count of air bubble objects you placed in the map. used
это количество пузырьков
и
#def ID_BUBBLES -1 // set this to the first valid bubble object. the rest of the PLAYER_BUBBLES bubbles have consecutive ids. used in WaterPlay
это ID первого пузырька. Допустим, у тебя 12 пузырьков, и номера ID у них 100, 101, 102, 103 и 111, то там надо прописать номер младшего пузырька 100
Сами пузырьки надо разместить где-то на карте в виде активных обьектов.
Не получается( Что-то я видимо делаю не так. Сделала 8 пузырьков (и так и прописала), присвоила номера, прописала номер самого младшего и ничего. Выдает ошибку.
Не получается( Что-то я видимо делаю не так. Сделала 8 пузырьков (и так и прописала), присвоила номера, прописала номер самого младшего и ничего. Выдает ошибку.
Девушка, вы такая девушка) Если выдает ошибку, надо писать, что за ошибка или присылать исходник в личку)
Я, наверно, скрытая блондинка))) Чуть попозже пришлю игру.
Гхм... Надо было сразу скинуть игру - комп накрылся((( Хорошо еще будет, если я свою игру не потеряю(
PS: пишу с сотового.
Гхм... Надо было сразу скинуть игру - комп накрылся((( Хорошо еще будет, если я свою игру не потеряю(
PS: пишу с сотового.
Храни такое на диске D. Хотя, если всё пропало, будет стимул сделать ещё лучше. Главное опять начать делать, дальше не остановишься.
Гхм... Надо было сразу скинуть игру - комп накрылся((( Хорошо еще будет, если я свою игру не потеряю(
PS: пишу с сотового.
Комп накрылся - не значит, что диск и файлы накрылись.
Прикрутил форум (http://dizzyage.flybb.ru/) к русскоязычному описанию движка DizzyAge (http://dizzyage.narod.ru/). Удобно, что можно сделать для каждой разрабатываемой игры специальные разделы, часть которых видна только разработчикам, а часть публичная для рекламы, картинкок и всяческого обсуждения конкретной игры.
Titus, разбирал func WaitTime( seconds ) из util.gs. При применении в коде WaitTime( 10 ), например:
SamplePlay(13); // проигрываем 13 эффект (длительность 10 сек.)
MusicVolume( 30 ); // делаем тише основную музыку по громкости 30%
WaitTime( 10 ) // ждем 10 сек
MusicVolume( 100 ); // делаем основную музыку по громкости 100%
Обратил внимание, что во время паузы 10 сек, Диззи кроме ходьбы и прыжков, остальные команды/функции не работают. Почему? Просто хотелось чтобы по истечению 10 сек, основная музыка вернулась на 100%.
------------
Нашел еще счетчик:
/////////////////////////////////////////////////////////////////////////////////
// Gameplay time counter
/////////////////////////////////////////////////////////////////////////////////
int g_timer_lasttick;
// call on begin game callback (BeginNewGame) to reset timer
func TimerReset()
{
g_timer_lasttick = 0;
GameSet(G_TIMER,0);
}
// call on load callback (LoadUserData)
func TimerOnLoad()
{
g_timer_lasttick = 0;
}
// update, call on the game update handler
func TimerUpdate()
{
if(g_timer_lasttick==0) g_timer_lasttick = gs_time();
timer_currenttick = gs_time();
delta = timer_currenttick - g_timer_lasttick;
timer = GameGet(G_TIMER);
if(delta>0) timer += delta;
GameSet(G_TIMER,timer);
g_timer_lasttick = timer_currenttick;
}
// call with reference paramters to get the play time
func TimerGetTime( hours, minutes, seconds )
{
timer = GameGet(G_TIMER)/1000; // seconds
*hours = timer / 3600;
*minutes = (timer / 60) % 60;
*seconds = timer % 60;
}
// debug display of the elapsed time
func TimerPrint()
{
h=0; m=0; s=0;
TimerGetTime(&h,&m,&s);
println(h,":",m,":",s);
}
Может лучше это использовать? Но тогда хотелось бы твоих комментариев, для лучшего понимая сути (с примером хотелось бы).
Titus, разбирал func WaitTime( seconds ) из util.gs. При применении в коде WaitTime( 10 ), например:
SamplePlay(13); // проигрываем 13 эффект (длительность 10 сек.)
MusicVolume( 30 ); // делаем тише основную музыку по громкости 30%
WaitTime( 10 ) // ждем 10 сек
MusicVolume( 100 ); // делаем основную музыку по громкости 100%
Обратил внимание, что во время паузы 10 сек, Диззи кроме ходьбы и прыжков, остальные команды/функции не работают. Почему? Просто хотелось чтобы по истечению 10 сек, основная музыка вернулась на 100%
Логично, что все останавливается, ведь ты ждешь истечения определенного времени, и работают фоном только хендлеры, которые вызываются движком.
Для затихания и нарастания громкости музыки используй функцию MusicFade(fadeout, fadein), где:
fadeout - время затухания музыки в секундах
fadein - время нарастания музыки в секундах
'Когда начинает играть новая музыка, старая затихает в течении заданного временного интервала fadeout. Громкость же новой музыки, соответственно, возрастает за время интервала fadein.'
Titus, да с fade'ами все понятно. Дело в другом. Музыка одна. Задача чтобы по истечению 10 сек музыка выровнялась по громкости на 100%. Т.е. как я понял WaitTime это для всего, а нужно привязать только к времени звучание эффекта, ну чтобы пока проигрывался эффект 10 сек., музыка звучала тише, а по истечению 10 сек, вернулась громкость на место.
Вот поэтому и подумалось, что может прикрутить сторонний счетчик времени, но пока не могу вникнуть - это оно или нет.
Продолжения перевода статей по редактору более не предвидится? :(
Titus, да с fade'ами все понятно. Дело в другом. Музыка одна. Задача чтобы по истечению 10 сек музыка выровнялась по громкости на 100%. Т.е. как я понял WaitTime это для всего, а нужно привязать только к времени звучание эффекта, ну чтобы пока проигрывался эффект 10 сек., музыка звучала тише, а по истечению 10 сек, вернулась громкость на место.
Вот поэтому и подумалось, что может прикрутить сторонний счетчик времени, но пока не могу вникнуть - это оно или нет.
Тогда поподробнее распиши сцену, где тебе это надо сделать, как и зачем. Можешь в закрытой ветке на диззи-форуме)
---------- Post added at 15:37 ---------- Previous post was at 15:37 ----------
Продолжения перевода статей по редактору более не предвидится? :(
Ты хочешь сделать игру? Если да, то предвидится)
Titus, я пытался сделать так:
func ActionObject_3050 ( idx )
{
if(ObjGet(ObjFind(3050),O_STATUS)==0)
{
SamplePlay(13);
MusicVolume( 30 );
ObjSet(ObjFind(3050),O_STATUS,1);
WaitTime( 10 );
MusicVolume( 100 );
}
else
{
SampleStopAll(13); // почему-то просто SampleStop не работает...
ObjSet(ObjFind(3050),O_STATUS,0);
MusicVolume( 100 );
}
}
Titus, я пытался сделать так
Еще раз повторюсь:
Тогда поподробнее распиши сцену, где тебе это надо сделать, как и зачем.
Например:
Подхожу к объекту 3050, нажимаю энтер, включается динамик и бла-бла 10 сек. Если во время звучания семпла еще раз энтер, то стоп.
Мб бы и сделал, помнится с началом цикла переводов я сперва пробовал ковырять редактор.
Думаю что для начала что-то короткое бы сделал.
Мб бы и сделал, помнится с началом цикла переводов я сперва пробовал ковырять редактор.
Думаю что для начала что-то короткое бы сделал.
Начинай) Для начального этапа там переведено достаточно)
---------- Post added at 17:17 ---------- Previous post was at 16:33 ----------
Например:
Подхожу к объекту 3050, нажимаю энтер, включается динамик и бла-бла 10 сек. Если во время звучания семпла еще раз энтер, то стоп.
Да, если ты хочешь по прекращению заданного интервала времени, не останавливая на это время игру, совершить какое-то действие, нужно вводить специальный сервер обработки событий по таймеру. Подумаю над этим.
Titus, угу, именно так. Я привел простенький пример. Ну а там уже как хош можно крутить под свои дела.
SampleStopAll(13); // почему-то просто SampleStop не работает...
Потому что, согласно инструкции, функции SampleStop() нужно передавать не ID семпла, а его индекс. А индекс можно получить при вызове SamplePlay().
Пример:
sidx = SamplePlay(5, 0);
SampleStop(sidx);
Titus, да, раскурил. Нужно главу про звук перевести. Теперь понял. Ну а второй параметр это не обязательный - опциональный? (0 - один раз проиграть, если не указывать, то 0, а если указать 1 то по кругу)
---------- Post added at 17:04 ---------- Previous post was at 16:56 ----------
проясни, а если объявить в sound.gs
#def FX_MUSIC 13
после def это индекс или как?
запутался я чот совсем....
проясни, а если объявить в sound.gs
#def FX_MUSIC 13
после def это индекс или как?
запутался я чот совсем....
Нет, это равнозначно FX_MUSIC = 13, т.е. FX_MUSIC становится синонимом цифры 13.
и это номер музыки или ее ID
Индекс (idx) получить можно только уже вызвав нужную музыку или звуковой эффект, на выходе соответствующей функции, как я указал выше.
Titus, в моем случае, конечно, подходит SampleStopAll, и все работает прекрасно. Но таки хочется докопаться до сути именно SampleStop. От такой я тупоупоротый :)
Мой мозг твою конструкцию принимает вот так:
func ActionObject_3050 ( idx )
{
if(ObjGet(ObjFind(3050),O_STATUS)==0)
{
SamplePlay(FX_MUSIC);
midx = SamplePlay(FX_MUSIC);
ObjSet(ObjFind(3050),O_STATUS,1);
}
else
{
SampleStop( midx );
ObjSet(ObjFind(3050),O_STATUS,0);
}
}
И оно тупо вываливает игру по событию else c ошибкой BADTYPE бла-бла. Я б забил, но уже принципиально интересно. Я тупо потерял день из-за одной тупейшей команды... :)))
Titus, в моем случае, конечно, подходит SampleStopAll, и все работает прекрасно. Но таки хочется докопаться до сути именно SampleStop. От такой я тупоупоротый
В твоем случае лучше использовать остановку всех самплов)
Во-первых, из этих строк:
SamplePlay(FX_MUSIC);
midx = SamplePlay(FX_MUSIC);
первая строка лишная
во-вторых, нельзя сохранять индекс мелодии в переменной, которая является локальной, и пропадает при выходе из функции. Это значение надо либо сохранять в глобальных переменных, либо останавливать все семплы. Потому что, у тебя в функции используется либо вызыв проигрывания мелодии, либо ее выключение. В случае выключения переменная midx не инициализирована, т.к. она локальная для этой функции, и при входе в функцию неопределена, и это конечно дает ошибку.
---------- Post added at 23:44 ---------- Previous post was at 23:43 ----------
Я тупо потерял день из-за одной тупейшей команды... :)))
Не потерял, а потратил на тренировку и обучение)
Titus, ты, наверное, забыл еще исправить мой скрипт на правильный (с коментариями), чтобы лучше воспринимать написаное тобой, да? :) Или я много хочу?
Я не буду использовать остановку всех сэмплов. Ибо дойду до конца. Или с твоей помощью или народным способом - перебором всего возможного.
Потерял. Это не тренировка. Это не мое. Я больше скриптов разобрал и написал, чем с этой долбаной СамплеСтоп долбаюсь. Не хватает хороших готовых примеров.
Titus, ты, наверное, забыл еще исправить мой скрипт на правильный (с коментариями), чтобы лучше воспринимать написаное тобой, да? :) Или я много хочу?
Просто так не переписать, нужен хендлер запуска функции по таймеру.
Итак, новинка - возможность запускать отложенные функции.
Для начала добавляем в файл def.gs следующие строки:
#def G_TICKS 100 // Счетчик игрового времени
#def G_TFUNC 101 // Идентификатор отложенной функции
#def G_TVALUE 102 // Время вызова отложенной функции
В данном случае мы вводим три новых игровых переменных с номерами 100, 101, 102 (или любые другие свободные для вашей игры номера глобальных игровых переменных). Эти переменные нам необходимы не только для реализации механизма запускоа отложенных функций, но и для корректного сохранения состояния в файле отгрузок.
Переменная G_TICKS - это дополнительный таймер, приращиваемый каждый игровой фрейм (1/36 секунды для стандартных настроек). Этот счетчик инкрементируется в хендлере HandlerGameUpdate(), который вызывается только во время игрового процесса, тогда как в режиме меню он не вызывается, и счетчик, как нам и требуется, не инкрементируется.
Переменная G_TFUNC содержит ID (по простому - номер) отложенной функции. Почему номер, а не имя? Все потому, что стандартный файл отгрузок не умеет сохранять строковые величины, и для упрощения каждой отложенной функции присваевается уникальный номер.
Переменная G_TVALUE - это время вызыва отложенной функции.
Далее, добавляем в файл handlers.gs в функцию HandlerGameUpdate() после строк:
// update some particluar object(s) that need to be updated no matter in what room we are
// ...
следующий фрагмент:
TValue = GameGet(G_TVALUE); // Получить время вызова отложенной функции
if (TValue) // Если время = 0, то нет отложенных функций
{
if (TValue <= GameGet(G_TICKS)) // Если текущее время достигло времени вызова функции, то
CallTimeFunc(); // вызвать обработчик отложенных функций
}
GameSet(G_TICKS, GameGet(G_TICKS) + 1); // Прирастить счетчик игрового времени
Далее, в файл utils.gs добавляем функцию:
/////////////////////////////////////////////////////////////////////////////////
//
// Store time function delay and ID
//
/////////////////////////////////////////////////////////////////////////////////
func TimeFuncSet(fid, fdelay)
{
GameSet(G_TFUNC, fid); // Сохранить ID отложенной функции в переменной G_TFUNC
GameSet(G_TVALUE, GameGet(G_TICKS) + fdelay); // Сохранить время вызыва отложенной функции в переменной G_TVALUE
}
Ну и, наконец, добавим в игру простой пример.
В требуемое место игры в файле game.gs сперва добавляем первый запрос отложенной функции:
TimeFuncSet(TM_FIRSTFUNC, 5*36); // Запросить функцию TM_FIRSTFUNC через 5 секунд
А так же добавляем в тот же файл game.gs обработчик отложенных функций:
/////////////////////////////////////////////////////////////////////////////////
//
// Time Functions (non-latent)
//
/////////////////////////////////////////////////////////////////////////////////
#def TM_FIRSTFUNC 1
#def TM_SECONDFUNC 2
// ... etc
func CallTimeFunc()
{
TFunc = GameGet(G_TFUNC); // Получить ID вызываемой функции
if (TFunc == 1) // TM_FIRSTFUNC
{
println("First Time Call"); // [отладочная информация]
CM_EnterJump(0, 10); // Прыжок вверх
SamplePlay(1); // Включить звук №1
TimeFuncSet(TM_SECONDFUNC, 10*36); // Запросить функцию TM_SECONDFUNC через 10 секунд
return; // Выход
}
if (TFunc == 2) // TM_SECONDFINC
{
println("Second Time Call"); // [отладочная информация]
PlayerSet(P_LIFE,PlayerGet(P_LIFE)-30); // Отнять у Диззи 30 единиц энергии
SamplePlay(2); // Включить звук №2
GameSet(G_TVALUE, 0); // Отключить запрос временных функций
return; // Выход
}
// ... etc
GameSet(G_TVALUE, 0); // Отключить запрос временных функций
// (заглушка для неправильных ID функций)
}
Как видно из примера, сперва запрашивается отложенная функция TM_FIRSTFUNC через интервал 5 секунд. В этой функции игрока подбрасывает наверх и звучит звук, а так же сразу запрашивается следующая отложенная функция TM_SECONDFINC через интервал 10 секунц. В этой функции у игрока убавляется 30 единиц энергии и так же звучит звук, после чего отложенные функции отключаются.
Замечание: поскольку, обработчик отложенных функций не фоновой (non-latent), то из него НЕ ДОЛЖНЫ вызываться фоновые (latent) функции. При желании вызвать фоновые функции, следует пользоваться конструкцией ScrRequest(). Однако, т.к. отложенная функция может вызваться в любой момент, в независимости от игровой ситуации (кроме нахождения в меню), отложенными функциями следует пользоваться с большой аккуратностью, чтобы не испортить ход игры.
Так же статья опубликована на DizziAge-форуме (http://dizzyage.flybb.ru/viewtopic.php?f=14&t=10)
О, чудо! С этим нужно было переспать....
Завел в gamedef.gs
#def G_FXМ 100
и конструкция
func ActionObject_3050 ( idx )
{
if(ObjGet(ObjFind(3050),O_STATUS)==0)
{
G_FXM = SamplePlay(FX_MUSIC);
ObjSet(ObjFind(3050),O_STATUS,1);
}
else
{
SampleStop(G_FXM);
ObjSet(ObjFind(3050),O_STATUS,0);
}
}
заработала как нужно.
Теперь будем разбирать китайские письмена что выше. Спасибо.
---------- Post added at 09:48 ---------- Previous post was at 09:41 ----------
Titus, а разве в game.gs можно заносить
#def TM_FIRSTFUNC 1
#def TM_SECONDFUNC 2
переменные?
О, чудо! С этим нужно было переспать....
Завел в gamedef.gs
#def G_FXМ 100
Только не в gamedef.gs, а в def.gs.
И не 100, т.к. 100, 101 и 102 уже занято тем, что я описал выше, а, например 104.
Далее - то, что у тебя - не могло заработать) Так как G_FXM - это не переменная, а константа)
---------- Post added at 12:16 ---------- Previous post was at 12:15 ----------
а разве в game.gs можно заносить
#def TM_FIRSTFUNC 1
#def TM_SECONDFUNC 2
переменные?
Можно. Это не переменные, а, скажем так, константы. Все файлы .gs равнозначные.
Titus, но оно работает. у меня пока не занято 100, поскольку я еще разбираю твой пример и не вносил.
Titus, но оно работает. у меня пока не занято 100, поскольку я еще разбираю твой пример и не вносил.
Твоя конструкция равносильна:
100 = SamplePlay(FX_MUSIC);
и
SampleStop(100);
что является абсурдом, и выдаст ошибку компиляции.
Обьяснение одно - ты не там или неправильно прописал #def G_FXМ 100, в связи с чем G_FXM воспринимается компилятором не как константа, а как локальная переменная.
Titus, проверил еще раз. Все, как описано выше. Только теперь по событию else игра не вываливается с ошибкой, а выключает эффект. Ну смысл мне обманывать?
---------- Post added at 11:21 ---------- Previous post was at 11:13 ----------
Ну и наверное последнее, это SampleVolume( percent ). Можно ли как-то эту команду привязать только к одному спецэффекту, а не ко всем происходящим в игре сразу?
Titus, проверил еще раз. Все, как описано выше. Только теперь по событию else игра не вываливается с ошибкой, а выключает эффект. Ну смысл мне обманывать?
Пришли-ка мне свою программу)
---------- Post added at 14:42 ---------- Previous post was at 13:26 ----------
Разобрался.
Оказывается в языке GS9, в отличие от Си, глобальные определения НЕ являются константами, хотя рекомендуется использовать их только в роли констант.
9.COMPILE DIRECTIVES (http://www.yolkfolk.com/dizzyage/books/gs9/page09.html)
Even if the defines are actually global variables, it is recomended to be treated as constants and not change their values. There is more about those defines, but for the level of this book, this is enough.
yuriy
Для проверки можешь заменить #def G_FXМ 100 на #def G_FXМ 123456789, и все равно будет работать.
Но конструкция все равно неправильная. Попробуй отпишись в середине проигрывания звука, а потом перезапусти игру и загрузи отгрузку. Посмотри, что получится)
Titus, а если в def.gs перенести, то конструкция будет правильной? (ну или приведи пример)
Придумал вариант без всех этих наворотов:
Добавляем в файл utils.gs следующую функцию:
/////////////////////////////////////////////////////////////////////////////////
//
// Stop a voices, played specified sample
//
/////////////////////////////////////////////////////////////////////////////////
func SampleStopByID(sid)
{
for (i=SOUND_VOICES-1; i>=0; i--) // Перебираем все голоса от 0 до SOUND_VOICES (по умолчанию 16)
{
if (SamplePlaying(i) == sid) // Если в данном голосе звучит семпл с ID = sid,
SampleStop(i); // то останавливаем его звучание
}
}
Система проигрывания семплов на движке DizzyAge устроена следующим образом. Есть 16 голосов, по каждому из которых может играть свой семпл. Т.е. одновременно можно включить на проигрывание не более 16 перекрывающихся семплов. Если вы включили 17-й, а те 16 все еще играют, то будет ошибка.
Вышеприведенная функция работает очень просто. Перебираются все 16 голосов, и ищется, на каком из них играет семпл с заданным ID, и, соответствующие голоса (а их может быть несколько) выключаются.
---------- Post added at 15:08 ---------- Previous post was at 15:03 ----------
Titus, а если в def.gs перенести, то конструкция будет правильной? (ну или приведи пример)
Нет, неправильной, т.к. все файлы с расширением .gs равнозначны.
---------- Post added at 15:15 ---------- Previous post was at 15:08 ----------
Ну и наверное последнее, это SampleVolume( percent ). Можно ли как-то эту команду привязать только к одному спецэффекту, а не ко всем происходящим в игре сразу?
Как я понимаю, нельзя)
т.е. это будет верно?
func ActionObject_3050 ( idx )
{
if(ObjGet(ObjFind(3050),O_STATUS)==0)
{
SamplePlay(13);
ObjSet(ObjFind(3050),O_STATUS,1);
}
else
{
SampleStopByID(13);
ObjSet(ObjFind(3050),O_STATUS,0);
}
}
---------- Post added at 13:18 ---------- Previous post was at 13:17 ----------
Как я понимаю, нельзя)
Это очень не гибко.
т.е. это будет верно?
Верно. Но все равно проверь.
---------- Post added at 15:28 ---------- Previous post was at 15:26 ----------
Это очень не гибко.
Сделай несколько звуков с разной громкостью. Благо, их количество не ограничено.
---------- Post added at 15:30 ---------- Previous post was at 15:28 ----------
Кстати, учти, что проигрываемые в данный момент звуки, вроде бы не запоминаются в файле отгрузки. Выбери длинный звук и проверь.
Titus, да работает, работает как написано выше. Абы глюков не было.
Не получится. Играет семпл, игрок выходит в другую комнату. Уменьшаться по громкости должен только один семпл (текущий). Если сделать разные..... стоп. Хотя есть варианты.... тока сейчас не получится проверить, это уже дома. Аудишн нужен.
да, при записи игры (когда проигрывается сэмп) и после загрузки - сэмп уже не звучит. Но ничего не мешает вкл. проигрывание заново.
Titus, да работает, работает как написано выше. Абы глюков не было.
Не будет, раз работает) В теории все правильно)
Titus, блин, это 3-4 трека огг лепить (пусть хоть по 1 метру), вес только растет. Вот это не гибкость. Вот чего нельзя типа SampleVolume (sample_id, percent) сделать? Чтобы sample_id был опциональным как loop ???
Да и вообще движок очень куцый по сравнению с теми вещами что описаны в играх.
---------- Post added at 14:09 ---------- Previous post was at 14:00 ----------
Titus, походу это
func FX_Stop(fx)
{
if(fx==-1) return -1;
while(true)
{
v = FX_Playing(fx);
if(v==-1) return;
SampleStop(v);
}
}
делает то же самое, что и SampleStopByID
Что скажешь?
делает то же самое, что и SampleStopByID
Что скажешь?
Я не знаю, откуда это ты взял, кроме того, у тебя не описана функция FX_Playing().
да, уже заметил
func FX_Playing(fx)
{
if(fx==-1) return -1;
for(v=0;v<SOUND_VOICES;v++)
if(SamplePlaying(v)==fx) return v;
return -1;
}
да в tos залез
FX_Playing(fx) - выдает номер голоса, по которому играет заданный эффект. Однако, если эффект играет в нескольких голосах одновременно, то будет выдан номер только одного из этих голосов. Так что фактически FX_Stop() делает тоже самое, что и у меня, только выключает одну копию звука, а у меня выключает все)
---------- Post added at 17:00 ---------- Previous post was at 16:50 ----------
Единственное, моя функция не проверяет ошибки, но судя по всему это и не требуется.
В общем опробовал я функция TimeFuncSet, странно, но получилось все с первого раза :) Правда для моего частного случая, это все равно что гектар лопатой обрабатывать, но видать по другому никак... (и что самое интересное, что наверняка никто в будущем и не заметит)
Это понадобилось для того, чтобы по истечению проигрывания сэмпла статус вернулся в 0.
Залейте плз классический набор спрайтов из движка dizzy age)
Залейте плз классический набор спрайтов из движка dizzy age)
Ну папка tiles же в редакторе - http://sderni.ru/162400
Если нужны ещё другие спрайты - обращайся, залью.
Ну папка tiles же в редакторе - http://sderni.ru/162400
Если нужны ещё другие спрайты - обращайся, залью.
Благодарствую, пока достаточно этих :)
Здравствуйте.
Подскажите, кто-нибудь, как отключить обработку некоторых кнопок джойстика во время игры. Мне надо, чтобы не работали кнопки "меню" и "вверх".
Сам я для кнопки "меню" придумал только такой способ:
func OpenDialogGameMenu()
{
if(JoystickStatus(2)) return;
...
...
Но мне этот способ не нравится тем, что если в .ini файле переопределить коды кнопок джойстика, то это перестанет работать. Да и сам способ дурацкий на мой взгляд.
А для кнопки "вверх" в функции прыжка, даже такой способ не работает - ни один код не подошел.
Перекопал все инструкции по движку, ничего больше не нашел. Вопрос не срочный, но хотелось бы знать.
Я не могу подсказать, ибо не имею никакого джойстика.
Кстати, надо купить сегоподобный, а то играть клавой не всегда удобно.
Также не имею джойстика и соответственно практического опыта по работе с ним.
В теории я бы начал с написания отдельной функции и вызова ее в handlers.gs - это первое, что пришло в голову.
Вобщем, немного покопавшись, в итоге сделал так (может пригодится кому в будущем)
В def.gs добавил несколько переменных в которых будут храниться коды кнопок джойстика:
#def J_B0 0
#def J_B1 1
#def J_B2 2
#def J_B3 3
....
в handlers.gs в функции HandlerGameInit() добавил следующее:
joybut = 0;
gs_inigetint("dizzy.ini","INPUT","joystick_b0",&joybut);
J_B0 = joybut;
gs_inigetint("dizzy.ini","INPUT","joystick_b1",&joybut);
J_B1 = joybut;
gs_inigetint("dizzy.ini","INPUT","joystick_b2",&joybut);
J_B2 = joybut;
gs_inigetint("dizzy.ini","INPUT","joystick_b3",&joybut);
J_B3 = joybut;
......
Этим куском из dizzy.ini считываются реальные коды кнопок (для функции JoystickStatus() ) и помещаются в созданные ранее переменные. В этом варианте теперь неважно как кнопки будут перезаданы в ini-файле, даже если там совсем не будет их задания, обрабатываться они будут правильно.
И наконец в menus.gs в функции OpenDialogGameMenu() в начале добавил следующую строчку:
if(JoystickStatus(J_B2)) return;
Выход из функции если он вызывалась по кнопке джойстика.
В итоге теперь меню можно вызвать с клавиатуры, а с джойстика нельзя.
-------------------------
С прыжком по клавише вверх получилось совсем просто. Там вместо функции JoystickStatus() надо использовать JoystickAxe(), а она в книжке не описана, плюс ее название там дано неправильно: gsJoystickAxe. Пришлось покопаться с консолью, чтобы понять как она работает. В качестве параметра функции задается номер оси. К примеру 0-горизонтальная, 1-вертикальная. Плюс можно задавать и больше, но у меня столько нету. На выходе выдается число со знаком, положительное - ось отклонена в одну сторону, отрицательное - в другую, ноль - нет отклонения. Величина числа, подозреваю зависит от настройки чувствительности и режима джойстика цифровой/аналоговый.
И в итоге я в movement.gs в хендлере HandlerGameUpdate().
изменил:
if( SUPPORT_JUMPUP)
UseUpForJump();
на
if( SUPPORT_JUMPUP && (JoystickAxe(1)>=0))
UseUpForJump();
Теперь, опять же, если играть на клавиатуре то по кнопке вверх Диззи прыгает, а на джойстике ничего не происходит и прыжок работает только с отдельной кнопки.
Правда саму проверку, лучше было бы засунуть в функцию UseUpForJump(), но там какая-то слишком мудреная логика я в ней еще не разобрался, поэтому пока так.
А что за игру делаем? Или просто играем?
Для своей детворы решил сделать несколько миниигр с постепенным повышением сложности, ну и просто движок освоить, т.к. самому интересно и ностальгия. А кнопками джойстика озаботился, потому что младший (3 года) постояно их путает и в меню влезает, а выйти из него не может.
С прыжком по клавише вверх получилось совсем просто. Там вместо функции JoystickStatus() надо использовать JoystickAxe(), а она в книжке не описана, плюс ее название там дано неправильно: gsJoystickAxe. Пришлось покопаться с консолью, чтобы понять как она работает.
Актуально или нет, но решил написать. В history.txt к движку есть такое:
080928 v2.2.1
- support for joystick: JoystickStatus(key) and JoystickAxe(axe)
button codes: 0<=key<20 (the hat switch's four directional buttons buttons are 16,17,18,19)
axe codes: 0<=axe<8 (first x axe is 0, and first y axe is 1)
axe values range from -1000 to 1000
- customization of joystick buttons and x and y axes in dizzy.ini
use these values if you are to use Joystick functions in your scripts
you should use the dead zone values in dizzy.ini if you must check axes' values.
И еще выше, чуток:
090426 v2.3
.....
- switched joystick jump and action buttons, so action is now on 'A' button of the xbox360 controller (makes more sense)
.....
Хз, нужно или нет, я сам если честно 5 минут назад увидел :)
В history.txt к движку
Спасибо.
Забавно. Вроде бы читал чейнджлог, а не запомнил этого. Пришлось самому через отладку исследовать как функции работают. Надо будет перечитать, вдруг еще что полезное попадется.
Надо бы автору движка сообщить, что в книге урезанное описание. :)
Для своей детворы решил сделать несколько миниигр с постепенным повышением сложности, ну и просто движок освоить, т.к. самому интересно и ностальгия. А кнопками джойстика озаботился, потому что младший (3 года) постояно их путает и в меню влезает, а выйти из него не может.
Как продвигаются игры? Если нужна помощь, пиши)
Спасибо, буду иметь в виду.
Так-то все понятно, примеров кода много. Основная проблема в отсутствии свободного времени и фантазии. Сделал пару миниигр для детей, потом идеи закончились, решил поэтому взять пару готовых игр и улучшить их, заодно попрактикуюсь.
Спасибо, буду иметь в виду.
Так-то все понятно, примеров кода много. Основная проблема в отсутствии свободного времени и фантазии. Сделал пару миниигр для детей, потом идеи закончились, решил поэтому взять пару готовых игр и улучшить их, заодно попрактикуюсь.
А мини-то игры выложить для всех? )
Да я честно говоря не думал, что они кому-то тут интересны будут. Там особо ничего нет, несколько комнат, простейшие головоломки. Но могу выложить, может кому как пример пригодится.
Да я честно говоря не думал, что они кому-то тут интересны будут. Там особо ничего нет, несколько комнат, простейшие головоломки. Но могу выложить, может кому как пример пригодится.
Очень хотим) Все DizzyAge игры на вес золота)
Мы же большие дети тут, поэтому все, что для детей - для нас в самый раз)
Вот тут одну скачать можно
Dizzy Collects Diamonds 2 (https://bitbucket.org/Verm/dizzy-collects-diamonds-02/downloads/Dizzy%20Collects%20Diamonds%2002(V001-010).zip)
В настройках можно включить режим скроллинга, бессмертие и поменять вид персонажа.
Если можно - технической критики в ответ.
Вот тут одну скачать можно
Dizzy Collects Diamonds 2 (https://bitbucket.org/Verm/dizzy-collects-diamonds-02/downloads/Dizzy%20Collects%20Diamonds%2002(V001-010).zip)
В настройках можно включить режим скроллинга, бессмертие и поменять вид персонажа.
Если можно - технической критики в ответ.
Не, ну вообще! Как можно было затаить такую милейшую игрушку!!!
- - - Добавлено - - -
Все прошел! Очень мило все сделано)
Похоже, ты единственный кто разобрался с моим скроллингом) Буржуи так и не смогли (или не захотели).
А где другие игрушечки? Часть первая, например?
Verm-V, если выйти со столовой, съев все фрукты и зайти обратно, то они все восстановятся - это так задумано?
Прошел, быстро, мило и прикольно! Спасибо!
Verm-V, если выйти со столовой, съев все фрукты и зайти обратно, то они все восстановятся - это так задумано?
Прошел, быстро, мило и прикольно! Спасибо!
Думаю, что задумано так)
Единственное, если уж совсем придираться, то я бы скамейке зеленой маску нормальную бы нарисовал)
Надо бы буржуям дать. Может на конкурс вставят, еще дни остались до конца.
- - - Добавлено - - -
Если можно - технической критики в ответ.
Придраться вообще не к чему)
Придраться вообще не к чему)
плавность?
плавность?
Все с плавностью норм) Это же наш движок из последней версии Ночи в музее)
- - - Добавлено - - -
Разместил тему на буржуйском форуме, пускай играют в хорошенькие игры)
http://www.yolkfolk.com/bb/showthread.php?3094-Dizzy-Collects-Diamonds-2-DOWNLOADABLE
benefactor
13.07.2016, 22:34
Скачал, прошел - все мило, весело, с настроением! Многообещающее начало! Ничего критического сказать не могу - для мини-игры отлично, тем более одной из первых, как я понял.
Иностранцы уже спрашивают, а где первая часть? )
Не, ну вообще! Как можно было затаить такую милейшую игрушку!!!
Все прошел! Очень мило все сделано)
Спасибо
Похоже, ты единственный кто разобрался с моим скроллингом) Буржуи так и не смогли (или не захотели).
Странно. Там в принципе нет ничего сверхсложного. Я больше времени потратил разбираясь с заставкой, чтобы переделать ее в вертикальную.
А где другие игрушечки? Часть первая, например?
Часть первая есть, но там почти ничего нет. Два экрана и десяток алмазов собрать. Я на ней тренировался по шаблону, а во второй уже основательно переделывал движок. А остальные еще не доделал.
- - - Добавлено - - -
Verm-V, если выйти со столовой, съев все фрукты и зайти обратно, то они все восстановятся - это так задумано?Да. Детворе нравилось как Диззи чавкает фруктами, они все съедали и требовали еще :)
Правда восстановление фруктов я делал еще до того как прикрутил скроллинг и это не так заметно было.
Прошел, быстро, мило и прикольно! Спасибо!Спасибо.
- - - Добавлено - - -
Это же наш движок из последней версии Ночи в музее)
Да. Там только значения скоростей немного другие выставлены, может поэтому слишком неторопливо смотрится, но мне понравилось, поэтому оставил в этой игре так.
Разместил тему на буржуйском форуме, пускай играют в хорошенькие игры)
Спасибо. Правда я очень не уверен в качестве английского перевода, т.к. делал по принципу "чтобы было" и не особо заморачивался проверкой. Упс. :)
- - - Добавлено - - -
Иностранцы уже спрашивают, а где первая часть? )
Придется всех пока огорчить. На мой взгляд слишком уж она аляповато смотрится, надо довести до ума, да и остальные игрульки добить и выпустить одним сборником. Сейчас пока делаю скроллинг в "Dizzy vs Snow Queen" (%20 по сюжету уже сделал) и еще переделываю "Rock Dash Dizzy" там уже почти все доделал (Перевод, новые уровни, читы, скроллинг. Игра конечно на любителя, но мне нравится).
- - - Добавлено - - -
Скачал, прошел - все мило, весело, с настроением! Многообещающее начало! Ничего критического сказать не могу - для мини-игры отлично, тем более одной из первых, как я понял.
Спасибо. Да это вторая из сделанных мной. На первой просто тренировался как на шаблоне. Теперь не отвертется, придется доделывать до конца. :)
Придется всех пока огорчить. На мой взгляд слишком уж она аляповато смотрится, надо довести до ума, да и остальные игрульки добить и выпустить одним сборником. Сейчас пока делаю скроллинг в "Dizzy vs Snow Queen" (%20 по сюжету уже сделал) и еще переделываю "Rock Dash Dizzy" там уже почти все доделал (Перевод, новые уровни, читы, скроллинг. Игра конечно на любителя, но мне нравится).
Приходи к нам на форум dizzyage.flybb.ru, у нас там есть закрытые темы в которых мы занимаемся обсуждением игр, там можно задавать вопросы по поводу всяких нюансов движка и т.д.
benefactor
14.07.2016, 22:00
Приходи к нам на форум dizzyage.flybb.ru, у нас там есть закрытые темы в которых мы занимаемся обсуждением игр, там можно задавать вопросы по поводу всяких нюансов движка и т.д.
Так там вроде бы есть человек среди пользователей с таким ником, зарегистрированный в конце января 16 года, только сообщений пока ноль.
А на конкурс игра уже не попадает? Жаль, если ее там не будет - интересно было бы посмотреть, как эту игру оценят буржуи.
Правда восстановление фруктов я делал еще до того как прикрутил скроллинг и это не так заметно было.
Практическое мнение - если начинаешь делать с нуля, то лучше сразу планировать и начинать со скролла+плавность. Прикрутить, настроить и обыграть на парочке тестовых экранов. Особенно, когда используются задние фоны. Как пример, в Ласт Херо, когда Диззи пасется возле центральных ворот на заднем плане мы видим луну - это не случайность.
То, что заметно появление фруктов в столовой при скролле - это безобидно и исправить сей момент просто (чисто ради перфекционизма). Куда больше двойной работы можно проделать прикручивая скролл+плавность к уже готовому проекту, а именно словить рассинхрон в звуковых эффектах, точности прыжках и хз что еще вспомнить. Как пример, это было все передрочено в Музее, когда переделывался под плавность.
Поэтому наверное это не конструктивная критика, а чисто практический опыт, который позволит сократить тебе время в будущем.
Приходи к нам на форум dizzyage.flybb.ru, у нас там есть закрытые темы в которых мы занимаемся обсуждением игр,
Я там есть с таким же ником. Как попасть в эти темы?
- - - Добавлено - - -
Так там вроде бы есть человек среди пользователей с таким ником, зарегистрированный в конце января 16 года, только сообщений пока ноль.
Да, регистрировался там тогда же когда и здесь. А вообще я больше читатель, чем писатель.
А на конкурс игра уже не попадает? Жаль, если ее там не будет - интересно было бы посмотреть, как эту игру оценят буржуи.
Там вроде условие есть, что должны быть еще персонажи в игре кроме Диззи, так что в любом случае не пройдет.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot