Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 22:44   #811
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

ZBEP, в чем же эта многоуровневость заключается? Насчет этого я пока не понял.
Цитата:
К примеру можно скомбинировать заклинание фаербола с заклинанием призыва или оглушения или чего угодно вобще.
В Морровинде это тоже можно. Для нового заклинания выбираете цель - на себя/касание/удаленная цель, а потом привешиваете любое количество эффектов из любых школ, для каждого эффекта указывая интервал интенсивности и длительность этого эффекта. Единственные ограничения - цена создания заклинания, расходы маны и вероятность срабатывания при вашем навыке в данной школе.
Хотя подождите, или в заклинании только один эффект был? Вот вещи точно можно было на несколько эффектов зачаровывать, а насчет заклинаний уже не уверен - давно не играл...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 23.11.2010, 23:11   #812
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Теперь обратите внимания, что если это on-line, то один "правильно" развитый маг будет просто разносить десяток равных себе (по уровню), ...это правильно? ...думаю, что нет, будет напоминать Сириус Сэм, где бездумно разносится толпа монстряков, и в этом суть игры. В MMO 2D RPG суть в групповом сражении, каждый выполняет свою роль, и без помощи товарищей выжить не может. Например, по сговору маг накидывает десяток разных заклятий на разные цели, причем разумно, и пока они недоступны, использует вложенную магию посоха, например, или тех заклинаний повреждения на расстоянии. Как только одно из временных заклинаний заканчивается, маг снова разумно кидает на выбранную цель.

А если скомбинировать все что есть и сразу бить этим скопом, то будет просто "танк", тебе весело до поры до времени, а сопернику нет. Будет тьма тьмущая клонов разнопрокаченных, поскольку искать "золотой вариант" будет каждый, и чем навороченней механизм "приготовления" магии, тем больше будет ошибок и, соответственно, клонов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.11.2010, 10:58   #813
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Ну насчет баланса согласен, тут я пока хз что сделать.
Ну а насчет клонов, зачем? Если будет возможно в любой момент дополнить, изменить, разобрать на составляющие любое заклинание? (за деньги естествено или еще какие-нить очки магии).

Гром, в муровинде уже есть список готовых заклинаний, так его нет, есть только классы и параметры.
Многоуровнивость, я имел ввиду, то что к примеру такого:
1. Уровень.
Огонь х5 | Стрела + Рассеивание х3
Огонь х2 | Чары + Щит + Время х5.

2. Уровень (от стрелы).
Огонь х3| Чары + Щит + Время х2.
Яд х13| Призыв х5 + Время.
Огонь х2| Стрела + Рассеивание х3

3. уровень (от стрелы).
Массовое что-нибудь.

Результат:
Выпускается 3 (ну потому что рассеивание х3) огненные стрелы (урон зависит от уровня мага + количества "огня", в данном случае х5) и кастуется на себя огненный щит. После того, как огненная стрела достигла цели и нанесла урон - на цель кастуется огненный щит (хз зачем, прост для демонстрации), призывается 1 зомби (от данной стрелы, всего выпустили 3 стрелы, значит всего будет 3 зомбока, уровень которых, и сила/здоровье и время призыва, так же задаются пользователем).
И от цели в которую мы пустили стрелу, выпускается еще 3 стрелы, которые по достижении цели ударят чем-нибудь массовым.

Новый уровень можно задать с любого подуровня, примерно так:

0-0==>1-1==>2-2==>3-3==>4-4
0-0----1-1------------------4-4
0-0----1-1
-------1-1==>2-2==>3-3
-------1-1-----------3-3
---------------------3-3

Последний раз редактировалось ZBEP; 24.11.2010 в 11:02.
ZBEP вне форума Ответить с цитированием
Старый 24.11.2010, 15:36   #814
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

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

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

Я побаиваюсь, что если соорудить такую систему у себя, все будут магами и никто не будет мечником или лучником, ...ведь вместо сила+выносливость+ловкость придется всем качать сопротивление магии, ...а у мага это одно из направлений уже, ...так маг отбирает у прочих типов их направленность в развитии. А если классически, то маг заморозив только одного мечника не сможет заморозить второго, и придется с ним биться, ...но выигрыш в том, что с одним он может справиться, а с двумя одновременно себе равных уже вряд ли.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.11.2010, 20:45   #815
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Ну не совсем лени)
Просто можно сделать интересные цепочки и сам заклинания, что то вроде призыва после фаербола (я понимаю, что можно сделать отдельно статическое такое заклинание, но так меньше свободы для пользователя).
Темболее использование таких комбинаций можно сделать намного дороже, чем использования их по отдельности (но например по отдельности игрок не сможет выпустить такой фаербол, что бы полсе удара, на/возле места удара призвалось существо).
Сделать в разы дороже такие заклинания и ограничение по уровню и не будут этим злоупотреблять.
Но дисбаланс все равно будет

П.с.
Так и не сел сегодня разбирать Ваш метод, который описывали в постах #634 и #635.
Неожиданно возникли немного другие проблемы, на решение которых потратил больше времени, чем планировал..

Последний раз редактировалось ZBEP; 24.11.2010 в 20:52.
ZBEP вне форума Ответить с цитированием
Старый 24.11.2010, 22:48   #816
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Разумеется, для многих будет интересно, ...нужно пробовать сбалансировать и внедрить в какой-нибудь проект.

По поводу работы с графикой. При загрузке PNG нужны некоторые модули, в частности PNGImage, ...если нет в наличии, прикреплю.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.11.2010, 22:59   #817
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Beermonza, я пока даже не пробовал в проекте это, на глаз, часть с ассемблером не очень понятна, но это потому что я с ассемблером еще вообще не сталкивался.
Завтра начну подробно разбираться.

П.с.
С PNG уже работал как-то, когда делал коряво-игру PNGImage имеется

П.п.с.
Вот я и начал пытаться разбираться.
С частью из поста #634 проблем не возникло (вроде) :
Код:
type
TRGB=packed record
R:Byte;
B:Byte;
G:Byte;
end;
PRGB=^TRGB;

type
BGR=packed record
B:Byte;
G:Byte;
R:Byte;
end;
TBGR=array[word]of BGR;

var
  Form1:TForm1;
  PNGTex:TPNGObject;
  C,SW,SH,TexLine,FrameBufLine:integer;
  Buf:TBitmap;
  TexPixel,MaskPixel,FrameBufPixel:PRGB;
  TexPoint,MapPoint,FrameBufPoint,FrameBufScr,TexBits,MaskBits,MaskPoint:PChar;
  Alpha:PByteArray;
  HeaderSize,BitsSize:Cardinal;
  Header:Pointer;
  PointPNG,PointBIT:^TBGR;
  const C1:int64=$FFFFFFFFFFFFFFFF;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j:Word;
begin
PNGTex:=TPNGObject.Create;
PNGTex.LoadFromFile(extractfilepath(paramstr(0))+'\data\111.png');
TexLine:=PNGTex.Width*3;
if(TexLine mod 4)<>0 then TexLine := ((TexLine div 4)+1)*4;
Buf:=TBitmap.Create;
Buf.PixelFormat:=pf24bit;
Buf.Width:=PNGTex.Width;
Buf.Height:=PNGTex.Height;
for i:=0 to PNGTex.Height-1 do
begin
Alpha:=PNGTex.AlphaScanline[i];
PointBIT:=Buf.ScanLine[i];
for j:=0 to PNGTex.Width-1 do
begin
PointBIT[j].B:=Alpha[j];
PointBIT[j].G:=Alpha[j];
PointBIT[j].R:=Alpha[j];
end;
end;

try
begin
GetDIBSizes(Buf.Handle, HeaderSize, BitsSize);
GetMem(Header,HeaderSize);
GetMem(TexBits,BitsSize);
GetDIB(Buf.Handle,0,Header^,TexBits^);
end;
finally
FreeMem(Header);
end;

Buf:=TBitmap.Create;
Buf.PixelFormat:=pf24bit;
Buf.Width:=PNGTex.Width;
Buf.Height:=PNGTex.Height;

for i:=0 to PNGTex.Height-1 do
begin
Alpha:=PNGTex.AlphaScanline[i];
PointBIT:=Buf.ScanLine[i];
for j:=0 to PNGTex.Width-1 do
begin
PointBIT[j].B:=Alpha[j];
PointBIT[j].G:=Alpha[j];
PointBIT[j].R:=Alpha[j];
end;
end;

try
begin
GetDIBSizes(Buf.Handle, HeaderSize, BitsSize);
GetMem(Header, HeaderSize);
GetMem(MaskBits, BitsSize);
GetDIB(Buf.Handle,0,Header^,MaskBits^);
end;
finally
FreeMem(Header);
end;
end;
Компилирует и запускает все без ошибок.
Ну а со 2 частью, у меня непонятки, возможно я что-то упустил, да и многое в самом коде поста #635 не понятно для меня.
Делаю так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var t,x,y,w,h:integer;
begin
W:=512;
H:=512;
X:=1;
Y:=1;
SW:= 15;
SH:= 15;
// Подготовка строковых массивов типа PChar
TexPoint:=TexBits +(SH-1)*TexLine;
MapPoint:=MaskBits+(SH-1)*TexLine;
FrameBufPoint:=FrameBufScr+(H-1-Y)*FrameBufLine+X*3;
// SH - высота спрайта, H - высота буфера кадра, X и Y - координаты начального пиксела спрайта в буфере кадра.

asm // подготовка маски
  pxor      xmm7, xmm7     // обнуление регистра
  movq      xmm3, C1       // загрузка маски в регистр
// C1 - константа int64 = $FFFFFFFFFFFFFFFF
  PUNPCKLBW xmm3, xmm7
end;

for t:=0 to SH-1 do
begin
     TexPixel := PRGB(TexPoint);
     MaskPixel := PRGB(MaskPoint);
     FrameBufPixel := PRGB(FrameBufPoint);
     C := (SW*3 div 8);  // SW - ширина спрайта
     if C <= 0 then break;

     asm
        push edi
        push esi
        push edx
        push ecx

        mov ecx, C
        mov esi, [TexPixel]
        mov edi, [MaskPixel]
        mov edx, [FrameBufPixel]

      @@1:
        cmp dword ptr [edi], 0
        jne @@mix
        cmp dword ptr [edi+4], 0
        je  @@Next

      @@mix:
        movq      xmm0, [esi]     // tex
        PUNPCKLBW xmm0, xmm7

        movq      xmm1, [edx]     // buf
        PUNPCKLBW xmm1, xmm7
        psubw     xmm0, xmm1      // tex-buf

        movq      xmm2, [edi]     // mask
        PUNPCKLBW xmm2, xmm7

        pmullw    xmm0, xmm2      // (tex-buf)*mask

        psrlw     xmm0, 8         // shr 8
// полная формула смешивания buf = buf + (tex - buf)*mask shr 8
        paddw     xmm1, xmm0      // buf + (tex-buf)*mask shr 8

        pand      xmm1, xmm3
        packuswb  xmm1, xmm1

        movq      [edx], xmm1

      @@next:
        add esi, 8
        add edx, 8
        add edi, 8
        loop @@1

        pop ecx
        pop edx
        pop esi
        pop edi
      end;

    TexPoint := TexPoint - TexLine;
    MaskPoint := MaskPoint - TexLine;
    FrameBufPoint := FrameBufPoint - FrameBufLine;
  end;
asm
emms
end;
end;
Компилирует, но при выполнении "Read of address 00000000". (cmp dword ptr [edi], 0)

И это как я понял отрисовка только в буфере, без вывода на экран? Или с выводом о_0

П.п.п.с.
Надеюсь ничего, то что я тут эти вопросы задаю, а не в новой теме.

Последний раз редактировалось ZBEP; 25.11.2010 в 13:10.
ZBEP вне форума Ответить с цитированием
Старый 25.11.2010, 18:36   #818
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

ZBEP, у меня сейчас немножко проще и быстрее, ...и в последнее время стал разбираться с ассемблером, подсказали, что xmm-регистры - это расширение SSE, которое поддерживается только начиная с процессора Pentium III и иже с ними, выпущенными в то время (год 1998-й). У меня есть готовый тест на чистом MMX, вывод в форму через GDI, ...кидай свой адрес электронной почты мне в ЛС, отправлю исходник примера (378К).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.11.2010, 00:09   #819
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Beermonza, в том варианте, что Вы мне прислали, все компилируется, но тоже при запуске жалуется:

"Ссылаясь" на строку №151
Код:
movd     mm1, [edi]        // <- Buf
Я не знаю почему, или из-за win7 x64, или из-за Delphi XE, или вобще причина не в этом..
Буду разбираться, по крайней мере пытаться.

П.с.
Если закоментить эту строку (№151) и строку №163, т.е.
Код:
//movd     mm1, [edi]        // <- Buf  №151
...
//movd     [edi], mm0        // -> Buf  №163
То ошибок не возникает и все запускается, но естественно и не работает
При нажатии на "Старт" просто чернеет форма.

Последний раз редактировалось ZBEP; 26.11.2010 в 10:23.
ZBEP вне форума Ответить с цитированием
Старый 26.11.2010, 15:46   #820
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если в проекте ничего не менялось, просто компиляция и запуск, ...то виноват наверное компилятор. У меня Delphi 7, прекрасно компилируется, ...работал на Windows XP, Vista, 7. Exe тоже пока работал, за исключением машин, у которых отсутствовал на тот момент SSE, здесь же MMX, должно работать, без вариантов. Скорее всего компилятор виноват.

У тебя ошибка идет по приемнику, т.е. неверный указатель на память кадра, в который выполняется отрисовка. Вот запись указателя:

Код:
mov  edi, BufP               // Buf. Адрес начала строки
Уточни пожалуйста, в какой секции кода при выполнении процедуры DrawToBuf выскакивает ошибка. Заполнение подложки или отрисовка персонажей в кадр?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание игр: Unity, OpenGL, DirectX 750 14.11.2017 20:26
Музыка программистов - как вы относитесь к АРИИ? Весёлый Жека Свободное общение 46 10.10.2008 22:32
Конкурсы по созданию игр на Delphi mutabor Свободное общение 0 15.06.2007 12:40
Работа по созданию ПО remix Фриланс 3 22.04.2007 11:00