Проект "Casanova Jr.: Девушка с девушкой - Она и она"
|
|
Томахомэ | Дата: Вторник, 13.09.2016, 13:36 | Сообщение # 16 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 530
Статус: Оффлайн
| А как поступить, если у какого-то из меню, каждый ответ из которых ведёт сразу на какое-то своё меню (как например, во время сценки в парке - соответствующий отрывок из сценария приведу пока на языке GINCS)?
Вот так, скажем:
Код :park (Я сразу же двигаюсь в путь.) /i #loadbkg e (Я встречаю сексапильную тёлку.) /i Привет! Хорошая сегодня погода, правда? /i (Я объясняю ей, в чём дело.) /i Понятно. Твоей знакомой хочется развлечься. /i (Немного подумав, цыпочка отвечает, что это её не интересует.) /i (Что теперь?) !findothergirl;НАЙДИ ДРУГУЮ ТЁЛКУ ДЛЯ МОДЕЛИ. !prevail;УБЕДИ ЭТУ ТЁЛКУ ВСТРЕТИТЬСЯ С МОДЕЛЬЮ. /i :findothergirl (Куда мне идти?) !toclub;В КЛУБ. !tocafe;В КАФЕ. <...> :prevail (Я пытаюсь, но ничего не получается. Нужно найти другую. Только где...?) !toclub1;ИДИ В КЛУБ. !tocafe1;ИДИ В КАФЕ. !stayinpark;ОСТАНЬСЯ В ПАРКЕ. /i /i
|
|
| |
TLT | Дата: Вторник, 13.09.2016, 18:32 | Сообщение # 17 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Цитата Томахомэ ( ) А как поступить, если у какого-то из меню, каждый ответ из которых ведёт сразу на какое-то своё меню (как например, во время сценки в парке
Я же реализовал это в исходнике.
Поясняю...
В одном из порядков "Action" (в данном случае это 16) записывается:
Код if Action=16 then locate 23,1: print "Где начать поиски девушки...?" if Choice=0 then ink 2 locate 24,1: print "> В ПАРКЕ." ink 1 locate 25,1: print " В КЛУБЕ." locate 26,1: print " В КАФЕ." endif if Choice=1 then locate 24,1: print " В ПАРКЕ." ink 2 locate 25,1: print "> В КЛУБЕ." ink 1 locate 26,1: print " В КАФЕ." endif if Choice=2 then locate 24,1: print " В ПАРКЕ." locate 25,1: print " В КЛУБЕ." ink 2 locate 26,1: print "> В КАФЕ." ink 1 endif endif
Choice - это выбор пункта. В данном случае 3 шт: от 0 до 2.
И сверху в сцене прописано управление на кнопки Вверх и Вниз, которые просто к переменной Choice добавляю или уменьшают значение:
Код 'Select Options Action=16 if Action=16 then if a.0 then 'Up button press WAITPADUP if Choice=>1 then Choice=Choice-1 ' if Choice=2 then Choice=Choice-1 drow=1 endif if a.1 then 'Down button press WAITPADUP if Choice<2 then Choice=Choice+1 drow=1 endif endif
Далее на выбор в Action=17 происходит перенаправление на сцену, в зависимости от выбора:
Код if Action=17 then ' Action=0 ' if Choice=0 then goto Scena_2 ' if Choice=1 then goto Scena_3 ' if Choice=2 then goto Scena_4 endif
В предоставленном исходнике они закомментированы, чтобы не работали. Когда создашь локации Scena_2, Scena_3, Scena_4, тогда раскомментируешь перенаправления на оные.
Раскомментировать - удалить символ ' в начале строчки, тогда код начнёт действовать.
Choice=0 (В ПАРКЕ) ведет на Scena_2.
Значит, делаешь новую сцену. Сцены делаются так:
Scena_2:
и далее...
Можно просто скопировать имеющуюся сцену, заменив там данные на новые: картинку и текст.
Вот так.
|
|
| |
Томахомэ | Дата: Среда, 14.09.2016, 09:38 | Сообщение # 18 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 530
Статус: Оффлайн
| Цитата TLT ( ) Я же реализовал это в исходнике.
Поясняю...
В одном из порядков "Action" <...> записывается, Choice - это выбор пункта...
И сверху в сцене прописано управление на кнопки Вверх и Вниз, которые просто к переменной Choice добавляю или уменьшают значение...
Это-то я уже понял, я сейчас о другом. Вот у меня возникла такая ситуация - в сцене в парке есть одно меню:
Код if Action=6 then locate 24,1: print "Что теперь?" if Choice=0 then ink 2 locate 25,1: print "> НАЙДИ ДРУГУЮ ТЁЛКУ ДЛЯ МОДЕЛИ." ink 1 locate 26,1: print " УБЕДИ ЭТУ ТЁЛКУ ВСТРЕТИТЬСЯ С МОДЕЛЬЮ." endif if Choice=1 then locate 25,1: print " НАЙДИ ДРУГУЮ ТЁЛКУ ДЛЯ МОДЕЛИ." ink 2 locate 26,1: print "> УБЕДИ ЭТУ ТЁЛКУ ВСТРЕТИТЬСЯ С МОДЕЛЬЮ." ink 1 endif endif
Первый пункт идёт на меню, начинающееся с вопроса "Куда мне идти?":
Код if Action=7 then locate 24,1: print "Куда мне идти?" if Choice=0 then ink 2 locate 25,1: print "> В КЛУБ." ink 1 locate 26,1: print " В КАФЕ." endif if Choice=1 then locate 25,1: print " В КЛУБ." ink 2 locate 26,1: print "> В КАФЕ." ink 1 endif endif
С нижним пунктом меню в 6-м action`е - непредвиденная сложность, поскольку action после его выбора тоже будет 7-м, и choice будет 1, а значит игрок будет автоматически перекинут на второе из приведённых меню с выделенным нижним пунктом. Как выпутываться?
|
|
| |
TLT | Дата: Среда, 14.09.2016, 12:59 | Сообщение # 19 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Томахомэ,
есть варианты:
Сделать отдельную сцену/чекоинт с этим меню на клуб, парк кафе. Либо просто ещё перед перенаправлением прописывать не только сцену, куда направлять, но и Action.
Код Action=16 goto Scena_1
И игрок начнёт локацию Scena_1 с момент Action=16, где и есть пункт меню.
Так? Я правильно тебя понял?
Вот так.
|
|
| |
Томахомэ | Дата: Среда, 14.09.2016, 15:48 | Сообщение # 20 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 530
Статус: Оффлайн
| При компиляции выкидывает ошибку на верхнем скрине.
На нижнем - автовыделившаяся строка с ошибкой. В чём прикол, в чём BEX умудрился ошибку увидеть?
|
|
| |
TLT | Дата: Среда, 14.09.2016, 16:18 | Сообщение # 21 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Цитата Томахомэ ( ) На нижнем - автовыделившаяся строка с ошибкой. В чём прикол, в чём BEX умудрился ошибку увидеть?
Всё нормально. Где-то забыл EndIf.
Оператор If должен быть обязательно закрыт EndIf. Исключение только для однострочных конструкций.
Цитата if Choice=0 then ink 2 locate 25,1: print "> НАЙДИ ДРУГУЮ ТЁЛКУ ДЛЯ МОДЕЛИ." ink 1 locate 26,1: print " УБЕДИ ЭТУ ТЁЛКУ ВСТРЕТИТЬСЯ С МОДЕЛЬЮ." endif
Если Переменная равна чему-то То действие Конец переменной Если
Вот так.
|
|
| |
TLT | Дата: Среда, 14.09.2016, 16:19 | Сообщение # 22 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| BEX не всегда выделяет ошибку правильно. В данном случае он не знает, поэтому выделил конец кода.
Исключение:
Код if Choice=0 then print "НАЙДИ ДРУГУЮ ТЁЛКУ ДЛЯ МОДЕЛИ"
В таком однострочном случае EndIf можно не прописывать.
Вот так.
|
|
| |
Томахомэ | Дата: Среда, 14.09.2016, 17:10 | Сообщение # 23 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 530
Статус: Оффлайн
| Цитата TLT ( ) BEX не всегда выделяет ошибку правильно. В данном случае он не знает, поэтому выделил конец кода.
Блин, вот и ломай теперь голову, где накосячил, ищи ошибку по всему длинному коду...
|
|
| |
TLT | Дата: Среда, 14.09.2016, 19:26 | Сообщение # 24 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Цитата Томахомэ ( ) Блин, вот и ломай теперь голову, где накосячил, ищи ошибку по всему длинному коду... Я не думаю, что это займёт у тебя больше 5 минут.
Пиши понятный код, выделяй в блоки, чтобы легче ориентироваться и находить нужное. Делай комментарии '.
Вот так.
|
|
| |
Томахомэ | Дата: Вторник, 20.09.2016, 09:28 | Сообщение # 25 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 530
Статус: Оффлайн
| В принципе, по логике должно быть уже готово.
Высылаю исходнички на багоотлов - самому мне найти в длиннющем коде ту ошибку, что отпинывает меня на последнюю строку, сил, похоже уже не хватит.
Сообщение отредактировал Томахомэ - Вторник, 20.09.2016, 09:29 |
|
| |
TLT | Дата: Вторник, 20.09.2016, 14:38 | Сообщение # 26 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Томахомэ, позже гляну. Сейчас не дома...
Вот так.
|
|
| |
TLT | Дата: Четверг, 22.09.2016, 23:01 | Сообщение # 27 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Посмотрел... Там вообще много чего наворочено непраивльно... Завтра попробую исправить.
Вот так.
|
|
| |
Томахомэ | Дата: Пятница, 23.09.2016, 14:06 | Сообщение # 28 |
Генерал-лейтенант
Группа: Проверенные
Сообщений: 530
Статус: Оффлайн
| Цитата TLT ( ) Посмотрел... Там вообще много чего наворочено непраивльно...
За ошибки прошу не судить строго - всё-таки я как-никак новичок в деле программирования. К тому же, в огромном количестве операторов if и куче повторяющихся однотипных элементов кода запутаться проще простого (прошу НЕ счесть последнее утверждение за претензию к качеству ваших кодерских навыков - без вас бы я вообще в BEX`е, наверное, хрен разобрался).
|
|
| |
TLT | Дата: Пятница, 23.09.2016, 21:02 | Сообщение # 29 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Томахомэ, да я непрограммист особо, поэтому не претендую на то, что мой код хорош.
Сделал!
Но есть ряд замечаний к тебе, которые я должен пояснить, чтобы дальше было таких проблем. Всё же лучше изначально делать правильно, чем после тратить время на исправления.
1.
Не нужно лепить много кода, а затем тестировать. Тогда сложно будет найти источник ошибки, если компилятор не способен указывать точную проблемы.
Поэтому нужно после изменения нажимать "Сохранить", затем "Скомпилировать", чтобы глянуть, как оно в игре через эмулятор, а затем двигаться дальше.
2.
Чтобы не было проблем с операторами IF then endif нужно понять следующее для BEX:
Правильно
Цитата if Action=19 then goto Lose3
Правильно
Цитата if Action=19 then goto Lose3 endif
Не правильно: Правильно
Цитата if Action=19 then goto Lose3 goto Lose4 endif
Т.е. если на одной строчке после then идёт действие, то endif уже не требуется.
См. как правильно - выбирай.
И группирую код в блоки. Используй табуляцию - TAB, а не пробелы.
3.
Я исправил ошибку, но тестируя ROM убедился, что ты вслепую делал всё - сценарий обрывается на некоторых моментах.
Ошибки:
Так нельзя:
Цитата Wherefrom=park 'Peremennaya, pomechayuschaya, dlya devushki otkuda nado kupit` vino
Значение может быть цифрой:
Цитата Wherefrom=1 'Peremennaya, pomechayuschaya, dlya devushki otkuda nado kupit` vino По умолчанию 0, но может быть до ~5000 и далее. Слишком большими цифры SMD не сможет оперировать. Т.е. 10000+10000 она не решит.
Можно делать так только в том случае, если park=цифра
Цитата park=1 Wherefrom=park 'Peremennaya, pomechayuschaya, dlya devushki otkuda nado kupit` vino
тогда Wherefrom=1
Т.е. этот момент тебе в коде нужно будет исправить! _____________
Далее текст отрисовывается примерно так:
Цитата locate 25,1: print "С удовольствием встречусь с твой подружкой... Если кое-что для меня сделаешь." 25 - строка 1 - отступ от левого края.
Всего на экране 320 по ширине помещается 40 букв - от 0 до 39. Если будет больше, то текст переводится на следующую строчку и при чём без учёта правил переносов слов и пр. Просто по буквам. И с 0 позиции.
Поэтому текст нужно разбивать на так:
Цитата locate 25,1: print "С удовольствием встречусь с твой" locate 26,1: print "подружкой... Если кое-что для меня" locate 27,1: print "сделаешь."
Т.е. вручную переносить по словам строчки не более 38 букв в данном случае.
__________
Я добавил Звуковой движок XGM 2.0. Теперь есть фоновая музыка для теста. И звук на нажатие Старт в главном экране. позже можно будет доработать.
Файлы звукового движка лежат в папке xgm2.
Он написан в качестве ASM вставки. обрати внимание, что для успешной компиляции тебе нужно будет внизу кода подкорректировать адреса на те, которые будут у тебя на компе. Т.к. в ASM используются неотносительные адреса файлов.
У меня это:
Цитата "E:\Program Files\basiegaxorz\examples\xgm2\snare.raw"
А у тебя это будет там, где у тебя на компе они будут лежать.
Там всего 6 адресов, вроде. Укажи путь правильно, иначе Компилятор будет выдавать ошибку при компиляции в ROM.
Всё, дерзай дальше!
Вот так.
|
|
| |
TLT | Дата: Пятница, 23.09.2016, 21:16 | Сообщение # 30 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Сначала сделай так, чтобы игра проходилась по всем сценариям. Далее я тебе помогу с вставкой музыки, звуковых эффектов.
Также сделаю тебе шрифт не 2х цветный, а 16-цветный.
Можно будет сделать рамку под текст.
Само собой помогу картинки разбить на сектора, чтобы цветов было больше.
Мини игру. Если ты мне скажешь как в оригинале до неё дойти. Ато я её в глаза не видел, не могу пройти игру. Смогу ли я это реализовать - не знаю пока.
Вот так.
|
|
| |