Как сделать?
…
Всем привет. Как в свою игру вставить webm видео? сколько раз пробовал в лучшем случае показвает иконку поврежденного файла в худшем вылетает с сообщением об ошибке. помогите пожалуйста.
Andrik3206,
в этой теме вроде бы есть ответ https://qsp.org/forum/comments/24046
Подскажите, будьте добры, как сделать вывод текста, вбитового в основное окно, в начале локации? Операторы *P, *PL и *NL пихают текст в конец локации, а хотелось бы прямо противоположного. Заранее спасибо)
De@th K!d,
я бы написал свою локацию примерно такого содержания
! add.string
$args[0]=$args[0] & ! текст, который нужно вписать сверху (строка)
$args[1]=$maintxt & ! забираем текущий текст из окна основного описания в переменную
! очищаем окно основного описания
*clr
! выводим тексты
*pl $args[0]
*p $args[1]
Потом, в том месте, где нужно добавить текст сверху:
gosub 'add.string','Строка сверху'
Здравствуйте, подскажите пожалуйста, как вставить в основное окно файл gif или avi. Вроде была такая возможность в описании?
RedRoses,
Вставить файл GIF - не проблема.
Для начала, в первой локации игры включите распознавание HTML (если, конечно, вы этого ещё не сделали). Потребуется вот такой код:
usehtml = 1
А потом в текст локации можно будет вставлять картинки. Пример:
'Вот мой текст.'
'А вот здесь картинка: <img src="где хранится картинка">'
'Гифки я тоже умею вставлять: <img src="где хранится гифка.gif">'
'А это снова мой текст.'
С AVI дело куда сложнее - классический плеер такой формат не поддерживает. Рекомендую посмотреть здесь: https://qsp.org/forum/comments/24035
Это альтернативная реализация классического плеера. Поддерживает больше HTML-тэгов, может проигрывать видео. Правда, есть некоторые глюки, связанные с counter, но они не слишком надоедливые.
NickoAilus,
Спасибо) Правда, та версия плеера avi, кажется, тоже не поддерживает, ну что ж делать, буду в гиф конвертировать)
Здарова, почаны.
Собственно, созрел вопрос, на который никак не могу найти ответ.
Map.qsp
Циклом заполняю массив данными, но попытки “передвигаться” по нему не выходят. Просто не сменяется содержимое экрана.
Локация start:
Spoiler
KillAll
ShowObjs 0
ShowInput 0
ShowActs 0
ShowStat 0
UseHTML = 1
gs 'GenMap'
*nl & *nl & *nl & *nl & *nl & *nl & *nl & *nl & *nl
*PL '<center><a class = "plain" href = "exec: gt ''travel''">Генерация карты</a></center>'
Локация GenMap:
Spoiler
maxIndex_Y = 20
maxIndex_X = 20
! Заполнение данных массива
index_Y = -20
:GenY
index_X = -20
:GenX
$map['<<index_Y>>, <<index_X>>'] = {
*PL '<center><<iif(index_Y>0, "Север - <<index_Y>>", "Юг <<index_Y>>")>>, <<iif(index_X>0, "Восток - <<index_X>>", "Запад <<index_X>>")>></center>'
*PL '<center><b>Blank</b></center>'
}
index_X+=1
if index_X<=maxIndex_X : Jump 'GenX'
index_Y+=1
if index_Y<=maxIndex_Y : Jump 'GenY'
KillVar 'maxIndex_Y'
KillVar 'maxIndex_X'
Локация travel:
Spoiler
dynamic $map['<<Y>>, <<X>>']
*PL '<center><a href = "exec: if Y<20: Y+=1 & gt curloc">Север</a></center>'
*PL '<center><a href = "exec: if X>-20: X-=1 & gt curloc">Запад</a> | <a href = "exec: if X<20: X+=1 & gt curloc">Восток</a></center>'
*P '<center><a href = "exec: if Y>-20: Y-=1 & gt curloc">Юг</a></center>'
В чём соль. Если массив объявлять руками, то вывод через dynamic работает. Но это утомительно, создавать карту 40х40(от -20 до 20). И нужно мне именно через dynamic вывод, ибо я помимо вывода, собираюсь пихать в массив эвенты, события, чуток рандома и много остального, что должно исполнятся как отдельный код.
Oliver,
подвыражения в фигурных скобках не раскрываются, пока ты не отправишь код в dynamic. Поэтому координаты выводит неверно/
Aleks Versus,
Спасибо, уяснил уже :)
Как сделать так, чтобы программа вытаскивала карты (переменные) из колоды (массива)?
Например, есть числа 1, 2, 3.
Программа выбирает случайное число. 2.
Остается 1 и 3.
Программа выбирает между ними. 3.
Остается 1.
Программа (очевидно) выбирает 1.
Больше ничего не осталось.
Пожалуйста, дайте мне простой код-каркас для генерации сетки и передвижения по ней.
Если можно, то с комментариями.
7H3_D31M0S:
Как сделать так, чтобы программа вытаскивала карты (переменные) из колоды (массива)?
Например, есть числа 1, 2, 3.
Это просто.
$card[0]='1'
$card[1]='2'
$card[2]='3'
:for
if arrsize('$card')>0:
i=rand(0,arrsize('$card')-1)
$card[i]
killvar '$card',i
jump 'for'
end
7H3_D31M0S:
Пожалуйста, дайте мне простой код-каркас для генерации сетки и передвижения по ней.
Если можно, то с комментариями.
вот это сложно. пока могу предложить только вот такую заготовку, быть может разовьёшь:
Spoiler
Здесь будут рассмотрены основы создания карты рогалика в QSP, т.е. применительно к плееру, хотя основные принципы создания двумерных карт, мне кажется, во всех рогаликах одинаковые.
Во-первых, что представляет из себя карта рогалика. Это поле, где буквами, цифрами и символами условно показаны те или иные объекты. Каждый символ - клетка карты с заданными координатами, в которой находятся объекты. В нашем примере пустая клетка будет обозначена точкой, кусок стены буквой П (Внимание. Для корректного отображения карты используются только моноширинные шрифты). Итак первый этап составления карты для рогалика - рисуем карту:
ППППППППППППППППППППППППП
П.......................П
П.......................П
П.......................П
П.......................П
П...........I...........П
П.......................П
П.......................П
П.......................П
П.......................П
ППППППППППППППППППППППППП
Это карта комнаты шириной 25, длиной 11 клеток. В центре комнаты находится герой. Он обозначен буквой I. Координаты героя сейчас 0;0. Это значит, что координаты клетки, в которой он находится тоже 0;0, и это значит так же, что до того как герой попал в эту клетку, она была пустой.
Пусть для хранения координат героя используются переменные X (горизонтальная ось) и Y (вертикальная ось). Сейчас герой стоит в позиции 0;0, а значит:
X=0
Y=0
Мы наглядно написали это не просто так, но чтобы перейти к следующему этапу: помещаем карту в массив. Координаты клетки будут служить её адресом в массиве. Для наглядности и удобства нам нужен двумерный массив. В QSP не бывает двумерных массивов, однако есть обходной путь, чтобы сделать такой массив, используя строковые индексы. Вот как выглядит запись клетки с координатами 0;0 в таком массиве:
$map_cell['0;0']='.'
Как мы уже говорили, эта клетка до появления в ней героя была пустой, поэтому в ячейку массива и вносится значение "." (точка).
Клетка слева от героя расположена по адресу -1;0 клетка справа 1;0, клетка сверху 0;1, снизу 0;-1. Все эти клетки можно и нужно создать в массиве:
$map_cell['-1;0']='.'
$map_cell['1;0']='.'
$map_cell['0;1']='.'
$map_cell['0;-1']='.'
В идеале, необходимо вручную забить все 25х11 клеток, но комнату, подобную нашей можно и сгенерировать:
j=5 & ! координаты по вертикальной оси левого верхнего угла
:for_y
if j>-6:
i=-12 & ! координаты по горизонтальной оси верхнего левого угла
:for_x
if i<13:
if j=5 or j=-5 or i=-12 or i=12:
$map_cell['<<i>>;<<j>>']='П'
else
$map_cell['<<i>>;<<j>>']='.'
end
i+=1
jump 'for_x'
end
j-=1
jump 'for_y'
end
Вообще, можно делать карту миллионом разных способов, от полностью прописанной вручную, до постоянно генерирующейся и перестраивающейся карты, но об этом лучше почитать на сайтах посвящённых изготовлению карт для рогаликов.
Мы же теперь переходим к выводу карты на экран.
Для вывода карты на экран необходимо создать отдельную локацию и назвать её например "вывод карты". Эта локация должна очищать окно основного описания и отрисовывать на нём карту в соответствии с тем, какое сейчас положение на карте занимает герой, какую часть карты просматривает игрок и пр. Мы сделаем простой вывод карты в указанных пределах координат (x = -12;12, y = 5;-5). Для этого нам потребуется приблизительно такой же алгоритм, как и алгоритм генерации комнаты:
j=5 & ! координаты по вертикальной оси левого верхнего угла
:for_y
if j>-6:
i=-12 & ! координаты по горизонтальной оси верхнего левого угла
:for_x
if i<13:
if j=Y and i=X:
! Если координаты положения героя и координаты клетки совпадают, выводим символ героя
$map_print+='I'
else
$map_print+=$map_cell['<<i>>;<<j>>']
end
i+=1
jump 'for_x'
end
! отрисовали строку, добавляем переход на следующую строку
$map_print+='
'
j-=1
jump 'for_y'
end
*clr
*p $map_print
Теперь всякий раз при изменении положения героя, т.е. значений переменных X и Y нужно просто обращаться к этой локации.
Нужен хелп, ребятки, ибо привыкла я к хорошему, а как на куспе так сделать что-то не пойму.
У меня есть объект нож в виде массива.
$knife[’name’] = ‘Нож’
$knife[’desc’] = ‘Описалово’
…
И есть инвентарь, в который добавляются предметы:
$inv[] = $knife
И вот как бы мне сделать вывод через переменную инвентаря.
К примеру, $inv[0] = $knife
И надо как-то так:
‘<<$inv0>>’
‘<<$inv0>>’
ну что ес-но не работает.
А как-то можно вообще это сделать?
Вета,
Ух, сам над этим голову ломал.
!//--- Инициализируем где-то массив с предметами
$item['Нож, Имя'] = 'Нож'
$item['Нож, Описание'] = 'Стальной, отливающий блеском, нож. Пригодится, если нужно освежевать... кого-то.'
!//--- Там, где подбираем предмет
$inventoryName[1] = $item['Нож, Имя']
$inventoryDesc[1] = $item['Нож, Описание']
!//--- Там, где выводим
index = 1
:printItems
*PL '<<$inventoryName[index]>>'
*P '<<$inventoryDesc[index]>>'
index += 1
if (arrsize('$inventoryName')-1)>index: jump 'printItems'
Минус в том, что каждый предмет придется руками добавлять. Если их в принципе не много и игра линейна, то это не принципиально. Если их больше, то нужен иной подход.