doom2d.org

Главная база плоских морпехов
It is currently 04 Apr 2020, 08:51

All times are UTC + 3 hours




Post new topic Reply to topic  [ 261 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 14  Next
Author Message
PostPosted: 11 Mar 2013, 15:51 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
ну чо, ромашки. только что мы с Рэмбо херачились в кооператив и дезматч. да-да, вы правильно угадали, ромашки. на пинге в 35-40 мс вполне играбельно, Рэмбо не даст соврать. десинка нет, монстры бегают, респавны респавнят, всё дела.

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

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

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

консольная переменная для установки адреса хоста:
n_host_addr ip-or-hostname
сменить порт:
n_host_port 1666
по умолчанию -- 1666, как вы поняли.


Top
 Profile  
 
PostPosted: 11 Mar 2013, 16:22 
Offline

Joined: 21 Jul 2012, 20:24
Posts: 52
Подтверждаю. На пинге 30-40 мс игра идет вообще без лагов. Все монстры работают, можно проходить кампании совместно. DM режим также работает отлично!


Top
 Profile  
 
PostPosted: 11 Mar 2013, 17:33 
Offline
Приколист

Joined: 18 Oct 2009, 12:00
Posts: 1243
Location: Подмосковье
Quote:
упрощённому алгоритму третьекваки. увы, интерполяции и предсказаний нет

Ну примерно как в д2дмп, лол. Только там криворуко и не на сях. И мобов нет.
Потом протестю. Два игрока, как обычно?

_________________
aka PrimuS


Top
 Profile  
 
PostPosted: 11 Mar 2013, 17:48 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
угу. можно на локалхосте, можно кого-нибудь помучить.
для запуска сервера с ништяками (другая карта, dm):
gcmd_network_start_server ?
по "?" оно даст краткий хэлп. очень краткий. алиасов нет, зато есть команда exec.

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

может, тупо сделаю dedicated mode, и тогда лохами будут все.


Top
 Profile  
 
PostPosted: 11 Mar 2013, 18:33 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
кстати. есть ли где-то подробный и красивый список того, что поменялось в 1.4 по сравнению с 1.35? в виде: "какодемон приобрёл 50 хитов и лысину, оружие стало стрелять на 4.458 градусов выше, а солдат агрится на 3 пункта дольше"?


Top
 Profile  
 
PostPosted: 11 Mar 2013, 19:11 
Offline

Joined: 21 Jul 2012, 20:24
Posts: 52
Prostovitalik wrote:
Ну примерно как в д2дмп, лол. Только там криворуко и не на сях. И мобов нет.
Еще отличие в том, что D2D:VCD использует UDP протокол и применяет дельта компрессию.


Top
 Profile  
 
PostPosted: 11 Mar 2013, 19:11 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5911
Location: Владивосток
В 1.35 нету разлёта игроков на куски. Это всё, что я знаю.
Параметры же монстров и оружия вроде как идентичны тем, что в 1.40.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 12 Mar 2013, 15:35 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
обновил виндовый бинарь. допилил меню, мелкофиксы.


Top
 Profile  
 
PostPosted: 15 Mar 2013, 02:44 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
новости, ромашки. с огромной помощью Рэмбо (что бы я без него делал ваще?!) перепилен сетевой код. теперь там используются предсказатели (громко сказано, конечно) и открутка времени назад при необходимости. не считая одного загадочного бага, который мы не можем повторить, в остальном всё, похоже, работает. при пинге 80-90 играть всё ещё можно, хотя клиент и подёргивается.

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

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

если получится -- залью новый бинарь, интегрирую наработки в master и буду пробовать сделать более двух игроков по сетке (это не так просто, как кажется, да).


Top
 Profile  
 
PostPosted: 15 Mar 2013, 10:51 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 6477
Location: \\NEGRO
ух ты. ждем.

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 15 Mar 2013, 12:06 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
сейчас делается ещё круче фича: lag compensation -- как в полужизни. если я смогу её отладить... ну, все поняли, да?


Top
 Profile  
 
PostPosted: 15 Mar 2013, 14:15 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5911
Location: Владивосток
Джа, будь добр, перенеси эту тему обратно, а здесь оставь редирект.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 16 Mar 2013, 15:35 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
привет, ромашки. концепция снова сменилась (кто-то удивлён?). сервер будет только в варианте "отдельный". то есть, бинарь тот же самый, но для сетевой игры его надо будет запускать как dedicated, а дальше всем коннектиться как обычно. почему именно так? а так проще. серверный код не разбавлен идиотией обработки локального игрока, клиентский код тоже унифицирован. заодно введена константа D2D_MAX_NW_PLAYERS = 32 (и, соответственно, код самой игры допиливается до поддержки более двух игроков).

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

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

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

впрочем, не всё настолько печально: лаг-компенсатор умеет отматывать очень ограниченое время, так что лагалище с пингом 800 интеллектуальными стеноогибательными пулями стрелять не будет.

интерполяция. поскольку FPS у меня всё ещё фиксированый, то особого сакрального смысла в интерполяции нет.

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

также все игроки в кадре хотят "одновременно", не надо больше чередовать "кто первый" для честности.

всё это делается отчасти на базе уже существующего и рабочего сетевого кода, на котором мы с Рэмбо немножко десматчились. правда, у нас пинг примерно 40-45, так что очевидно, что не лагало. как сделаю новый код, надо будет ЧД подёргать, до него пинги как до Луны на телеге должны быть.

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

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


Top
 Profile  
 
PostPosted: 16 Mar 2013, 15:43 
Offline
Приколист

Joined: 18 Oct 2009, 12:00
Posts: 1243
Location: Подмосковье
Казалось бы, причем тут размер карт. В д2дмп максимальный размер такой же (потому что координаты игрока передаются signed short'ом, хотя тогда он вдвое больше, если таскать камеру по отрицательным, лол). Другое дело, что там при попытке сделать большую карту (даже маленькую, но >~5k тайлов) будут неебические лаги. Хотя я карт толще 2к (dm_df6) не видел пока.
Ежели портанете с рембой редактор и сделаете всякую мелкую хуйню (режимы игры, настроечки, т.д.), то тут 0.6-ой МП уже немного неконкурентоспособен.
Мы с ЧД играли со старым шиндовым бинарником по сети, лагов особенно не было заметно, но:
- у меня был его HUD;
- на стороне сервера не фиксировались визуально попадания по щщам клиенту;
- кучка мелких багов (у него тормозило БФГ, у меня еще что-то, не помню уже).
Тот бинарник был старый, так что уже похуй.

_________________
aka PrimuS


Top
 Profile  
 
PostPosted: 16 Mar 2013, 16:01 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
размер карт при том, что кто-то может захотеть для зарубы в 20 человек нарисовать карту побольше. а то на оригинале будут друг у друга на головах сидеть.

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

старый виндовый бинарник старый. %-) в новой версии сетевого кода есть нерабочий лаг-компенсатор, одновременная ходьба и ты пы. но его я пока "на гора" выдавать не буду, всё равно он уже тоже устарел.

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

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

возможно, поддержка труколор текстур и импортёр карт назад из d2d:forever и d2d:mp (хотя у d2d:mp физика, вроде, чуть другая). вообще, не нарыл исходников d2d:mp. они есть в текстовом виде, или только внутри говномэйкера?

p.s. и звуки надо переделать. а то сейчас при неправильных предсказаниях одно и то же может звучать несколько раз.


Top
 Profile  
 
PostPosted: 16 Mar 2013, 16:10 
Offline
Приколист

Joined: 18 Oct 2009, 12:00
Posts: 1243
Location: Подмосковье
Только внутре говномейкера, а карты там те же, что и в DF. Своих полторы штуки, да и те за пять минут в чужом редакторе переделать.
Хотя у меня есть исходники полурабочего сервера на сях, они там где-то в подфоруме лежат.

_________________
aka PrimuS


Top
 Profile  
 
PostPosted: 16 Mar 2013, 16:48 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
я хотел физику посмотреть и формат карт, да. чтобы, возможно, приделать это опцией к себе. протокол, понятно, не буду. %-)

слушай. а их там из говномэйкера никак не заэкспортить? ну, хоть копипастой через буфер.


Top
 Profile  
 
PostPosted: 16 Mar 2013, 19:24 
Offline
Приколист

Joined: 18 Oct 2009, 12:00
Posts: 1243
Location: Подмосковье
Структура карт:
Attachment:
dlv_map_format.rar [4.6 KiB]
Downloaded 40 times

Физика (геймейкеровский скрипт; си-подобен по большей части):

Code:
//argument0 - left key
//argument1 - right key
//argument2 - jump key

//controls
if argument0 && !argument1
{
    if hsp > -maxhspd {hsp -= acc;}
}
if argument1 && !argument0
{
    if hsp < maxhspd {hsp += acc;}
}
if argument2 && !free
{
    if !collision_rectangle(x-8, y, x+8, y+16, o_water, 0, 0) && !collision_rectangle(x-8, y, x+8, y+16, o_acid, 0, 0)
    {
        vsp =- jspd;
    }
    else
    {
        vsp = -2.75;
    }
}
if argument2
{
    vsp = -4;
}

//shit below is highly unstable and i stole it from somewhere
//all shit reserved
/////
hrep = 0;
vrep = 0;

if hsp > 0 {htime += hsp - floor(hsp);}
if hsp < 0 {htime += abs(hsp - ceil(hsp));}
if htime >= 1 {htime = -1;}
hrep = abs(hsp);
if htime = -1 {hrep += 1; htime = 0;}

if vsp > 0 {vtime += vsp - floor(vsp);}
if vsp < 0 {vtime += abs(vsp - ceil(vsp));}
if vtime >= 1 {vtime = -1;}
vrep = abs(vsp);
if vtime = -1 {vrep += 1; vtime = 0;}

//trin = 999;

//horizontal movement
repeat(floor(hrep))
{
  if !place_meeting(x+sign(hsp), y, o_solid) {trinfree = true; x += sign(hsp);} else {trinfree = false;}
}

//vertical movement
repeat(floor(vrep))
{
  if !place_meeting(x, y + sign(vsp), o_solid)
  {
    col_jumpthrough = collision_rectangle(x - 16, y + 32, x + 16, y + 36, o_jthr, 0, 1);
    if col_jumpthrough > 0 and vsp >= 0
    {
      cjy = col_jumpthrough.y;
      if y < cjy - 30 + vsp
      {
        y = cjy - 32;
        vsp = 0;
      } else {
        y += sign(vsp);
      }
    } else {
      y += sign(vsp);
    }
  } else {
    vsp = 0;
  }
}

//checks if there's a wall underneath
if place_meeting(x, y+1, o_solid)
{
  free = false;
  freemd = true;
} else {
  freemd = false;
  col_jumpthrough = collision_rectangle(x - 16, y + 32, x + 16, y + 36, o_jthr, 0, 1);
  if col_jumpthrough > 0 and vsp >= 0
  {
    cjy = col_jumpthrough.y;
    if y < cjy-30+vsp
    {
      y = cjy - 32;
      free = false;
    } else {
      free = true;
    }
  } else {
    free = true;
  }
}

//gravity n friction
if free = true {vsp += 0.22;}
if !free {hsp = max(0, abs(hsp)-deacc) * sign(hsp);} else {hsp = max(0, abs(hsp)-deacc/2) * sign(hsp);}
//////

if place_meeting(x, y - 15, o_water) || place_meeting(x, y - 15, o_acid)
{
    free = false;
    if st_jet {st_jet = 0;}
    if vsp > 2 {vsp = 2;}
    if vsp < -2 {vsp = -2;}
    if hsp > 2 {hsp = 2;}
    if hsp < -2 {hsp = -2;}
}

if place_meeting(x, y, o_jthr)
{
    free = false;
}

if vsp > 13 {vsp = 13;}

if place_meeting(x, y, o_lift_up) && vsp > -5 {vsp -= 0.5;}
if place_meeting(x, y, o_lift_down) && vsp > 3 {vsp -= 0.5;}
if place_meeting(x, y, o_lift_left)
{
  free = false;
  if vsp < -1 {vsp += 1;}
  if vsp > 1 {vsp -= 1;};
  if hsp > -8 {hsp -= 0.5;}
}
if place_meeting(x, y, o_lift_right)
{
  free = false;
  if vsp < -1 {vsp += 1;}
  if vsp > 1 {vsp -= 1;};
  if hsp < 8 {hsp += 0.5;}
}

if place_meeting(x + hsp, y, o_solid) {hsp = 0;} //prevents sticking to the walls

Code:
place_free(x, y, object); //проверяет, пересекается ли хитбокс данного объекта, перенесенный серединой в (x, y) (в случае игрока серединой), и хитбокс любого из объектов типа object
collision_rectangle(x1, y1, x2, y2, object, foo, bar); //проверяет, пересечется ли хитбокс любого объекта типа object с хитбоксом, определенным координатами. на последние два аргумента похуй
//o_solid - стена, o_jthr - ступенька
//все числовые значения и переменные суть float
//тикрейт игры в идеале 60 тиков/сек, фпс такой же
//вообще скрипт довольно заебистый для такой простой физики, так как по-моему предназначался для использования и с наклонными поверхностями, в том числе и движущимися, что я благополучно удалил


_________________
aka PrimuS


Top
 Profile  
 
PostPosted: 16 Mar 2013, 19:38 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
tnx. your help is very appreciated.


Top
 Profile  
 
PostPosted: 16 Mar 2013, 19:39 
Offline
Приколист

Joined: 18 Oct 2009, 12:00
Posts: 1243
Location: Подмосковье
Бля, забыл дефолтные зачения указать. Погодь.

Code:
htime = 0;
vtime = 0;
free = true;
hsp = 0;
vsp = 0;
//trin = 999;
trinfree = true;
freemd = true;

acc = 0.4;
deacc = 0.2;

maxhspd = 5;
maxvspd = 16;
jspd = 6.1; //single jump height


_________________
aka PrimuS


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 261 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 14  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
doom2d.org, since 2007