АвторСообщение
постоянный участник




Сообщение: 115
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 05.03.14 17:12. Заголовок: Всякие полезные механики


Пришло мне тут в голову, что у нас давно никто не делился опытом грабленаступания. Поэтому создаю тему, где все могут рассказать какими извратами и хитростями пользуются при написании игр.

Начну вот с чего:
Конечно, всегда хочется, чтобы игра была сложной, интересной и отвечала на все твои реакции. А для этого у одной и то й же локации должно быть много описаний. Сейчас как раз делаю игру, где у меня минимум пять описаний одного и того же места.
Дабы не плодить сущности, можно делать так -

:озеро
if были_озеро = 1 then goto озеро_грязное
if были_озеро = 2 then goto озеро_замёрзло
if были_озеро = 3 then goto озеро_высохло
if были_озеро = 4 then goto озеро_больше_не_озеро

pln Описание
end

Удобно то, что всё это одна и та же локация, и курлок будет всегда одинаковым. Так же я не плодю безмерно условия в самой локации, а делю её, это очень помогает, потому что ифы это слабая сторона урки.

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 3 
Профиль Цитата Ответить
Ответов - 39 , стр: 1 2 All [только новые]


постоянный участник




Сообщение: 203
Зарегистрирован: 20.11.12
ссылка на сообщение  Отправлено: 24.03.14 14:52. Заголовок: frodo пишет: пользо..


frodo пишет:

 цитата:
пользователю приходится ждать больше 3 секунд, возьмите на вооружение, т.к. тех, кто будет проходить квест второй раз, ожидание будет раздражать.



а можно использовать оператор anykey z, - с тем же эффектом


Невозможно - это громкое слово, за которым прячутся маленькие люди!!! Спасибо: 0 
Профиль Цитата Ответить
постоянный участник


Сообщение: 89
Зарегистрирован: 05.08.08
ссылка на сообщение  Отправлено: 24.03.14 19:37. Заголовок: Разница - в деталях...


Разница - в деталях.

В этом случае пользователю нужно трижды нажать на кнопку, чтобы не ждать, пока напечатается "1 2 3 4":
 
p 1
anykey z, 1000
p 2
anykey z, 1000
p 3
anykey z, 1000
p 4

В этом случае пользователю достаточно нажать на кнопку один раз:
 
z = 0
p 1
if not z then anykey z, 1000
p 2
if not z then anykey z, 1000
p 3
if not z then anykey z, 1000
p 4



Ложь для художника — это шанс открыть правду, тогда как для политика — спрятать её. (А. Мур, "V значит вендетта") Спасибо: 0 
Профиль Цитата Ответить
постоянный участник


Сообщение: 92
Зарегистрирован: 02.01.09
ссылка на сообщение  Отправлено: 10.06.14 22:54. Заголовок: Как известно, в Фурк..


Как известно, в Фурке можно выводить ссылки, но нет возможности отключить их вывод.

В следующем примере удаление ссылок из исходной строки реализовано в процедуре str_delink. Исходной строке соответствует переменная p_1, "обезссыленной" - dest_str. Процедура p_smb осуществляет посимвольный вывод строки dest_str; такой режим вывода позволяет "обмануть" фурочную систему форматирования ссылок.

Тестовый пример выводит после цифры 1 - исходную строку, после 2 - строку, из которой удалены ссылки, после 3 - ее же, но посимвольно.

 
instr p_1=У [[Юрасоффа-Павловски]] [[]] [[|]] [[ ]] рябило в глазах от [[квадратных скобок||скобок]], [[в том числе[[ вложенных]].]]

pln 1: #%p_1$
pln
proc str_delink
pln 2: #%dest_str$
p #/$ 3:
proc p_smb
end

:str_delink ; Процедура удаления ссылок из строки
mark_link_start=0 ; Флаг начала ссылки
mark_long_opening=0 ; Флаг длинной (больше 2-х) последовательности открывающих скобок
mark_link_end=0; Флаг конца ссылки
dest_str="" ; Результирующая строка
link_start_pos=0 ; Начальная позиция ссылки
skip_start_pos=0 ; Начальная позиция неотображаемой части ссылки
string_flushed=0 ; Флаг того, что строка уже выгружена
i_str=1 ; Счетчик символов в строке
; Разбивка исходной строки на символы, перебор
tokens_delim="char"
tokens p_1
nr_tok0=tokens_num
:str_cyc ; Начало цикла
instr cur_symb=#%token#i_str$$
if cur_symb=="[" then proc parse_start_link & goto str_cyc_end ; Начало ссылки?
if cur_symb=="|" then proc parse_skip_link & goto str_cyc_end ; Неотображаемая часть ссылки?
if cur_symb=="]" then proc parse_end_link & goto str_cyc_end ; Конец ссылки?
; Все прочие символы
if mark_link_start=1 or mark_link_end=1 then proc flush_string & goto str_cyc_end ; До этого была одиночная правая или левая квадратная скобка - в любом случае она "терминирует" ссылку (особенность Фурки)
:str_cyc_smb ; Обработчик текущего символа в зависимости от установленных флагов начала и конца ссылки
if mark_link_start=0 then dest_str=dest_str+token#i_str$ ; Ссылки нет - просто копируем очередной символ в результиирующую строку
if mark_link_end=2 then proc flush_string & goto str_cyc_end; Ссылка окончилась - копирование "буфера" в результирующую строку с учетом неотображаемых символов
; Все остальные варианты означают, что идет обработка ссылки, и пока неизвестно, что именно будем копировать
:str_cyc_end
; Замыкаем цикл
i_str=i_str+1
if i_str<=nr_tok0 then goto str_cyc
i_str=nr_tok0
if mark_link_start<>0 and string_flushed=0 then proc flush_string; Если мы здесь, это означает, что строка кончилась внутри предполагаемой ссылки - просто копируем "буфер" токенов в результирующую строку
end

:parse_start_link
; Отработка символа начала ссылки (левой квадратной скобки): устанавливаем необходимые флаги
if mark_link_start=0 then mark_link_start=1 & link_start_pos=i_str & end ; Потенциальное начало ссылки
if mark_link_start=1 then mark_link_start=2 & end; Двойная квадратная скобка - начало ссылки
; Все остальные случаи - мы внутри ссылки; "терминируем" ее и копируем пропущенные символы (до собственно скобки) в результирующую строку
if i_str-link_start_pos<=2 then i_str=i_str-2 & mark_long_opening=1 else i_str=i_str-1
proc flush_string
; Возвращаемся на текущий символ
i_str=i_str+1
if mark_long_opening=1 then i_str=i_str+1 ; Если была длинная последовательность, то мы сдвигались на два символа - вводим поправку
if mark_long_opening=1 then mark_link_start=2 else mark_link_start=1 ; Устанавливаем значение флага начала ссылки - вдруг она сейчас и последует (с учетом наличия нескольких открывающих скобок подряд)
if mark_long_opening=1 then link_start_pos=i_str-1 & mark_long_opening=0 else link_start_pos=i_str
end

:parse_skip_link
; Отработка символа, начинающего неотображаемую часть ссылки
if mark_link_start=0 then dest_str=dest_str+token#i_str$ & end ; Мы вне ссылки - копируем очередной символ в результирующую строку
if mark_link_start=1 or mark_link_end=1 then proc flush_string & end; До этого была одиночная правая или левая квадратная скобка - "терминируем" ссылку
; Если мы здесь, значит, мы внутри ссылки
if skip_start_pos=0 then skip_start_pos=i_str ; С этого момента начинается неотображаемая часть ссылки
; Если уже началась неотображаемая часть ссылки, просто игнорируем данный символ
end

:parse_end_link
; Отработка символа окончания ссылки (правой квадратной скобки): устанавливаем необходимые флаги
if mark_link_start=1 then proc flush_string & end ; До этого была одинарная левая квадратная скобка
if mark_link_start=0 then dest_str=dest_str+token#i_str$ & end ; Мы не внутри ссылки - просто копируем очередной символ
if mark_link_start=2 and (i_str-link_start_pos)<=2 then proc flush_string & end ; Сразу за двойной левой скобкой - правая, это не воспринимается как ссылка
if mark_link_end=1 then mark_link_end=2 & proc flush_string & end ; Корректно завершенная ссылка
if mark_link_end=0 then mark_link_end=1 ; Первая правая скобка, встретившаяся при обработке ссылки
end

:flush_string
; Процедура копирования "задним числом" ссылки в результирующую строку с последующим сбросом всех соответствующих флагов и переменных
; Имеется три режима копирования: (1) без учета ссылочного форматирования (когда предполагаемая ссылка не оказалась таковой); (2) копирование простой ссылки (сводится к пропуску обрамляющих ссылку двойных квадратных скобок); (3) копирование ссылки с невидимой частью
if mark_link_end=2 then i_copy=link_start_pos+2 else i_copy=link_start_pos & skip_start_pos=0 & link_start_pos=0 ; Если нормальное завершение ссылки, устанавливаем позицию начала копирования строки с учетом пропуска двух открывающих скобок, в противном случае - без учета скобок и еще сбрасываем переменные, соответствующие позициям начала и окончания копирования
if skip_start_pos=0 and link_start_pos=0 then i_copy_end=i_str ; Режим 1: ссылки нет - копируем до текущей позиции исходной строки включительно
if skip_start_pos=0 and link_start_pos<>0 then i_copy_end=i_str-2; Режим 2: ссылка без невидимой части - копируем с учетом пропуска завершающих скобок
if skip_start_pos<>0 then i_copy_end=skip_start_pos-1 ; Режим 3: ссылка с невидимой частью
if i_copy>i_copy_end then goto fsl_fin ; Сразу после открывающих скобок начинается неотображаемая часть ссылки - просто пропускаем ее
; Собственно копирование
:fsl_copy
dest_str=dest_str+token#i_copy$ ; Перенос очередного символа в конечную строку
i_copy=i_copy+1
if i_copy<=i_copy_end then goto fsl_copy
; Финальная часть: сброс всех флагов и переменных
:fsl_fin
mark_link_start=0
mark_link_end=0
link_start_pos=i_copy_end
skip_start_pos=0
end

:p_smb
; Процедура посимвольного вывода целевой строки - позволяет избежать преобразования в ссылки возможных оставшихся "вложенных" квадратных скобок
tokens_delim="char"
tokens dest_str
nr_tok0=tokens_num
i_str=1
:p_smb_cyc
p #%token#i_str$$
i_str=i_str+1
if i_str<=nr_tok0 then goto p_smb_cyc
pln
end


Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 134
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 28.08.14 15:07. Заголовок: Вот такой драгндроп ..


Вот такой драгндроп возможен в урке

:nachalo

x = 100
y = 100

;decoradd text (160,160) TEXT "zzz"
;decor_rec_XX = 50
;decor_rec_YY = 20
decoradd rec (x, y, -1) RECT 50, 20, 0xffffffff
decoradd rec_clic (x, y, -2) CLICKAREA 50, 20, "!dragndrop"

decoradd rec1 (600, 500, -1) RECT 50, 20, 0xff777777


end

:dragndrop
anykey z, 1
mouse_xx=mouse_x
mouse_yy=mouse_y
xx=decor_rec_x-mouse_xx
yy=decor_rec_y-mouse_yy

:drag
anykey z, 25
;decor_text_text ="z=#z$ is_syskey = #is_syskey$ x= #mouse_x$ X=#decor_rec_x$ xx=#xx$ y=#mouse_y$ Y=#decor_rec_y$ yy=#yy$"
if mouse_xx<>mouse_x or mouse_yy<>mouse_y then decormov rec mouse_x+xx, mouse_y+yy, 10 & mouse_xx=mouse_x & mouse_yy=mouse_y
if z<>256 then goto drag
:drop
decormov rec_clic mouse_x+xx, mouse_y+yy
end

Если кликнуть на белый квадратик, то он потащится за мышкой, ещё раз кликнуть - отпустится.

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 135
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 28.08.14 15:15. Заголовок: Как известно, в урке..


Как известно, в урке нет абсолютного перехода. То есть и при goto и при proc каррент лок не поменяется и коммон не выполнится.

Что же делать, если нам всё же нужен абсолютный назначаемый переход.

Решение такое.

;создаём свою локацию перехода
:mygoto

;вызываем коммон
proc common

;присваиваем свой карент лок
current_loc = mygoto_1

; делаем переход
goto #%mygoto_1$

end

В игре же пишем

;где используем
:локация

; вместо простого гоуту вызываем наш гоуту с названием локации на которую нужно перейти,
; то есть заменяем действие (goto название_локации) на то, которое написано ниже
goto mygoto("название_локации")

end


Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 136
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 28.08.14 15:33. Заголовок: Ещё одна интересная ..


Ещё одна интересная фишка, которая будет полезна новичкам и тем, кто делает масштабные рпг игры.

Дело в том, что фурка, при загрузке сохранения в игре, выполняет локацию, на которой вы сохранились.
Соответственно, если вы брали там какой-то предмет или у вас динамический текст, то всё это поедет:
предметов может оказаться больше одного, а текст может вывестись совсем не тот, который вы ожидали.

Как с этим бороться:
Не давать сохраняться в любом месте игры.
Выделить под сохранения специальные локации, при загрузке на которых вы точно знаете, что ничего не поломается.
Простая локация с описанием и парой кнопок вполне подойдёт.
А уж как сюжетно обыграть такое "местечковое" сохранение - придумаете.

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 147
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 14.01.15 15:04. Заголовок: Отредактировала стан..


Отредактировала стандартный скин для разрешений 1024х768 и 1024х600
Вдруг кому-то пригодится. Просто положите файлы из соответствующих архивов рядом с игрой и наслаждайтесь.

https://yadi.sk/d/SktTS4SadxqbL

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 451
Зарегистрирован: 20.01.06
ссылка на сообщение  Отправлено: 10.05.15 12:36. Заголовок: ­qwerty (в соседней т..


*PRIVAT*

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 452
Зарегистрирован: 20.01.06
ссылка на сообщение  Отправлено: 10.05.15 12:37. Заголовок: какой такой приват? ..


какой такой приват? я писал следующее:

---

qwerty (в соседней теме) пишет:


 цитата:
Я порылся в документации и не понял- как на фурке организовать целочисленное деление?

Допустим, имеется x монет, которые по команде "накупить барахла", тратятся по 5 монет на 1шт барахла. На самом деле ситуация чуть сложнее, НО в данный момент интересует как можно проще получить целочисленное деление, которое будет очень востребовано в моей игре.



то моё сообщение попало в закрытую тему, сюдасюда. там я писать ничего не могу, поэтому пишу здесь, в этой замечательной теме, созданной, как будто, специально для того, чтобы отпугивать новичков, демонстрируя недостаки urql . ну и правильно- остаться с нами должны самые смелые и несгибаемые )))

по этому моему вопросу нашёл(меня любезно ткнула носом Ajenta в) описалово Корвина, в котором, оказывается, всё было расписано уже почти 10 лет назад. да, на urql есть таки и целочисленное деление и даже можно задавать точность- например, деление с одним знаком после запятой. или с двумя. или тыпы. пока не знаю, как это можно применить, но возможность потенциально интересная.
НО, как это в urql часто бывает, эта возможность реализована не через то место. так, при целочисленном делении результат округляется не вниз, а вверх! то есть, чтобы получить именно целую часть, нужно проводить доп проверки и вычисления. так сказать, "лёгким движением руки брюки превращаются... брюки превращаются..."...

а теперь, очередная полезная механика, которая бы непонадобилось, если бы urql был продуман чуть лучше: как я сделал целочисленное деление:

:div
if divx >= divy then divx = divx-divy & divz = divz+1 else end
goto div
end


как вы можете видеть, это процедура, использующая следующие переменные:

divx - делимое. после вычислений в divx остаётся остаток от деления
divy - делитель. в ходе вычислений не изменяется.
divz - после вычислений к divz прибавляется целая часть результата деления. то есть, если divz изначально выставим в 0, то в итоге получим в нём результат целочисленного деления divx/divy

Спасибо: 0 
Профиль Цитата Ответить



Не зарегистрирован
Зарегистрирован: 10.06.15
ссылка на сообщение  Отправлено: 10.06.15 23:53. Заголовок: Переменная TIME


Скажите, кто нибудь разобрался с переменной TIME? А именно, когда она обнуляется? По теории она хранит время после полуночи, то есть сразу после 00:00 переменная хранит ровно 00,000,000. Таким образом максимальное число в TIME - 86,400,000, т.к. в сутках 86400 секунд. А может быть она обнуляется после 99,999,999? Тогда обновление происходит каждые 27 часов, 42 минуты. Я решил сделать игру, которая будет якобы работать, даже когда программа выключена (и даже когда выключен компьютер) на основе переменной TIME. Все просто, когда ты в первый раз начинаешь игру, компьютер сохраняет значение TIME на тот момент. В следующий раз при запуске игры, снова создается значение уже на тот момент времени. Ну и вычитая одно из другого мы получаем время между этими двумя запусками. К сожалению, это будет работать только в пределах одного дня, но все равно можно придумать много интересных вещей, основываясь на этом. Осталось только узнать время обновления.

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник


Сообщение: 107
Зарегистрирован: 02.01.09
ссылка на сообщение  Отправлено: 06.07.15 20:47. Заголовок: Решила опубликовать ..


Решила опубликовать давние наработки - так называемые уроки FireURQ, посвященные новым функциям-возможностям Фурки, которых не было в "классическом" URQ.

Надеюсь, ссылка скоро будет доступна: http://urq.plut.info/node/1209

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

Спасибо: 1 
Профиль Цитата Ответить
Юрист урки, адвокат дьявола




Сообщение: 561
Зарегистрирован: 07.12.06
ссылка на сообщение  Отправлено: 06.07.15 22:27. Заголовок: Ссылка доступна, vit..


Ссылка доступна, vito, огромное спасибо за труды!

Спасибо: 1 
Профиль Цитата Ответить
постоянный участник




Сообщение: 185
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 26.02.16 19:03. Заголовок: Запостила шрифты для..


Запостила шрифты для фурки. Можно полистать, посмотреть, выбрать подходящий.

http://urq.plut.info/node/1519

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 0 
Профиль Цитата Ответить
Юрист урки, адвокат дьявола




Сообщение: 593
Зарегистрирован: 07.12.06
ссылка на сообщение  Отправлено: 27.02.16 11:32. Заголовок: Ajenta, спасибо, здо..


Ajenta, спасибо, здорово. Теперь ждём пак скинов :)

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 186
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 27.02.16 17:03. Заголовок: Серый Волк, скины, э..


Серый Волк, скины, это всё-таки слишком индивидуально. Сложно придумать какие-то общие.


Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 520
Зарегистрирован: 20.01.06
ссылка на сообщение  Отправлено: 05.09.16 14:31. Заголовок: На текущий момент Fi..


На текущий момент FireURQ поддерживает потрясающие возможности оформления:



Может быть, ст0ит открыть обучающую тему по созданию интерфейсов и всяческому оформлению квестов?

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник


Сообщение: 696
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 18.09.16 06:50. Заголовок: qwerty - поддерживаю..


qwerty - поддерживаю!!!

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Сообщение: 221
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 09.12.16 18:25. Заголовок: Сделала библиотечку ..


Сделала библиотечку функций для работы с одномерными массивами. Надеюсь, это упростит авторам жизнь. Мне так точно.

http://urq.plut.info/node/2281

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 1 
Профиль Цитата Ответить
постоянный участник




Сообщение: 227
Зарегистрирован: 06.11.08
ссылка на сообщение  Отправлено: 13.12.16 17:16. Заголовок: Добавила удаление эл..


Добавила удаление элемента массива по номеру и интерактивный пример использования функций.

Можно перекачать.
http://urq.plut.info/node/2281

Я за мир во всём мире. За отдельно взятые инопланетные цивилизации ответственности не несу... Спасибо: 1 
Профиль Цитата Ответить
Ответов - 39 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 3
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет