| 
				
				Проект "Casanova Jr.: Девушка с девушкой - Она и она"
				 | 
 | 
| Томахомэ | Дата: Вторник, 13.09.2016, 13:36 | Сообщение # 16 |  
 
Генерал-лейтенант 
Группа: Проверенные 
Сообщений: 554 
Статус: Оффлайн 
 
 | А как поступить, если у какого-то из меню, каждый ответ из которых ведёт сразу на какое-то своё меню (как например, во время сценки в парке - соответствующий отрывок из сценария приведу пока на языке 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 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Цитата Томахомэ (  )  А как поступить, если у какого-то из меню, каждый ответ из которых ведёт сразу на какое-то своё меню (как например, во время сценки в парке 
  Я же реализовал это в исходнике.
  Поясняю...
  В одном из порядков "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 |  
 
Генерал-лейтенант 
Группа: Проверенные 
Сообщений: 554 
Статус: Оффлайн 
 
 | Цитата 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 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Томахомэ, 
  есть варианты:
  Сделать отдельную сцену/чекоинт с этим меню на клуб, парк кафе. Либо просто ещё перед перенаправлением прописывать не только сцену, куда направлять, но и Action.
 
 Код     Action=16     goto Scena_1 
  И игрок начнёт локацию Scena_1 с момент Action=16, где и есть пункт меню.
  Так? Я правильно тебя понял?
 
     Вот так.
 |  
|   | 
 |    | 
| Томахомэ | Дата: Среда, 14.09.2016, 15:48 | Сообщение # 20 |  
 
Генерал-лейтенант 
Группа: Проверенные 
Сообщений: 554 
Статус: Оффлайн 
 
 | При компиляции выкидывает ошибку на верхнем скрине.
 
  
 
 
  На нижнем - автовыделившаяся строка с ошибкой. В чём прикол, в чём BEX умудрился ошибку увидеть?
 |  
|   | 
 |    | 
| TLT | Дата: Среда, 14.09.2016, 16:18 | Сообщение # 21 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Цитата Томахомэ (  )  На нижнем - автовыделившаяся строка с ошибкой. В чём прикол, в чём 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 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | BEX не всегда выделяет ошибку правильно. В данном случае он не знает, поэтому выделил конец кода.
  Исключение:
 
 Код if Choice=0 then print "НАЙДИ ДРУГУЮ ТЁЛКУ ДЛЯ МОДЕЛИ" 
  В таком однострочном случае EndIf можно не прописывать.
 
     Вот так.
 |  
|   | 
 |    | 
| Томахомэ | Дата: Среда, 14.09.2016, 17:10 | Сообщение # 23 |  
 
Генерал-лейтенант 
Группа: Проверенные 
Сообщений: 554 
Статус: Оффлайн 
 
 | Цитата TLT (  )  BEX не всегда выделяет ошибку правильно. В данном случае он не знает, поэтому выделил конец кода.
  
  Блин, вот и ломай теперь голову, где накосячил, ищи ошибку по всему длинному коду...  
 |  
|   | 
 |    | 
| TLT | Дата: Среда, 14.09.2016, 19:26 | Сообщение # 24 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Цитата Томахомэ (  )  Блин, вот и ломай теперь голову, где накосячил, ищи ошибку по всему длинному коду...   Я не думаю, что это займёт у тебя больше 5 минут.
  Пиши понятный код, выделяй в блоки, чтобы легче ориентироваться и находить нужное. Делай комментарии '.
 
     Вот так.
 |  
|   | 
 |    | 
| Томахомэ | Дата: Вторник, 20.09.2016, 09:28 | Сообщение # 25 |  
 
Генерал-лейтенант 
Группа: Проверенные 
Сообщений: 554 
Статус: Оффлайн 
 
 | В принципе, по логике должно быть уже готово.
  Высылаю исходнички на багоотлов - самому мне найти в длиннющем коде ту ошибку, что отпинывает меня на последнюю строку, сил, похоже уже не хватит.
 
 Сообщение отредактировал Томахомэ - Вторник, 20.09.2016, 09:29  |  
|   | 
 |    | 
| TLT | Дата: Вторник, 20.09.2016, 14:38 | Сообщение # 26 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Томахомэ, позже гляну. Сейчас не дома...
 
     Вот так.
 |  
|   | 
 |    | 
| TLT | Дата: Четверг, 22.09.2016, 23:01 | Сообщение # 27 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Посмотрел... Там вообще много чего наворочено непраивльно... Завтра попробую исправить.
 
     Вот так.
 |  
|   | 
 |    | 
| Томахомэ | Дата: Пятница, 23.09.2016, 14:06 | Сообщение # 28 |  
 
Генерал-лейтенант 
Группа: Проверенные 
Сообщений: 554 
Статус: Оффлайн 
 
 | Цитата TLT (  )  Посмотрел... Там вообще много чего наворочено непраивльно... 
  За ошибки прошу не судить строго - всё-таки я как-никак новичок в деле программирования. К тому же, в огромном количестве операторов if и куче повторяющихся однотипных элементов кода запутаться проще простого (прошу НЕ счесть последнее утверждение за претензию к качеству ваших кодерских навыков - без вас бы я вообще в BEX`е, наверное, хрен разобрался).
 |  
|   | 
 |    | 
| TLT | Дата: Пятница, 23.09.2016, 21:02 | Сообщение # 29 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Томахомэ, да я непрограммист особо, поэтому не претендую на то, что мой код хорош.
  Сделал!
  Но есть ряд замечаний к тебе, которые я должен пояснить, чтобы дальше было таких проблем. Всё же лучше изначально делать правильно, чем после тратить время на исправления.
  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 |  
 
Генералиссимус 
Группа: Администраторы 
Сообщений: 2393 
Статус: Оффлайн 
 
 | Сначала сделай так, чтобы игра проходилась по всем сценариям. Далее я тебе помогу с вставкой музыки, звуковых эффектов.
  Также сделаю тебе шрифт не 2х цветный, а 16-цветный.
  Можно будет сделать рамку под текст.
  Само собой помогу картинки разбить на сектора, чтобы цветов было больше.
  Мини игру. Если ты мне скажешь как в оригинале до неё дойти. Ато я её в глаза не видел, не могу пройти игру. Смогу ли я это реализовать - не знаю пока.
 
     Вот так.
 |  
|   | 
 |    |