russian ROMhacking
[ Новые сообщения · Участники · Правила форума · Поиск ]
Проект "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 не всегда выделяет ошибку правильно. В данном случае он не знает, поэтому выделил конец кода.


Блин, вот и ломай теперь голову, где накосячил, ищи ошибку по всему длинному коду... sad
 
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-цветный.

Можно будет сделать рамку под текст.

Само собой помогу картинки разбить на сектора, чтобы цветов было больше.

Мини игру. Если ты мне скажешь как в оригинале до неё дойти. Ато я её в глаза не видел, не могу пройти игру. Смогу ли я это реализовать - не знаю пока.



Вот так.
 
Поиск: