Комментарии проекта Dendy
29

Dendy - Неделя четвёртая - Тетрис

» Dendy
За эту неделю я наверное сделал больше чем за все три предыдущих.. (с работой полегче немного стало)
Собственно предлагаю просмотреть демку того что я своими руками натворил, на сегодняшний день.
Приятного просмотра =).

Читать далее...
Melissa #1 - 7 years ago 0
Голосов: +0 / -0
А конкурс тем временем так и не желает показывать результаты. (=
awesomesk1ll #2 - 7 years ago 0
Голосов: +0 / -0
Melissa:
Хотелось бы поскорее заценить это вживую)
А то кажется, будто просто видео с эмулятора вставлено в рамку варика.
Даже тени везде, где надо :D
Не), отличия есть, ну когда доделаю будет не отличить наверное).
Melissa #3 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Хотелось бы поскорее заценить это вживую)
А то кажется, будто просто видео с эмулятора вставлено в рамку варика.
Даже тени везде, где надо :D
awesomesk1ll #4 - 7 years ago 0
Голосов: +0 / -0
Melissa:
Воу, отлично)
Что-нибудь ещё уже успело улучшиться?
Нет). Выходной)
Melissa #5 - 7 years ago 0
Голосов: +0 / -0
Воу, отлично)
Что-нибудь ещё уже успело улучшиться?
awesomesk1ll #6 - 7 years ago 0
Голосов: +0 / -0
К моменту выхода следующих новостей по конкурсу).
awesomesk1ll #8 - 7 years ago (изм. ) 1
Голосов: +1 / -0
Aws:
awesomesk1ll, Лучше б ты карту дальше пилил, чем статьи на вики искать.
Последние 4 субботы и 4 воскресенья я пилил карту. (не говоря о будних днях)
Эти выходные могу чему то другому посвятить, наверное, например поиску статей на вики, просмотру какого-нить сериала, в дотан сыграть, или же с женой время провести. Разрешаешь?)
Aws #9 - 7 years ago 0
Голосов: +0 / -0
awesomesk1ll, Лучше б ты карту дальше пилил, чем статьи на вики искать.
awesomesk1ll #10 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Aws:
awesomesk1ll, Это не критика, просто мой первый тетрис был с коробейниками и эта музыка у меня всегда ассоциируется с этой игрой и в этом тетрисе тоже хотелось бы слышать :)
Ясно), ну тут в конкурсные 2мб так и так не влезло бы), когда доделывать буду, мб добавлю)
Aws #11 - 7 years ago 0
Голосов: +0 / -0
awesomesk1ll, Это не критика, просто мой первый тетрис был с коробейниками и эта музыка у меня всегда ассоциируется с этой игрой и в этом тетрисе тоже хотелось бы слышать :)
Melissa #12 - 7 years ago 0
Голосов: +0 / -0
От первого по третье место займет точно
За качество исполнения уже только первое должно быть, с большим отрывом.
Ванга опять не обманывает
awesomesk1ll:
на которую пародию сделал
тут и близко пародией не пахнет. Ремейк скорее...
awesomesk1ll #13 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Aws:
awesomesk1ll, У тебя не пародия, а копия, если было бы больше отсебятины, тогда вот пародией можно было бы назвать.
Просто отсебятину всегда легче наворотить). Повторить 1 в 1 на мой взгляд задача посложнее, к этому я и стремился.
В любом случае, благодарю за критику).
Aws #14 - 7 years ago 0
Голосов: +0 / -0
awesomesk1ll, У тебя не пародия, а копия, если было бы больше отсебятины, тогда вот пародией можно было бы назвать.
Гигамон #15 - 7 years ago 0
Голосов: +0 / -0
Ого. Работы тут проделано... От первого по третье место займет точно.
awesomesk1ll #16 - 7 years ago (изм. ) 2
Голосов: +2 / -0
Aws:
поставь лучше вместо тройки коробейников отсюда: xgm.guru/p/retro-game/tetris
Зачем? Я поставил музыку из той игры на которую пародию сделал). Целью было сделать как можно меньше отсебятины).
И импорт ограничивался в размере 2 мб, ты предлагаешь выкинуть оригинальную troika и заменить на коробейников из другой игры? пфф.
Кстати тенген'ский тетрис признан лучшим для dendy в сравнении с многими другими в т.ч Nintendo'вским и тем на который ты ссылку дал =).
В принципе можно добавить 6ой строкой и этих коробейников, уж точно не в замену оригинальному саунду.
Azazzello:
крутотень оО
Jusper:
Браво!
Aws:
Это офигенно
Спасибо) !
Aws #17 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Это офигенно, только поставь лучше вместо тройки коробейников отсюда: xgm.guru/p/retro-game/tetris
Azazzello #19 - 7 years ago 0
Голосов: +0 / -0
крутотень оО
awesomesk1ll #20 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Nikson12:
Стоп! Там написано тетЯ is а не тетRis
Потому что игра в оригинале так и называется, скорее всего это было сделано для того что бы избежать какие-то проблемы в связи с издательством, игру назвали TETЯIS: The Soviet Mind Game (используя искусственную кириллицу, зеркальный символ R)
В третьем недельном отчёте в самом низу под спойлером можно найти много интересной инфы про тетрис, в том числе про тетрис тенгена (части атари), на который представлена пародия).
Nikson12 #21 - 7 years ago 0
Голосов: +0 / -0
Стоп! Там написано тетЯ is а не тетRis
awesomesk1ll #22 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Melissa:
ну либо плавающим текстом, либо лежачими изображениями же, с единственной подляной, что гуишные функции для изображений почти все багнутые, джасс юзать надо.
Текст который справа вылетает когда фигура ударяется о "землю" - сделано через модели на текстурах шрифта который вкручен там).
По тому же принципу и стирание линий анимировать хотел. Просто времени на реализацию и доработку решения не хватило, я это подразумевал). Как сделать в общих чертах то я и сам знаю)
Melissa #23 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Ааа, не знал о таком.
Читы для тетриса на варкрафте, теперь я видел всё :D
awesomesk1ll:
времени вообще не было даже придумать как это сделать
ну либо плавающим текстом, либо лежачими изображениями же, с единственной подляной, что гуишные функции для изображений почти все багнутые, джасс юзать надо.
awesomesk1ll #24 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Melissa:
Не совсем понял про какой ты момент... Паузу? О_О
код на палку :D
Get a long block
Press up, up, down, down, left, right, left, right, B, and then A.
Works once per game.
На любом источнике читов найти можно).
И ещё - где надписи Single, Double, Triple, Tetris?
Тоже не сделал пока, там сильно муторно, времени вообще не было даже придумать как это сделать).
так же как и экрана бонусного, с подсчётом очков.
Сейчас очки за комбо линий сразу падают, а не на подсчёте, кол-во очков точно такое же как в оригинале.
100 за одну линию, 400 за две, 900 за три, 2500 за тетрис.
Melissa #25 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Прям идеально симулировано всё.
Кульно. Давай скорее публикуй карту :D
awesomesk1ll:
Обрати внимание на момент после 4 минуты - доказательство моих намерений.
Не совсем понял про какой ты момент... Паузу? О_О
И ещё - где надписи Single, Double, Triple, Tetris?
awesomesk1ll #26 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Melissa:
Игра с компютером тоже присутствует? :О
Нет, пока что доступны только 1 и 2 режим. Хотя не исключаю что и в этих режимах баги найдутся).
Но, база под реализацию всего остального есть. Я заранее планировал что все режимы сделаю, просто времени нехватило).
Был бы у меня человек-кодер в паре, сделали бы наверное всё как надо. А то я вообще стрёмный кодер), ну зато всё сам сделал от и до).
Кстати обрати внимание на момент после 4 минуты - доказательство моих намерений.
Melissa #27 - 7 years ago 0
Голосов: +0 / -0
Игра с компютером тоже присутствует? :О
12

Конкурсная версия проекта

» Dendy
Так как итоги уже подведены, я наконец могу выложить на всеобщее обозрение карту, которую сдавал на судейское голосование. Собственно, я готов заниматься проектом дальше.

Читать далее...
demon_kst #1 - 7 years ago 0
Голосов: +0 / -0
Хотелось бы увидеть ремейк "доктора марио"
тоже хотел бы,но это посложнее будет как мне кажется чем блоки двигать)
Mexazzi #2 - 7 years ago 0
Голосов: +0 / -0
... Хотелось бы увидеть ремейк "доктора марио"
awesomesk1ll #3 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Да, это тоже оно.
abidin #4 - 7 years ago 0
Голосов: +0 / -0
ну я имел ввиду нижнюю часть игрового поля
Прикрепленные файлы
awesomesk1ll #5 - 7 years ago 0
Голосов: +0 / -0
У меня все ок было вроде)
Сделай скрин
abidin #6 - 7 years ago 0
Голосов: +0 / -0
То что нижняя часть панельки не видна?
awesomesk1ll #7 - 7 years ago 0
Голосов: +0 / -0
Не скажу XD. Кто найдёт - полмолодца), а пофиксит - низкий поклон.
Melissa #8 - 7 years ago 0
Голосов: +0 / -0
Того кто придумает фикс для бага
Какого бага?
awesomesk1ll #9 - 7 years ago 0
Голосов: +0 / -0
Ага.
iSmart #10 - 7 years ago 1
Голосов: +1 / -0
TETЯIS? :)
awesomesk1ll #11 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Управление как в оригинале), зажим влево/вправо не реализовал, вообще хотел. (Зажим вниз сложнее, ибо ускорение, его же я сделал)
Просто не успел..
Melissa #12 - 7 years ago 0
Голосов: +0 / -0
Что-то какие то проблемы со скаичванием, 2кбс и застревает. Можешь перезалить на файлообменник?
Хотя вроде уже так докачалась
Обохтымой, а что управление то такое негуманное? Пусть фигуры уходят вбок при зажатой стрелке влево/вправо.
Ну и лучше предоставить игрокам выбор, как вращать фигуры, кнопками А Б или стрелкой вверх
3

Неделя третья - Тетрис

» Dendy
Вот и 10 октября. В Новосибирске идёт снег.. А он похож на тетрис, было бы круто еслиб снег собрав линию тоже исчезал).
На протяжении выходных я немного переписал код, стало почище.. пофиксил багу). но всё стоит по прежнему на этапе простого падения фигуры вниз.
На буднях по сути я только дорабатывал внешний вид, немного переделал модельки, сделал текстуры чётче.

Читать далее...
Melissa #1 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Ну иначе было бы странно как всё помещается в эмулируемой игре ;)
В игре Chrono Trigger к примеру порядка 25 треков, длящихся примерно по 1.5 мин, тексту почти на 3 МБ, Добавим ко всему этому монстров, персонажей, локации, код, эффекты, звуковые эффекты - и получаем ром для супер нинтендо весом всего 4.03 МБ. Святая простынь...
awesomesk1ll #2 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Melissa,
В эмуляторе, впрочем думаю как и в приставке денди имеется набор инструментов (генераторы звука), которые воспроизводят определенные звуки, всего их вроде 11 штук.
В роме же содержатся инструкции(ноты? :D) для генератора какой тональности и какой длительности издать звук. (команды)
Т.е поидее качество звука эмулятора зависит от качества этих самых генераторов(инструментов) (квадраты, триангл, шум и другие) и от возможности звуковой карты издать эти звуки.
Melissa #3 - 7 years ago 0
Голосов: +0 / -0
И для сравнения - 1 track в хорошем качестве (128kbit/
Ну дык в эмуляторе денди муза и вовсе не в таком высоком как 128 кбс качестве исходит.)
3

Неделя вторая - Тетрис

» Dendy
Наступило 3 октября, теперь я понимаю, что мне категорически не хватает времени на конкурс.
Неудобно по времени начался, для меня, на полмесяца-месяц раньше бы.. (сейчас много всего IRL на голову свалилось, некогда заниматься, но я стараюсь выкроить время.)

Читать далее...
awesomesk1ll #1 - 7 years ago (изм. ) 0
Голосов: +0 / -0
про базы данных слышали?
Про варкрафтовские дб - не, не слышал. Цвет переделаю под xgm.guru/p/wc3/divide-int-by-3-bytes , ок).
Массив юнитов переделал), вообще все функции переписываю сижу. Такой трэшак там..
Сам понимаю что стрёмно составил, но что-то нормальное в голову не приходит, как написать). Я без образования в этой сфере, помог бы кто :D.
Если кто подскажет как правильно написать, я только рад буду научиться)...
» мои тугие функции
//Двумерный массив внутри 1 массива.
//X от 1 до 32
//Y от 1 до 32
function mx takes integer x, integer y returns integer
return 32*(x-1)+(y-1)
endfunction

//Игровая система координат, принимает INT, возвращает реальный X или Y на середину тайла
//X 1 Y 1 - самый нижний левый тайл на карте
function xy takes integer x returns real
//call DisplayTextToForce( GetPlayersAll(), R2S(-1856+(I2R(x)*128)))
return -2112+(I2R(x)*128)
endfunction

//Спавн блок-юнита
function spawnblockunit takes integer x, integer y, integer ut, integer color returns nothing
        local integer id = mx(x,y)
        call DisplayTextToForce( GetPlayersAll(), "ID - "+I2S(id))
        set udg_Unit[id] = CreateUnit(Player(0), udg_BlockType[ut], xy(x), xy(y), 270)
        call SetUnitUserData( udg_Unit[id], color )
        call cu(udg_Unit[id])
endfunction

//спавн next-фигуры
function NextFigure takes integer p returns nothing
    call DisplayTextToForce( GetPlayersAll(), "NEXT FIGURE player - "+I2S(p))
    set udg_NextFigure[p] = GetRandomInt(1, 7)
    if ( udg_NextFigure[p] == 1 ) then
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,7)
        call spawnblockunit(udg_NextX[p],udg_NextY[p],3,7)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],3,7)
        call spawnblockunit(udg_NextX[p]+2,udg_NextY[p],2,7)
    else
    endif
    if ( udg_NextFigure[p] == 2 ) then
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,4)
        call spawnblockunit(udg_NextX[p],udg_NextY[p],9,4)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],2,4)
        call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,6,4)
    else
    endif
    if ( udg_NextFigure[p] == 3 ) then
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],11,8)
        call spawnblockunit(udg_NextX[p],udg_NextY[p],14,8)
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p]-1,13,8)
        call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,12,8)
    else
    endif
    if ( udg_NextFigure[p] == 4 ) then
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,6)
        call spawnblockunit(udg_NextX[p],udg_NextY[p],3,6)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],14,6)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p]-1,6,6)
    else
    endif
    if ( udg_NextFigure[p] == 5 ) then
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],11,10)
        call spawnblockunit(udg_NextX[p],udg_NextY[p],3,10)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],2,10)
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p]-1,6,10)
    else
    endif
    if ( udg_NextFigure[p] == 6 ) then
        call spawnblockunit(udg_NextX[p],udg_NextY[p],11,9)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],2,9)
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p]-1,4,9)
        call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,12,9)
    else
    endif
    if ( udg_NextFigure[p] == 7 ) then
        call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,2)
        call spawnblockunit(udg_NextX[p],udg_NextY[p],14,2)
        call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,13,2)
        call spawnblockunit(udg_NextX[p]+1,udg_NextY[p]-1,2,2)
    else
    endif
endfunction

//движение юнита с точки xy в точку xy
function MyMoveUnitXY takes integer xold, integer yold, integer xnew, integer ynew returns nothing
local integer oldid = mx(xold, yold)
local integer newid = mx(xnew, ynew)
SetUnitX(udg_Unit[oldid], xy(xnew))
SetUnitY(udg_Unit[oldid], xy(ynew))
set udg_Unit[newid] = udg_Unit[oldid]
set udg_Unit[oldid] = null
endfunction

//сдвиг юнита по оси X
function MyMoveUnitX takes integer xold, integer yold, integer offset returns nothing
local integer oldid = mx(xold, yold)
local integer newid = mx(xold+offset, yold)
SetUnitX(udg_Unit[oldid], xy(xold+offset))
set udg_Unit[newid] = udg_Unit[oldid]
set udg_Unit[oldid] = null
endfunction

//сдвиг юнита по оси Y
function MyMoveUnitY takes integer xold, integer yold, integer offset returns nothing
local integer oldid = mx(xold, yold)
local integer newid = mx(xold, yold+offset)
SetUnitY(udg_Unit[oldid], xy(yold))
set udg_Unit[newid] = udg_Unit[oldid]
set udg_Unit[oldid] = null
endfunction

//Перенос блока с положения Next на место Start
function MoveBlockToStart takes integer p, integer figa returns nothing
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p],udg_StartX[p],udg_StartY[p])
if (figa == 1 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+2,udg_NextY[p],udg_StartX[p]+2,udg_StartY[p])
endif
if (figa == 2 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
endif
if (figa == 3 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p]-1,udg_StartX[p]-1,udg_StartY[p]-1)
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
endif
if (figa == 4 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p]-1,udg_StartX[p]+1,udg_StartY[p]-1)
endif
if (figa == 5 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p]-1,udg_StartX[p]-1,udg_StartY[p]-1)
endif
if (figa == 6 )
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p]-1,udg_StartX[p]-1,udg_StartY[p]-1)
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
endif
if (figa == 7 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p]-1,udg_StartX[p]+1,udg_StartY[p]-1)
endif
endfunction

//задача функции перевести фигуру "некст" в состояние "текущая"
function NextToCurrent takes integer p returns nothing
set udg_CurrentFigure[p] = udg_NextFigure[p]
set udg_CurrentID[p] = mx(udg_StartX[p],udg_StartY[p])
set udg_CurrentTurn[p] = 1

call MoveBlockToStart(p, udg_CurrentFigure[p])
endfunction

//проверка юнита в оффсетах от Current по X,Y
function NullCheck takes integer p, integer x, integer y returns boolean
if udg_Unit[mx(tx(udg_CurrentID[p])+x,ty(udg_CurrentID[p])+y)]==null
return true
endif
return false
endfunction
С цветами тоже загвоздка выходит..
Содержание чёрного в перепадах цветов не одинаковое, поэтому цвет, получающийся при смешении альфы с самым ярким в наборе местами даёт не тот результат.
Похоже что этим способом не получится сделать 1 в 1. Только похоже..
Прикрепленные файлы
Buulichkaa #2 - 7 years ago (изм. ) 1
Голосов: +1 / -0
Годнота, мой фаворитик ^^
а что это за лолокостыль с колор апдейтом?? про базы данных слышали?

и вообще, нафиг бд, юзай эту магию, она хорошая, годная

и двумерный массив не так эмулируешь, зачем этот костыль с умножением на 100
вот тебе норм вброс
таким образом тебе хватит формально и массива в 1024 элемента, но в джассе же статик массивы, так что все тлен

в конце лорд догнал фишку тетриса
36

Неделя первая - Тетрис

» Dendy
Вот и наступило 26 сентября, а это значит что именно сегодня участники конкурса карт «Мини-игры» должны поделиться информацией о том как обстоят у них дела на этапе разработки.

Читать далее...
awesomesk1ll #34 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Вчера добрался до компутера, начал делать, катастрофически застрял на алгоритмах).
Если кто поможет с алгоритмами буду очень благодарен, голову сломал уже (:
awesomesk1ll #35 - 7 years ago (изм. ) 0
Голосов: +0 / -0
Я его прочел уже). Примеры посмотрю. Спасибо
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
Я это понимаю в принципе, поверхностно. У меня в голове аналогия с бд, 1 строка, несколько полей).
Просто я на примерах учусь, мне нужно пару примеров повторить, пощупать).
nvc123 #36 - 7 years ago (изм. ) 1
Голосов: +1 / -0
awesomesk1ll,
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
прочитай тот файл что я скинул
вот он xgm.guru/files/705/97998/comments/178733/vJass.doc
это переведённый док по вджассу(структуры это часть вджасса)
без них код будет очень сложным в дальнейшим
так же можешь посмотреть примеры юза структур