Добавлен Clamp,
опубликован
Процесс разработки
Содержание:
Как я уже писал в своём блоге, я занялся созданием довольно сложной карты, призванной стать осуществлением моей давней задумки - полноценной нелинейной РПГ в варкрафте.
В далёком 2010 году я уже предпринял подобную попытку, результатом которой стала карта One Life To Revivall, или, сокращённо, OLTR. Но из-за недостатка знаний, опыта, терпения и мотивации я забил на неё в тот самый момент, когда она была сделана намного больше, чем на половину. Сейчас я могу написать весь код, который там есть, за пару-тройку дней, а не за два месяца, причём намного аккуратнее, оптимальнее и даже красивее, но - поезд ушёл, да и концепция на мой взгляд оставляла желать лучшего, ведь весь упор я хотел сделать на геймплее, который был максимально приближен к стандартному, а сюжет был только "для галочки".
Нынче ситуация обратная: у меня есть неплохая идея, хороший сюжет, силы, время и, что самое главное, мотивация. Но давайте лучше перейдём к самой разработке.
Если вы играли в Fallout, то наверняка помните, что слева внизу был эдакий экранчик, который отражал все события, происходящие в игре, так сказать, вёл журнал событий, или, если коротко - писал логи. Не знаю, как он называется на самом деле, но я его знал как logbox.
И, поскольку любая другая система плоды своей деятельности должна была показывать в этом самом логбоксе, я и решил написать его в первую очередь. Сказано - сделано, создаём мультиборд и пишем функцию, которая в этот мультиборд пишет строки, сдвигая текущие вверх, результат на скрине справа (там, правда, ещё видно диалог, но это совсем другая песня и к сегодняшней теме она не относится, равно как и сам текст в этом логбоксе).
Библиотека со всем этим делом выглядит вот так
lib Logs init Init uses MBItems
{
multiboard MB_Logs
private string array LogString
private int Rows = 4
private void add_row_assistant(string row)
{
int i = Rows
loop
{
LogString[i] = LogString[i-1]
i--
exit i == 0
}
LogString[0] = row
loop
{
MBST(MB_Logs, 0, i, LogString[Rows-i])
exit i == Rows
i++
}
}
void AddLog(string what)
{
add_row_assistant(what)
}
void LogsMBInit()
{
TriggerSleepAction(.01)
MB_Logs = CreateMultiboard()
MultiboardSetColumnCount(MB_Logs, 1)
MultiboardSetRowCount (MB_Logs, Rows+1)
int i = 0
loop
{
MBSS(MB_Logs, 0, i, true, false)
exit i == Rows
i++
}
MultiboardSetItemsWidth (MB_Logs, .3)
MultiboardSetTitleText (MB_Logs, "Actions Log")
MultiboardDisplay (MB_Logs, false)
}
private void Init()
{
LogsMBInit()
}
}
MBSS = MultiboardSetStyle
MBST = MultiboardSetText
Обе функции вычленены из BJ, но используют один глобальный multiboarditem, в результате чего пропадают все утечки, связанные с мультибордом. Обе лежат в библиотеке MBItems.
MBST = MultiboardSetText
Обе функции вычленены из BJ, но используют один глобальный multiboarditem, в результате чего пропадают все утечки, связанные с мультибордом. Обе лежат в библиотеке MBItems.
А, и exit = exitwhen, это дефайн, как можно догадаться.
На самом деле всё очень просто и понятно - сначала мы проходимся по строкам сверху вниз, смещая значения на 1 вверх, потом присваиваем первой строке новое значение, а потом отображаем это в мультиборде. Плюс имеем возможность в любой момент изменить количество строк в окошке, даже во время игры. Достаточно просто изменить значение переменной Rows и вызвать функцию LogsMBInit(), после чего добавить одно строчку через AddLog().
Ну, по сути, это всё на сегодня, вы можете оставлять комменты класса "код — говно, идея — шлак", но их я буду игнорировать или даже удалять, а можете предложить что-нибудь вроде "у тебя в функции х не очень удачно написано у, лучше делай так: z", к таким комментам я буду прислушиваться и обсуждать. Ну и конечно же вы можете предложить свою помощь в разработке.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.