Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Начнём с модинга в NeoAxis?
GAMEINATOR forums > Общие разделы > Создание и модификация игр. Геймдев.
Diesel
Движок созданный Казанским программистом Иваном Ефимовым в далёкие 2000e годы. Движок постоянно дорабатывался, вплоть до 2016 года, после чего движок был заморожен (возможно отключён от поддержки, бесплатных версий).
На движок как известно, существует несколько типов лицензий. http://www.neoaxis.com/neoaxis/licensing
На данный момент, более интересна бесплатная лицензия, как таковая.
В бесплатной лицензии, запрещается использовать нелицензионный контент, для коммерческих проектов. Но нам для модинга, не обязательно, спрашивать хозяина движка, о разрешении. Представьте на минутку игру Спин Тирес и его моды ( как то фиолетово всем до легальности контента).

Я предлагаю (раз тут много фанатов сталкера), начать проект с моделей и геометрии GSC (опять мы упираемся в лицензию GSC - опять фиолетово, для приличия мы закинем текст лицензии GSC в движок neoaxis, дабы соблюсти закон).



Я уже несколько раз пытался начать в одиночку делать проекты, но не хватало мозгов и времени, и еще команды единомышленников.
Вот тут было кое-что https://vk.com/neoaxis.game
Очень много насобирал хлама: https://yadi.sk/d/pmyFAs4q3QT59X
У меня есть желание, всё сделать заново.
Diesel
Изначально, я выбрал этот движок именно за возможность реализации танков.

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

Молния в вакууме
Цитата
Я пишу свой движок

Да, моя поделка иногда ещё откапывается, пинается и закапывается обратно. Прикрутил таки генератор лабиринтов к нему:


Сначала написал на C, потом вспомнил, для чего мне джаваскрипт и добавил возможность создавать модели скриптами. Как-то так:
+
Код
(function ()
{
    // generate labyrinth
    var WIDTH = 61, HEIGHT = 61;
    var labyrinth = new Array(HEIGHT);
    var i, j;
    
    for(i = 0; i < HEIGHT; i++)
    {
        labyrinth[i] = new Array(WIDTH);
        for(j = 0; j < WIDTH; j++)
            labyrinth[i][j] = '#';
    }

    function excavate(x, y)
    {
        labyrinth[y][x] = ' ';

        var rnd = Math.floor(Math.random() * 4);
        for(var i = 0; i < 4; i++)
        {
            switch((rnd + i) % 4)
            {
                case 0: // top
                    if(y > 2 && labyrinth[y-2][x] === '#')
                    {
                        labyrinth[y-1][x] = ' ';
                        excavate(x, y-2);
                    }
                break;
    
                case 1: // right
                    if(x < WIDTH-2 && labyrinth[y][x+2] === '#')
                    {
                        labyrinth[y][x+1] = ' ';
                        excavate(x+2, y);
                    }
                break;
    
                case 2: // down
                    if(y < HEIGHT-2 && labyrinth[y+2][x] === '#')
                    {
                        labyrinth[y+1][x] = ' ';
                        excavate(x, y+2);
                    }
                break;
    
                case 3: // left
                    if(x > 2 && labyrinth[y][x-2] === '#')
                    {
                        labyrinth[y][x-1] = ' ';
                        excavate(x-2, y);
                    }
                break;
            }
        }
    }

    excavate(1, 1);

    for(i = 0; i < HEIGHT; i++)
    {
        var str = '';
        for(j = 0; j < WIDTH; j++)
            str = str + labyrinth[i][j];

        print(str);
    }
        
    // make visual
    var CELL_SIZE = 2.0;
    
    var vd = { // visual desc
        ceil: {
            textures        : ["laby\\laby_ceil"],
            blender            : "default",
            primitive_type    : Visual.PT_QUAD_LIST,

            vertex_format    : Visual.VF_POSITION|Visual.VF_NORMAL|Visual.VF_TEXCOORD,
            vertices        : []
        },
        floor: {
            textures        : ["laby\\laby_sand"],
            blender            : "default",
            primitive_type    : Visual.PT_QUAD_LIST,

            vertex_format    : Visual.VF_POSITION|Visual.VF_NORMAL|Visual.VF_TEXCOORD,
            vertices        : []
        },
        walls: {
            textures        : ["laby\\laby_brick"],
            blender            : "default",
            primitive_type    : Visual.PT_QUAD_LIST,

            vertex_format    : Visual.VF_POSITION|Visual.VF_NORMAL|Visual.VF_TEXCOORD,
            vertices        : []
        }
    };

    // refs
    var v_ceil = vd.ceil.vertices, v_floor = vd.floor.vertices, v_walls = vd.walls.vertices;

    for(i = 1; i < HEIGHT-1; i++)
    {
        for(j = 1; j < WIDTH-1; j++)
        {
            if(labyrinth[i][j] === '#')
                continue;

            v_ceil.push({ point: [j*CELL_SIZE, CELL_SIZE, i*CELL_SIZE], normal: [0, -1, 0], tc: [0, 0] });
            v_ceil.push({ point: [(j+1)*CELL_SIZE, CELL_SIZE, i*CELL_SIZE], normal: [0, -1, 0], tc: [1, 0] });
            v_ceil.push({ point: [(j+1)*CELL_SIZE, CELL_SIZE, (i+1)*CELL_SIZE], normal: [0, -1, 0], tc: [1, 1] });
            v_ceil.push({ point: [j*CELL_SIZE, CELL_SIZE, (i+1)*CELL_SIZE], normal: [0, -1, 0], tc: [0, 1] });

            v_floor.push({ point: [j*CELL_SIZE, 0, (i+1)*CELL_SIZE], normal: [0, 1, 0], tc: [0, 1] });
            v_floor.push({ point: [(j+1)*CELL_SIZE, 0, (i+1)*CELL_SIZE], normal: [0, 1, 0], tc: [1, 1] });
            v_floor.push({ point: [(j+1)*CELL_SIZE, 0, i*CELL_SIZE], normal: [0, 1, 0], tc: [1, 0] });
            v_floor.push({ point: [j*CELL_SIZE, 0, i*CELL_SIZE], normal: [0, 1, 0], tc: [0, 0] });

            if(labyrinth[i][j-1] === '#')
            {
                v_walls.push({ point: [j*CELL_SIZE, CELL_SIZE, i*CELL_SIZE], normal: [1, 0, 0], tc: [0, 0] });
                v_walls.push({ point: [j*CELL_SIZE, CELL_SIZE, (i+1)*CELL_SIZE], normal: [1, 0, 0], tc: [1, 0] });
                v_walls.push({ point: [j*CELL_SIZE, 0, (i+1)*CELL_SIZE], normal: [1, 0, 0], tc: [1, 1] });
                v_walls.push({ point: [j*CELL_SIZE, 0, i*CELL_SIZE], normal: [1, 0, 0], tc: [0, 1] });    
            }

            if(labyrinth[i][j+1] === '#')
            {
                v_walls.push({ point: [(j+1)*CELL_SIZE, CELL_SIZE, (i+1)*CELL_SIZE], normal: [-1, 0, 0], tc: [1, 0] });
                v_walls.push({ point: [(j+1)*CELL_SIZE, CELL_SIZE, i*CELL_SIZE], normal: [-1, 0, 0], tc: [0, 0] });
                v_walls.push({ point: [(j+1)*CELL_SIZE, 0, i*CELL_SIZE], normal: [-1, 0, 0], tc: [0, 1] });
                v_walls.push({ point: [(j+1)*CELL_SIZE, 0, (i+1)*CELL_SIZE], normal: [-1, 0, 0], tc: [1, 1] });    
            }

            if(labyrinth[i-1][j] === '#')
            {
                v_walls.push({ point: [(j+1)*CELL_SIZE, CELL_SIZE, i*CELL_SIZE], normal: [0, 0, 1], tc: [1, 0] });
                v_walls.push({ point: [j*CELL_SIZE, CELL_SIZE, i*CELL_SIZE], normal: [0, 0, 1], tc: [0, 0] });
                v_walls.push({ point: [j*CELL_SIZE, 0, i*CELL_SIZE], normal: [0, 0, 1], tc: [0, 1] });
                v_walls.push({ point: [(j+1)*CELL_SIZE, 0, i*CELL_SIZE], normal: [0, 0, 1], tc: [1, 1] });    
            }

            if(labyrinth[i+1][j] === '#')
            {
                v_walls.push({ point: [j*CELL_SIZE, CELL_SIZE, (i+1)*CELL_SIZE], normal: [0, 0, -1], tc: [1, 0] });
                v_walls.push({ point: [(j+1)*CELL_SIZE, CELL_SIZE, (i+1)*CELL_SIZE], normal: [0, 0, -1], tc: [0, 0] });
                v_walls.push({ point: [(j+1)*CELL_SIZE, 0, (i+1)*CELL_SIZE], normal: [0, 0, -1], tc: [0, 1] });
                v_walls.push({ point: [j*CELL_SIZE, 0, (i+1)*CELL_SIZE], normal: [0, 0, -1], tc: [1, 1] });    
            }
        }
    }

    new Visual('?maze', vd);
})();

Потом просто добавляем любой объект с моделью ?maze на сцену и всё.
Diesel
Цитата(saas @ 23.12.2017, 22:46) *
Потом просто добавляем любой объект с моделью ?maze на сцену и всё.

В neoaxis добавляется модель через эдитор. Это более менее лёгкий, удобный и точный способ.
Но я могу добавить модель блокнотом, через конфиг локации. Этот движок, не удобен только компилятором скриптов и логики, остальное - легкотня. После x-ray, я чувствую себя, что пересевшим на импортный автопром, как после лада-калина.
Молния в вакууме
andreyholkin, это немного не то. Прикол в том что модель скриптом создаётся(случайная), а не загружается из ресурсов.
Diesel
Цитата(saas @ 24.12.2017, 01:26) *
andreyholkin, это немного не то. Прикол в том что модель скриптом создаётся(случайная), а не загружается из ресурсов.

Понял, это типа автоматической генерации геометрии.
StUnDeR
Цитата(andreyholkin @ 23.12.2017, 18:37) *
Изначально, я выбрал этот движок именно за возможность реализации танков.

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


Неоаксис это супер-древний движок, который году в 2010 уже не актуален был. Выбирать двиг только из-за реализации танков - глупое решение. Есть UE4, с довольно хорошим порогом вхождения, бесплатный, с открытым исходным кодом, обширным комьюнити, поддержкой от разработчиков на ансверхабе, реализовать можно все что в голову придет.
Вот тебе пример танка на там же анриале


Цитата(andreyholkin @ 23.12.2017, 22:46) *
Цитата(saas @ 23.12.2017, 22:46) *
Потом просто добавляем любой объект с моделью ?maze на сцену и всё.

В neoaxis добавляется модель через эдитор. Это более менее лёгкий, удобный и точный способ.
Но я могу добавить модель блокнотом, через конфиг локации. Этот движок, не удобен только компилятором скриптов и логики, остальное - легкотня. После x-ray, я чувствую себя, что пересевшим на импортный автопром, как после лада-калина.

А после пересаживания на нормальный движок, ты будешь себя чувствовать как-будто с запорожца на теслу пересел
Diesel
Цитата(StUnDeR @ 24.12.2017, 02:11) *
А после пересаживания на нормальный движок, ты будешь себя чувствовать как-будто с запорожца на теслу пересел

Я могу конечно и в UE4 ломануться, благо комп его кое - как тянет. Но он доболе прожорлив, даже если применить всю имеющуюся оптимизацию. Я делал замеры производительности без оптимизации у Neo и UE4 - нео немного победил.
Diesel
Спору нет, UE4 - это круто.


Это перспектива. Первым делом надо Блендер освоить, так как Макс материально не потянуть. Это да.

RedMagic
Изучайте Unity и будет вам счастье. Для инди/моддинга - самое то. И блендер тоже.

QuickStart:



Книга "Основы Блендера" (pdf, 53mb). Распространяется по лицензии CC BY-NC-SA 4.0.
Diesel
Цитата(RedMagic @ 24.12.2017, 12:31) *
Изучайте Unity и будет вам счастье.


Есть такой вариант. Сейчас заснял видос, прям свежачок.
ElviN_747
Все ещё занимаетесь сталкером в NA?
Ghosthalid
Всем привет! Ребята! Срочно нужна помощь.. При подготовке конечного проекта, и при запуске игры на нажатие "Играть" идёт загрузка, а потом вылет с ошибкой о не скомпилированного скрипта на нужной карте в редакторе логике. Хотя я не нечего не понял... Как скомпилировать скрипт в редакторе логике? Что делать? Пожалуйста!
Diesel
Ghosthalid, https://vk.com/neoaxisengine
Можно в ВК спросить - народ уже мало где собирается под этот движок. Смерть Нео - актуально.
Diesel
Цитата(andreyholkin @ 23.06.2018, 19:07) *
Смерть Нео - актуально.


А что все молчат, что НеоАксис воскрес? В апреле вышла новая версия.

...пока писал - вышла очередная 1.6 версия. Что то часто абгрейдят двиг.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.