Новые сообщения Участники Правила Поиск
Модератор форума: freeknik, SLAwww, thecre, RealCrazyMan  
Форум » Serious Sam » Серьёзное редактирование » Помощь по SDK для Serious Sam 1.05/1.07 (Вопросы по комплекту средств разработки для Serious Sam 1.)
Помощь по SDK для Serious Sam 1.05/1.07
Heming_Hitrowski Пятница, 04.09.2015, 13:17 | Сообщение # 2401


Double Jumper
Сообщений: 883
Награды: 32
Замечания: 0%
 
CAHEK, по вопросу один: вероятно что-то вроде такого

Код
if (IsOfClass(m_penEnemy, "Название класса зомби, который мог упасть")) { // допустим, что это класс CZombie
// если зомби упал
if (((CZombie*)&*m_penEnemy)->LEG) {
    // анимация 1
} else { // если еще стоит
    // анимация 2
}
}
Сообщение отредактировал Heming_Hitrowski - Пятница, 04.09.2015, 13:18


ST27 Пятница, 25.09.2015, 20:50 | Сообщение # 2402


Сообщений: 457
Награды: 6
Замечания: 0%
 
Возможно ли каким-нибудь образом включить одновременно несколько коллизий у модели, сделать коллизию кубической или телепортировать браши без рассинхронов?

- My Personal Site -
SLAwww Пятница, 25.09.2015, 21:44 | Сообщение # 2403


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Телепортировать браши без рассинхрона в теории можно.. Разве Teleport moving brush event не работает?
Одновременно несколько коллизий - тоже можно, но это настолько сложно, что я даже не берусь описывать.
Кубическая коллизия - можно, но проще будет прикрутить ODE, как сделали в ВТВА. =/


Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Пятница, 25.09.2015, 22:03 | Сообщение # 2404


Сообщений: 457
Награды: 6
Замечания: 0%
 
"Teleport moving brush event" - чёрт, как я мог про это забыть? Хотя, мог, т.к. не использовал никогда.
И что такое ODE?


- My Personal Site -
SLAwww Пятница, 25.09.2015, 22:08 | Сообщение # 2405


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
http://lmgtfy.com/?q=ODE

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Четверг, 15.10.2015, 14:45 | Сообщение # 2406


Сообщений: 457
Награды: 6
Замечания: 0%
 
Мда, вряд ли я его вообще загружу в студию, а ещё и встроить в ентити

Добавлено (15.10.2015, 14:45)
---------------------------------------------
Снова непонятно-сложные вопросы. Итак, как можно отрисовывать курсор на экране и выполнять им разные действия?

- My Personal Site -
SLAwww Четверг, 15.10.2015, 22:58 | Сообщение # 2407


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
CDrawPort::PutTexture чтобы нарисовать курсор, движения мыши можно отслеживать из CPlayer::ApplyActionPacket.

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Четверг, 15.10.2015, 23:08 | Сообщение # 2408


Сообщений: 457
Награды: 6
Замечания: 0%
 
Да мне бы его как в ИНЕРТАНе сделать, а ещё в Player нет ApplyActionPacket. А сам я не знаю, что туда писать

- My Personal Site -
SLAwww Пятница, 16.10.2015, 00:10 | Сообщение # 2409


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
А в чём именно проблема? Как нарисовать курсор я сказал. Откуда взять координаты курсора - сказал (ну, может, не ApplyActionPacket, но в названии там есть ActionPacket или PlayerAction).

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Суббота, 17.10.2015, 15:01 | Сообщение # 2410


Сообщений: 457
Награды: 6
Замечания: 0%
 
В общем перерыл я всё, что мог и ничего всё равно не понял. Для меня это всё работает на магии

- My Personal Site -
SLAwww Суббота, 17.10.2015, 17:32 | Сообщение # 2411


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Ты даже не сказал, что именно тебе не понятно.

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Суббота, 17.10.2015, 18:01 | Сообщение # 2412


Сообщений: 457
Награды: 6
Замечания: 0%
 
Не понятно, как получить координаты мыши, плюс она же, насколько я знаю, вообще только в центре во время игры, и её нельзя сдвинуть.

- My Personal Site -
SLAwww Суббота, 17.10.2015, 18:44 | Сообщение # 2413


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
В CPlayer в функцию ApplyAction приходит значение типа CPlayerAction. В него входит pa_aViewRotation - вектор, фактически соответствующий скорости движения курсора.

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Суббота, 17.10.2015, 22:32 | Сообщение # 2414


Сообщений: 457
Награды: 6
Замечания: 0%
 
Ох, надеюсь, это хоть как-нибудь поможет

Добавлено (17.10.2015, 22:32)
---------------------------------------------
Ок, своим способом получилось разобраться, но теперь ещё вопрос. Как можно припарентить камеру к игроку, чтобы при поворотах она не крутилась, а только была на координатах игрока. Пробовал юзать en_plRelativeToParent, но камера дергается при повороте

- My Personal Site -
SLAwww Суббота, 17.10.2015, 23:30 | Сообщение # 2415


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
В смысле, чтобы угол поворота камеры не менялся? Ты можешь просто вручную выставлять его с каждым тиком движка (например, из той же ApplyAction).

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Суббота, 17.10.2015, 23:47 | Сообщение # 2416


Сообщений: 457
Награды: 6
Замечания: 0%
 
Именно так. Попробую.

Добавлено (17.10.2015, 23:47)
---------------------------------------------
Всё равно дёргается. Игрок движется плавно, а ApplyAction делается через какой-то промежуток времени. Или я как-то не так делаю. Пробовал SetPlacement, Teleport, всё так же

- My Personal Site -
SLAwww Воскресенье, 18.10.2015, 00:12 | Сообщение # 2417


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Попробуй делать это из функции рендеринга (RenderGameView) в самом начале.

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Воскресенье, 18.10.2015, 14:00 | Сообщение # 2418


Сообщений: 457
Награды: 6
Замечания: 0%
 
Вот теперь всё, спасибо. Весь день с этой мышью возился, а там такой простой способ был, я его наизусть запомнил

Добавлено (18.10.2015, 14:00)
---------------------------------------------
Естесна, когда всё хорошо, появляются баги. Окей, вопрос. Как можно направить угол обзора игрока (m_aLocalViewRotation?) на какие-либо координаты? (мне например нужно на координаты X и Z:
относительно игрока(1) + (координаты мыши(1) - 320) и
относительно игрока(3) + (координаты мыши(2) - 240) )
Использовал DirectionVectorToAngles, но чем дальше я от центра карты (0,0,0), тем больше прибавляется угол почему-то, и игрок смотрит уже не в сторону курсора, а с (отклонением+расстояние до центра)
P.S. координаты мыши(1) - X курсора на экране (от 0 до 640), координаты мыши(2) - Y курсора на экране (от 0 до 480)

- My Personal Site -
SLAwww Воскресенье, 18.10.2015, 15:18 | Сообщение # 2419


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Для начала убедись что твой метод расчёта игровых координат для курсора работает правильно. Телепортируй какой-нибудь маркер под курсор при каждом клике и посмотри, точно ли он попадает под курсор. Преобразование экранных координат в мировые - вообще сложная вещь, я с этим в ССО намучился.
Код
CEntity* EntityUnderCursor(CPlacement3D plViewer, FLOAT3D &o_vPos, int i_w, int i_h, CPlayer* i_player, int x, int y)
{
    // Get a world
    CWorld* world = i_player->GetWorld();
    
    // Turn a viewer's placement accordingly to the mouse coords

    // Some complicated math that has something to do with projections
    float FOV = _pShell->GetFLOAT("plr_fFOV");
    
    // At first, imagine the screen plane is 1m away
    // Now calculate physical dimensions of virtual screen rect
    float screenboxX = 2.0f * tan((FOV * PI) / 360.0f);
    float screenboxY = (screenboxX / (float)(i_w)) * (float)(i_h);

    // Transfer click point coords to screenbox space:
    float coordsX = ((float)x / (float)(i_w)) * screenboxX;
    float coordsY = ((float)((i_h) - y) / (float)(i_h)) * screenboxY;

    // Therefor, the base coords for virtual screen rect are:
    FLOAT3D vScreenBox((-screenboxX / 2.0f) + coordsX, (-screenboxY / 2.0f) + coordsY, -1.0f);

    // Convert the placement
    CPlacement3D plRayTarget(vScreenBox, ANGLE3D(0,0,0));
    plRayTarget.RelativeToAbsolute(plViewer);
    CPlacement3D plRaySource(plViewer.pl_PositionVector, ANGLE3D(0,0,0));
    plRayTarget.AbsoluteToRelative(plRaySource);
    plRayTarget.pl_PositionVector.Normalize();
    DirectionVectorToAnglesNoSnap(plRayTarget.pl_PositionVector, plViewer.pl_OrientationAngle);

    // Cast a ray
    CCastRay crRay(i_player, plViewer);
    crRay.cr_bHitTranslucentPortals = FALSE;
    crRay.cr_bPhysical = FALSE;
    crRay.cr_ttHitModels = CCastRay::TT_COLLISIONBOX;
    world->CastRay(crRay);

    o_vPos = crRay.cr_vHit;
    return crRay.cr_penHit;
}


Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Воскресенье, 18.10.2015, 15:35 | Сообщение # 2420


Сообщений: 457
Награды: 6
Замечания: 0%
 
Ну вообще в углу экрана у меня написаны координаты мыши, и всё правильно, с левого верхнего угла 0,0; снизу справа 640,480

Добавлено (18.10.2015, 15:35)
---------------------------------------------
И ещё по идее у меня не существует мыши в мире, она просто рисуется, и какая бы камера или вид не был активирован, всё от первого угла 0,0 до другого 640,480

- My Personal Site -
SLAwww Воскресенье, 18.10.2015, 15:59 | Сообщение # 2421


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Но игрок поворачивается к мировым координатам, а не к экранным. А я помогаю тебе только до тех пор, пока ты не начинаешь спорить. =/

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Воскресенье, 18.10.2015, 20:41 | Сообщение # 2422


Сообщений: 457
Награды: 6
Замечания: 0%
 
Извиняюсь, т.к. я только понял, что жестко ступил. Ведь я использовал координаты игрока+мышь, в то время как у мыши были координаты за двести

Добавлено (18.10.2015, 16:41)
---------------------------------------------

Цитата SLAwww ()
Преобразование экранных координат в мировые

Вот теперь я это понял

Добавлено (18.10.2015, 20:38)
---------------------------------------------
Блин, всё, не могу. Ничего не выходит. Ещё тот кусок кода не помогает. При том, что если я хочу создать ентити на курсоре - то всё норм (конечно, с отклонениями небольшими, но это всё работает, если делить координаты мыши на сколько-нибудь), а если те же координаты пытаюсь сунуть игроку, деля, не деля - всегда не относительно игрока, а относительно 0,0,0

Добавлено (18.10.2015, 20:41)
---------------------------------------------
А ещё можно заставить двигаться игрока не относительно своего поворота, а просто по X,Z? А то кроме en_vCurrentTranslationAbsolute ничего не знаю, но он баганный во многих местах

- My Personal Site -
SLAwww Воскресенье, 18.10.2015, 20:57 | Сообщение # 2423


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Он не баганный, просто ты не умеешь пользоваться. А игроку ты должен давать не конечные координаты, куда он должен идти, а скорость движения и поворота, которую нужно расчитывать исходя из координат цели.
А функция, которую я дал, гарантированно работает без всяких делений координат. Там есть аргументы: i_w и i_h - размеры DrawPort'a, x и y - координаты курсора. Ничего не нужно делить самому.


Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Понедельник, 19.10.2015, 00:14 | Сообщение # 2424


Сообщений: 457
Награды: 6
Замечания: 0%
 
Чооорд, может я что-то упускаю или просто туплю, но всё равно не понимаю как (даже с тем кодом) поворачивать игрока в сторону мыши, вид сверху вообще

Добавлено (19.10.2015, 00:14)
---------------------------------------------
Короче говоря, "сделайте за меня"

- My Personal Site -
SLAwww Понедельник, 19.10.2015, 01:20 | Сообщение # 2425


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Переведи мировые координаты курсора в локальную систему координат игрока. Если значение координаты Х после этого окажется положительным - поворачивай игрока вправо, если отрицательным - влево. Чтобы игрок не дёргался, когда смотрит ровно на точку, можно ввести какой-нибудь минимальное отклонение, после которого игрок начинает поворачиваться.

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Понедельник, 19.10.2015, 11:02 | Сообщение # 2426


Сообщений: 457
Награды: 6
Замечания: 0%
 
ГОСПОДИ, ОПЯТЬ! Опять та самая ситуация, когда ты упустил ТАКУЮ ВЕЩЬ, которую невозможно упустить.
Короче, в ту функцию в DirectionVectorToAngles я всунул vScreenbox.Normalize и ВСЁ ЗАРАБОТАЛО! КАК НАДО! И БЕЗ ОТКЛОНЕНИЙ!!! Правда, я ещё подфиксил всё, т.к. игрок поворачивался не за мышкой, а против неё и при приближении мышки ближе чем 1,1 мировых координат, игрок смотрел только прямо. Собстна, вот что я сделал:
Код
// Some complicated math that has something to do with projections
   float FOV = 90;
   int x,y,i_w,i_h;
   x = penThis->m_msPoint(1);
   y = penThis->m_msPoint(2);
   i_w = 640;
   i_h = 480;
   
   // At first, imagine the screen plane is 1m away
   // Now calculate physical dimensions of virtual screen rect
   float screenboxX = 2.0f * tan((FOV * PI) / 360.0f);
   float screenboxY = (screenboxX / (float)(i_w)) * (float)(i_h);
   
   // Transfer click point coords to screenbox space:
   float coordsX = ((float)x / (float)(i_w)) * screenboxX;
   float coordsY = ((float)((i_h) - y) / (float)(i_h)) * screenboxY;
   
   // Therefor, the base coords for virtual screen rect are:
   FLOAT3D vScreenBox((-screenboxX / 2.0f) + coordsX, 1.0f, -((-screenboxY / 2.0f) + coordsY));

   penThis->m_msPointFixed(1) = vScreenBox(1)*10; // world coords X
   penThis->m_msPointFixed(2) = vScreenBox(3)*10; // world coords Z
   
   // Convert the placement
   /*CPlacement3D plRayTarget(vScreenBox, ANGLE3D(0,0,0));
   plRayTarget.RelativeToAbsolute(penThis->GetPlacement());
   CPlacement3D plRaySource(penThis->GetPlacement().pl_PositionVector, ANGLE3D(0,0,0));
   plRayTarget.AbsoluteToRelative(plRaySource);
   plRayTarget.pl_PositionVector.Normalize();*/ // eto mne ne nuzno
   DirectionVectorToAnglesNoSnap((vScreenBox.Normalize())/10, penThis->m_aLocalRotation);
   DirectionVectorToAnglesNoSnap((vScreenBox.Normalize())/10, penThis->m_aLocalViewRotation);

И размер DrawPorta мне не важен, у меня при любом разрешении мышь в одном углу 0,0, а в другом 640,480

Добавлено (19.10.2015, 11:02)
---------------------------------------------
Хорошо, следующий бесящий баг. Как можно при столкновении с врагами/любыми ентити запретить игроку случайно повернуться? Иначе угол съезжает. Ещё такой баг есть при возрождении: прицел фиг знает где, а угол игрока 0, а не в сторону прицела

- My Personal Site -
SLAwww Понедельник, 19.10.2015, 14:53 | Сообщение # 2427


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Ты не "подфиксил", а опять сделал не так, как тебе сказали. Во-первых, координаты курсора в пределах 640х480 - бред, потому что никто сейчас не использует такое разрешение, а у тебя эти координаты записываются в INDEX, в результате теряется точность. Во-вторых, raycasting таки нужен, потому что игрок не всегда будет ходить по ровной поверхности с постоянной высотой. В-третьих, откуда мне знать, почему у твоего игрока угол не такой, как надо? Ты сам его так накодил. В-четвёртых, vScreenBox.Normalize())/10. Откуда взялось это 10? Что оно означает?

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
ST27 Понедельник, 19.10.2015, 15:12 | Сообщение # 2428


Сообщений: 457
Награды: 6
Замечания: 0%
 
Цитата SLAwww ()
координаты курсора в пределах 640х480 - бред, потому что никто сейчас не использует такое разрешение

Я не знаю, как оно так работает, но 640х480 максимальные точки - не пиксели экрана. Такой максимум при любом разрешении, даже при фулскрине, я всё тестил. Просто я мышь очень странным способом накодил, вот так и вышло.
Цитата SLAwww ()
игрок не всегда будет ходить по ровной поверхности с постоянной высотой

Может я опять как-то не так объяснил, но я пытаюсь создать эффект TDS, где высота игрока мне вообще не нужна, у меня игрок крутится только по оси "H"
Цитата SLAwww ()
vScreenBox.Normalize())/10. Откуда взялось это 10? Что оно означает?

Если не делить, то
Цитата STPROD ()
при приближении мышки ближе чем 1,1 мировых координат, игрок смотрел только прямо

Цитата SLAwww ()
у тебя эти координаты записываются в INDEX

В твою функцию это передается как int.
И да,
Цитата STPROD ()
Как можно при столкновении с врагами/любыми ентити запретить игроку случайно повернуться? Иначе угол съезжает.

Его угол по H сбивается, и мы начинаем крутить курсором так же, но +сдвиг. Я конечно знаю, как это пофиксить, но тогда ноги не будут вращаться в сторону мыши, а если сдвинуться - наплевать, тело всегда будет на мышь смотреть


- My Personal Site -
SLAwww Понедельник, 19.10.2015, 16:12 | Сообщение # 2429


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Цитата STPROD ()
я мышь очень странным способом накодил

Наговнокодил. Поищи, откуда берутся эти 640х480 и сделай так, чтобы цифры соответствовали реальному разрешению экрана. Ctrl-Shift-F-640.
Цитата STPROD ()
высота игрока мне вообще не нужна, у меня игрок крутится только по оси "H"

Все три координаты нужны, если ты проецируешь двухмерный курсор в трёхмерный мир.
Цитата STPROD ()
при приближении мышки ближе чем 1,1 мировых координат, игрок смотрел только прямо

Тогда это костыль. Нужно решить проблему, а не ставить заплатку, которая тебе потом отзовётся. Расставь CPrintF'ы и смотри, какие приходят значения, когда курсор вблизи игрока.
Цитата STPROD ()
В твою функцию это передается как int.

Потому что она принимала реальное разрешение DrawPort'a, а не взятые от балды 640х480.
Цитата STPROD ()
Я конечно знаю, как это пофиксить

Ага, переписать всё с нуля. И рассчитывать скорость поворота так, как я говорил.


Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
polymorn Пятница, 06.11.2015, 16:08 | Сообщение # 2430


Сообщений: 123
Награды: 15
Замечания: 0%
 
такой вопрос, как убрать из игры паузу? или же как сделать так, чтобы при паузе музыка тоже ставилась на паузу? предпочительней второе конечно, это же не слишком сложно?

Добавлено (06.11.2015, 16:08)
---------------------------------------------
решено, спасибо, SLAwww!

Форум » Serious Sam » Серьёзное редактирование » Помощь по SDK для Serious Sam 1.05/1.07 (Вопросы по комплекту средств разработки для Serious Sam 1.)
Поиск:

Статистика


Кто сегодня был