Author Topic: Sector 5  (Read 581 times)

0 Members and 1 Guest are viewing this topic.

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #15 on: January 31, 2018, 11:25:40 AM »
Привет всем.
Спасибо за тестирование.
Quote
У меня то ли баг, то ли фича, но нет курсора куда смотрит игрок.
Гм, вообще-то так задумано, чтоб целиться получше и самому.
Quote
Очень неудобно :(
Чтож, значит, такое впечатление может возникнуть у многих.
Добавлю обязательно курсор-прицел для ориентации, но уменьшу кучность стрельбы. Хотя, можно будет сделать уровни сложности..

Quote
Несколько мелочей:
Обязательно сделаем. Будет меню, где настройки можно глянуть, кое-что поменять. Все подряд пихать туда не будем, только самое основное: клавиши управления, громкость музыки и эффектов....
« Last Edit: January 31, 2018, 12:17:09 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #16 on: February 02, 2018, 01:09:52 PM »
Привет всем. Мелкое обновление. Сделал самый первый ролик, в котором говорится об открывшемся Портале и для группы Z ставится задача.

Всего роликов будет пока 3 или 4
1)Вводный (этот)
2)Подлет к цели (он есть в демке)
3)Прилет  подмоги/разгром противника (еще нет)
4)Финальный (тоже пока нет).

Думаю, достаточно. А там как пойдет..

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

Пока все, всем удачи во всем.
Под лежачий камень мы всегда успеем...

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #17 on: February 05, 2018, 11:44:47 PM »
Привет всем. Заставил себя чуть сдвинуть разработку проекта.

Что сделано:
-Появление боеприпасов на карте (сундучки с патронами от пехотинцев и базуки- от убитых гранатометчиков). Если враг был пустой, соответственно, ничего не появляется.

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

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

-Чуть изменено поведение врагов: при пустых "магазинах" враги разворачиваются и бегут к Порталу.
Гранотометчики теперь не просто тупо бьют в дрона, они могут подстрелить и главного героя, если он поблизости.
Если дрон "убит", весь напор придется принять главному герою. Что, впрочем, малоперспективно.

-Добавил  анимированный указатель-прицел. Пули ложатся в аккурат в указанную точку.

Пока как-то так. Всем удачи.
« Last Edit: February 05, 2018, 11:48:50 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #18 on: February 08, 2018, 12:09:06 AM »
Привет всем. Небольшое обновление.

Добавил режим "рукопашный": герой может бегать с ножом и наносить урон противнику.
Еще для финальных моментов  будет цветной дым из Портала, напоминающий фейерверк.

Появились парочка бредовых идей:
1) Добавить Монстров/сущностей/привидений, выскакивающих из Портала и нападающих на всех подряд
2) Добавить режим танкового сражения: мол, враг отчаялся овладеть Порталом силами пехоты и гранатометчиков, и подтянул один/или пару тяжелых танков или каких-нибудь самоходных установок.
Естественно, герой чудом должен захватить одну из них и в течении скажем, минуты, расстреливать напирающих, дымящих и лязгающих панцеров.

Может, я зря отвар из мухоморов принимал..... ;D
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 311
  • Reputation 25
  • Lokemundux Desco Domus Shaantitus
Re: Sector 5
« Reply #19 on: February 08, 2018, 11:52:12 AM »
Идея с монстрами мне понравилась. В целом выглядит очень занятно - декали там всякие, эффекты, заставки те же. Буду ждать нового демо.
Crudux Cruo!

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 865
  • Reputation 32
  • Game making is my hobby for life!
Re: Sector 5
« Reply #20 on: February 08, 2018, 07:31:29 PM »
Quote
Добавить режим танкового сражения: мол, враг отчаялся овладеть Порталом силами пехоты и гранатометчиков, и подтянул один/или пару тяжелых танков или каких-нибудь самоходных установок.
Ну, если это не хардкор, то лучше обычно дать игроку надежду на спасение.  :) Так интереснее.
Quote
Может, я зря отвар из мухоморов принимал...
Так что наверное не зря.  :D
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #21 on: February 13, 2018, 01:12:09 PM »
Привет всем. Решил чуть освежить тему.
Наступил критический момент. Код перевалил за  3000, особо ничего и не сделано, откуда столько?! Три дня занимался отловом багов. По мере усложнения взаимодействий между объектами мира появляются все новые проблемы. Будем решать...

Я развиваю по мере возможностей линию появления новых персонажей из Портала.
Пока это будут Драконы. Злые и огнедышащие.  Они будут появляться не сразу, ближе к развязке.
Реализовал целых две линии поведения драконов:
1) Выжидательно-оборонительная. Первые секунд 15-20 дракон летит подальше от Портала в случайном направлении. Чтобы не создавать массовку в центре экрана, потому как число драконов будет увеличиваться по мере их отстрела. Если его не трогать, дракон мирно висит на месте и машет крылышками. В противном случае (пострелять по нему)  рептилия будет перемещаться в строну выстрела, возможно, изредка выпускать пламя. Если настигнет игрока/бота- мгновенная гибель.

2) Нападающая. Если здоровье дракона пошатнулось (менее 200 из 1000), он начинает методично истреблять всех, начиная с самых ближних к нему, в конце концов доберется и до героя.

Убить не просто: урон от обычной пули: -5,  т.е. нужно попасть 200 раз. Вместе с ботами не  долго, но нужно все время следить и за собой: патроны, аптечки, расположение гранатометчиков и расположение ботов относительно Портала. Суетно, по моему...
Из гранатомета урон: -100. Получается, десять раз хватит. Сложность в том,  чтобы набрать столько снарядов. У все новеньких ботов  снарядом не более 5, до момента гибели часть боезапаса они успевают истратить, иногда и весь....

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

Демку пока выкладывать не буду, а то всем надоест раньше, чем наступит релиз  (если он наступит).
Под лежачий камень мы всегда успеем...

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 865
  • Reputation 32
  • Game making is my hobby for life!
Re: Sector 5
« Reply #22 on: February 13, 2018, 04:57:29 PM »
Ну, уже просматривается геймплей.

Quote
Наступил критический момент. Код перевалил за  3000, особо ничего и не сделано, откуда столько?! Три дня занимался отловом багов. По мере усложнения взаимодействий между объектами мира появляются все новые проблемы. Будем решать...
Пора задуматься об ООП, которое является одним из преимуществ С++ над ФБ. (Хотя и в ФБ ООП в какой-то степени реализован).
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #23 on: February 13, 2018, 05:37:03 PM »
Quote
Пора задуматься об ООП, которое является одним из преимуществ С++ над ФБ.
Это само собой. Иначе никак.
Каждый объект мира- отдельный класс. Например, вот мой класс дракона:

Code: [Select]
class Dragon
{
public:
    Dragon(wTexture* tex1,wTexture* tex2,wTexture* tex3,wTexture* tex4,wVector2i size0,wVector2f position0,wColor4s color0,wSound* lifeSound)
    {
        dSprite[0]=tex1;
        dSprite[1]=tex2;
        dSprite[2]=tex3;
        dSprite[3]=tex4;
        dLifeSound=lifeSound;
        position=position0;
        wColorFormat cFormat;
        UInt32 colorPitch;
        if(dSprite[0])
            wTextureGetInformation(dSprite[0],&dSize,&colorPitch,&cFormat);
        dScale.x=(Float32)size0.x/dSize.x;
        dScale.y=(Float32)size0.x/dSize.x;
        dColor=color0;
        dColor.alpha=150;
        lifeTime=(UInt32)wMathRandomRange(0,1000);
    }

    ~Dragon()
    {
        if(dLifeSound)
            wSoundStop(dLifeSound);
    }

    void moveTo()
    {
        position.x-=moveSpeed*sin(wMathDegToRad(angle));
        position.y-=moveSpeed*cos(wMathDegToRad(angle));
    }

    void setTargetAngle(wVector2f destPos)
    {
        Float32 tan;
        ///I четверть
        if((destPos.x>=position.x+dSize.x/2)&&(destPos.y<=position.y+dSize.y/2))
        {
           tan=((Float32)(destPos.x-position.x-dSize.x/2))/(Float32(-destPos.y+position.y+dSize.y/2));
           angle=-wMathRadToDeg(atan(tan));
        }
        ///II четверть
        if((destPos.x<=position.x+dSize.x/2)&&(destPos.y<=position.y+dSize.y/2))
        {
           tan=((Float32)(-destPos.x+position.x+dSize.x/2))/(Float32(-destPos.y+position.y+dSize.y/2));
           angle=wMathRadToDeg(atan(tan));
        }
        ///III четверть
        if((destPos.x<=position.x+dSize.x/2)&&(destPos.y>=position.y+dSize.y/2))
        {
            tan=((Float32)(-destPos.x+position.x+dSize.x/2))/(Float32(destPos.y-position.y-dSize.y/2));
            angle=180-wMathRadToDeg(atan(tan));
        }
        ///IV четверть
        if((destPos.x>=position.x+dSize.x/2)&&(destPos.y>=position.y+dSize.y/2))
        {
           tan=((Float32)(destPos.x-position.x-dSize.x/2))/(Float32(destPos.y-position.y-dSize.y/2));
           angle=180+wMathRadToDeg(atan(tan));
        }

        if((angle<=0)&&(angle>=-90))angle=360+angle;
    }

    void update()
    {
        lifeTime+=1;

        if(angle2>0)
            angle2-=1;
        else
            angle2+=1;

        if(!isAttackMode)
            targetTime+=1;

        if(lifeTime%20==0)
            index+=1;

        if(index>3)index=0;

        wVector2i tempPos;
        tempPos.x=wMathCeil(this->position.x);
        tempPos.y=wMathCeil(this->position.y);
        rotPoint.x=wMathCeil(position.x+dSize.x*dScale.x/2);
        rotPoint.y=wMathCeil(position.y+dSize.y*dScale.y/2);

         if(dSprite[index])
             wImageDrawAdvanced(dSprite[index],tempPos,rotPoint,angle+angle2,dScale,true,dColor);

         if(dLifeSound)
         {
             if((!wSoundIsPlaying(dLifeSound))&&(!wSoundIsStopped(dLifeSound)))
                wSoundPlay(dLifeSound,false);
         }
        wVector2i fromPos,toPos;
        swprintf(tmp,L"%s%d",L"H: ",(Int32)dHealth);
        wVector2u sText=wFontGetTextSize(wFontGetDefault(),tmp);
        fromPos.x=tempPos.x+5;
        fromPos.y=tempPos.y+5;
        toPos.x=fromPos.x+sText.x;
        toPos.y=fromPos.y+sText.y;
        wFontDraw(wFontGetDefault(),tmp,fromPos,toPos,wCOLOR4s_BLUE);

    }

    UInt32 index                =0;
    Float32 angle               =0;
    Float32 angle2              =0;
    wTexture* dSprite[4]        ={0};
    Float32 dHealth             =1000;
    Float32 moveSpeed           =0.2f;
    wVector2u dSize             =wVECTOR2u_ZERO;
    wVector2f dScale            =wVECTOR2f_ONE;
    wVector2f position          =wVECTOR2f_ZERO;
    wVector2i rotPoint          =wVECTOR2i_ZERO;
    UInt32 lifeTime             =0;
    Int32 reloadTime            =0;
    wColor4s dColor             =wCOLOR4s_WHITE;
    wSound* dLifeSound          =0;
    wchar_t tmp[256];

    Hero* target                =0;
    bool isAttackMode           =true;
    UInt32 targetTime             =0;
};

А вот процедура обновления всех драконов. Здесь вё, что они делают, за исключением взаимодействия с пулями (class Bullet), потому как этот момент описан в процедуре обновления пуль (здесь не привожу).
Code: [Select]
    void updateDragons()
    {
        ///Обновляем драконов
        UInt32 dCound=getDragonArraySize();
        if(dCound==0) return;

        for(Int32 i=0;i<dCound;++i)
        {
            Dragon* d=getDragon(i);
            d->update();

            if(d->dHealth<0)
                d->dHealth=0;

            ///Взаимодействие дракон-игроки
            for(Int32 i=0;i<getHeroesArraySize();++i)
            {
                Hero* h=getHero(i);
                if(isDHIntersect(d,h))
                {

                    //h->health=0;
                    if(h->isBot)
                    {
                        if(damageBot)
                            h->health=0;
                    }
                    else
                    {
                        if(damagePlayer)
                            h->health=0;
                    }

                    if(h->health==0)
                    {
                        if(h==d->target)
                        d->target=0;
                    }
                }
            }
            ///Если здоровье дракона <=300, включаем агрессивный режим
            if(d->dHealth>0&&d->dHealth<=300)
            {
                d->isAttackMode=true;
                d->moveSpeed=0.4f;
                if(d->lifeTime%20==0)
                    generateSmoke(d->position,false,wCOLOR4s_DARKORANGE);
            }
            wVector2f targetPos;
            ///В самом начале появления дракон просто летит перед собой
            if(d->lifeTime<600)
                d->moveTo();
            else
            {
                //Если включен режим нападения- ищет ближнего героя и нападает
                if(d->isAttackMode)
                {
                    Hero* h=getMinHero(d->position);
                    if(h)
                        d->setTargetAngle(h->position);
                    else
                        d->setTargetAngle(portalPosition);

                    d->moveTo();
                }
                //оборонительная позиция- нападаем только на тех, чья пуля попала в дракона
                else
                {
                    if(d->targetTime>1000)
                    {
                        if(d->target)
                        {
                            Hero* temp=d->target;
                            if(!temp->isBomber)
                                d->target=0;
                        }
                    }
                       if(d->target)
                    {
                        d->setTargetAngle(d->target->position);
                        d->moveTo();
                    }
                }
            }

              ///Умирание дракона
            if(d->dHealth==0)
            {
                deadDragonsCount+=1;
                if(dragonDeadSound)
                {
                    if(!wSoundIsPlaying(dragonDeadSound))
                        wSoundPlay(dragonDeadSound,false);
                }
                removeDragon(d);
                dCound=getDragonArraySize();
            }
        }
    }
« Last Edit: February 13, 2018, 05:42:30 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 865
  • Reputation 32
  • Game making is my hobby for life!
Re: Sector 5
« Reply #24 on: February 13, 2018, 05:53:38 PM »
Хм, впечатляет.  :)
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #25 on: February 16, 2018, 08:24:33 PM »
Привет всем. Поведаю о том, что сделано в проекте. Сделано немного, времени мало.
Решил не углубляться в дальнейший сюжет. Остановимся пока на драконах ближе к финалу.

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

Далее решил взяться за меню.  Основные контролы- кнопки. Решил сделать свои контролы, затягивающий процесс. В прошлый раз, когда задумал сделать игру, давно уже, эта затея вылилась в итоге в это  :D  Не напороться бы на те же грабли......

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

На этом все, всем удачи.

PS. После того, как доделаю меню, наверное, займусь звуками. Дело в том, что WS3D не умеет грузить звуковые файлы из архивов. Нужно что-то придумать. Как вариант, можно попробовать либо прикрутить к звуковому движку работу с архивами, либо организовать загрузку в память и научить движок проигрывать прямо из области памяти. Посмотрим, что из этого выйдет.
« Last Edit: February 17, 2018, 09:00:28 AM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 311
  • Reputation 25
  • Lokemundux Desco Domus Shaantitus
Re: Sector 5
« Reply #26 on: February 18, 2018, 12:18:56 PM »

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


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

Crudux Cruo!

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 865
  • Reputation 32
  • Game making is my hobby for life!
Re: Sector 5
« Reply #27 on: February 18, 2018, 04:43:47 PM »
Меню нравится простотой. Хороший фон подобрал, в тему.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Viscount
  • *
  • Posts: 768
  • Reputation 51
Re: Sector 5
« Reply #28 on: February 25, 2018, 02:13:23 PM »
Привет всем. Просьба- протестировать демку.   Интересует особенно мнение по вопросам:

1)Нужен ли еще какой-то ролик вступления в начале, или какие-то пояснения?

2)Игра рассчитана на полный экран. Нужны ли настройки графики в меню?  Сейчас их нет.
Заметил, что если на экране снизу какой-нибудь активное окошко (у меня, например download master)- при щелчке ЛКМ в этом месте окно игры может свернуться.

3)Реальный ли уровень сложности? Нужно труднее/легче?

4)Все настройки в игре не сохраняются при выходе. Там их немного, считаю излишним. Может, не прав?

5)Наблюдаются ли вылеты?

6)В игре предусмотрены чит-коды: бесконечные патроны, бесконечная жизнь. При желании дам для тестирования. У меня, например, с чит-кодами иногда наблюдаются вылеты.

7)Что нужно изменить/убрать/добавить, если таковое есть.

Это не окончательная версия еще, нет финального ролика. Никак не могу себя заставить его сделать. :-[

Заранее благодарю всех тестеров.   Да, еще: звуки уже загружаются прямо из архива. Вроде норм.

PS.  Так как заниматься проектом получается урывками, интерес стал угасать. Вот поэтому не спешу браться за большой проект, боюсь, не дотяну до финиша. Печальный опыт имеется...
« Last Edit: February 25, 2018, 04:09:07 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 311
  • Reputation 25
  • Lokemundux Desco Domus Shaantitus
Re: Sector 5
« Reply #29 on: February 25, 2018, 04:11:29 PM »
Привет. Поиграл два раунда. Оба раза скончался на появлении гранатометчиков где-то на 150-ой секунде.
Очень понравилось обилие частиц и эффекты, как в самой игре, так и в меню.
Не понравилось, что для стрельбы очередью надо быстро тыркать мышью, а не удерживать кнопку.
Чертовски сложно. Квадрокоптер, похоже, получает урон и от попаданий в него игрока?
Вылетов не было. В первом ролике у вертолета какой-то раздражающий звук треска. У меня аж кот испугался и убежал из комнаты.
Crudux Cruo!