Каждая вещь есть в точности то, что она есть, по какой-то причине. Крошка на твоем столе – это не мистическое напоминание об утреннем печенье; она лежит там потому, что твой выбор – не убирать ее. Исключений нет.
Если заниматься созданием игры, то одними программистами не обойдёшься, тут нужна команда, и моделлеры туда относятся, и про фотошоп мы конечно не забываем ))),
А именно дизайндоки скрины модели скетчи и тому подобное. Я знаю, что они у вас имеются. Не стесняемся товарищи
Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь. Он не стремится осчастливить всех - только лишь желающих. Идейки-то, идейки куда девать? Где начало того конца, которым оканчивается начало? А? Раньше меня мучили разные вопросы. А теперь мучают разные ответы!
Мы с Cheko представляем здесь свежую команду, занятую в разработке игр. Я - программист, пишу код как игры, так и движка, на котором она базируется. Могу предоставить некоторые образцы кода для обучения, и для того, чтобы развеять дымку таинственности и загадочности над этими громкими двумя словами "игровой движок". Что делает игровой движок в принципе, с чего его написание идет, и как все его компоненты объединяются в единое целое, да так, что он работает в результате, и выдает картинку - не каждый думает, и не каждый спрашивает. Unreal - NewType (Symphonic)
да я думаю тебе стоит выложить, описание и примеры кода, так как не все работали с ИГРОВЫМИ движками, а желание помоч есть )) я надеюсь sqare pantes завоюет вселенную
Сообщение отредактировал Cheko - Воскресенье, 11.01.2009, 18:06:54
ИМПЕРАТОР - Сравнение Сил отложен ввиду наличия мирового финансового кризиса. То есть - цены на новое железо отнюдь не упадут, а зарплаты у людей не станут больше. Вполне вероятно, что процент игроков, способных позволить себе запустить на ПК игру с такой динамичностью, тоже не вырастет.
РАСКОЛ - был отложен намного раньше по схожим причинам, но только там идет погоня за использованием технологии, которая станет в играх доступна не ранее 2010-ого года. То есть - с честным расчетом освещения.
И сейчас мы работаем над парой небольших вещей. Технологическая демонстрация двигателя Progress 0 в стиле игр X-COM, и игра, аркадный экшен, схожий с BloodRayne - Вечность, он же Futura Temprera.
По коду - скажу сразу, что у меня наличествуют несколько извращенные понятия о программировании, которые, тем не менее, позволяют писать код достаточно грамотно, не совершая ошибок.
Например, на днях, я занялся упрощением математики в движке (проще расчеты - меньше процессорного времени на это надо, и, соответственно, выше производительность):
ЗАГОЛОВОК
Code
/*=========================================================================== PROGRESS ENGINE - Версия для игры "ВЕЧНОСТЬ"
math9_vector2.h - двумерный вектор
АВТОР: Amon Ra Copyright: Infinitation Studio (c) 2001-2009 ===========================================================================*/
#ifndef MATH9_VECTOR2_H #define MATH9_VECTOR2_H
/**************************************************************************** Вектор о двух измерениях (может быть важно для реализации меню, и подобных ему вещей) ****************************************************************************/
#include "math9.h"
/**************************************************************************** Класс двумерного вектора Vector2 ****************************************************************************/
class isVector2 { public: //Все члены класса публичны по умолчанию
//======================================================================= // Данные вектора - переменные x и y //=======================================================================
eFxp const float operator[]( int index ) const { return (&x)[ index ]; }
eFxp float operator[]( int index ) { return (&x)[ index ]; }
//======================================================================= // Операции с флоатами //=======================================================================
eFxp isVector2 operator+ ( float tVar ) const //Складываем с флоатом { return isVector2( x + tVar, y + tVar ); //X и Y складываем по одиночке с флоатом, результат возвращаем в виде вектора }
eFxp isVector2 operator- ( float tVar ) const //Из вектора вычитаем флоат { return isVector2( x - tVar, y - tVar ); //Из X и Y вычитаем флоат, результат возвращаем в виде вектора }
eFxp isVector2 operator* ( float tVar ) const //Умножаем вектор на флоат { return isVector2( x * tVar, y * tVar ); //X и Y умножаем по одиночке на флоат, результат возвращаем в виде вектора }
eFxp isVector2 operator/ ( float tVar ) const //Делим вектор на флоат { return isVector2( x / tVar, y / tVar ); //X и Y делим по одиночке на флоат, результат возвращаем в виде вектора }
//
eFxp isVector2 operator*=( const float tVar ) { return isVector2( x *= tVar, y *= tVar ); }
eFxp isVector2 operator/=( const float tVar ) { return isVector2( x /= tVar, y /= tVar ); }
eFxp isVector2 operator+=( const float tVar ) { return isVector2( x += tVar, y += tVar ); }
eFxp isVector2 operator-=( const float tVar ) { return isVector2( x -= tVar, y -= tVar ); }
//======================================================================= // Операции с другими двумерными векторами //=======================================================================
eFxp isVector2 operator+ ( isVector2& tVec ) const { return isVector2( x + tVec.x, y + tVec.y ); //Складываем два вектора по элементам }
eFxp isVector2 operator- ( isVector2& tVec ) const { return isVector2( x - tVec.x, y - tVec.y ); //Вычитаем два вектора по элементам }
eFxp isVector2 operator* ( isVector2& tVec ) const { return isVector2( x * tVec.x, y * tVec.y ); //Умножаем поэлементно два вектора }
eFxp isVector2 operator*=( const isVector2& tVec ) { return isVector2( x *= tVec.x, y *= tVec.y ); }
eFxp isVector2 operator/=( const isVector2& tVec ) { return isVector2( x /= tVec.x, y /= tVec.y ); }
eFxp isVector2 operator+=( const isVector2& tVec ) { return isVector2( x += tVec.x, y += tVec.y ); }
eFxp isVector2 operator-=( const isVector2& tVec ) { return isVector2( x -= tVec.x, y -= tVec.y ); }
//======================================================================= // Операции другого типа //=======================================================================
eFxp float operator* ( const isVector2& tVec ) const { return x * tVec.x + y * tVec.y; }
//======================================================================= // Операции над самим собой //=======================================================================
/*=========================================================================== Конец файла ===========================================================================*/
#endif
ИСХОДНЫЙ КОД
Code
/*=========================================================================== PROGRESS ENGINE - Версия для игры "ВЕЧНОСТЬ"
math9_vector2.cpp - двумерный вектор
АВТОР: Amon Ra Copyright: Infinitation Studio (c) 2001-2009 ===========================================================================*/
#include "math9_vector2.h"
//=========================================================================== // Скалярное произведение векторов //===========================================================================
//=========================================================================== // Длина вектора //===========================================================================
eFxp float isVector2::Lenght(isVector2 &tVec) const { return sqrt( x * x + y * y ); }
//=========================================================================== // Длина вектора в квадрате //===========================================================================
eFxp float isVector2::LenghtSquared(isVector2 &tVec) const { return x * x + y * y; }
//=========================================================================== // Получаем значения вектора //===========================================================================
eFxp void isVector2::Get(isVector2 &tVec) { x = tVec.x; y = tVec.y; }
eFxp float isVector2::Normalize() { float OneOverDist, Dist; Dist = sqrt( x * x + y * y );
if (Dist == 0.0) return 0.0f; OneOverDist = 1.0f/Dist;
x *= OneOverDist; y *= OneOverDist; return Dist; }
//=========================================================================== // Изменение размеров вектора //===========================================================================
//=========================================================================== // Второе изменение размеров вектора //===========================================================================
//=========================================================================== // Сложение со скалируемым векторов второе //===========================================================================
//=========================================================================== // Расстояние между векторами //===========================================================================
//=========================================================================== // Конец файла //===========================================================================
В процессе написания, ( у меня самого возникло немало вопросов, что там делает деление, например ) я сильно упростил все расчеты, и даже открыл плацдарм для совершенно новых операций с двумерным вектором. Наличие преобразования двумерного в трехмерный вектор, позволяет, например, отслеживая, координаты мыши на экране, и передавая их в двумерный вектор, напрямую взаимодействовать с трехмерными объектами, находящимися на разной глубине сцены.
Каждый раз подразумевается, что Y и X - это высота и ширина сцены, а Z - глубина. При этом, мы можем как угодно крутить-вертеть эту систему, но направление Z всегда останется таким.
Добавлено (11.01.2009, 18:37) --------------------------------------------- О происхождении загадочного eFxp:
Code
/*=========================================================================== PROGRESS ENGINE - Версия для игры "ВЕЧНОСТЬ"
basevars.h - базовые предобъявления и типы
АВТОР: Amon Ra Copyright: Infinitation Studio (c) 2001-2009 ===========================================================================*/
typedef signed long int32; typedef signed short int16; typedef signed char int8 ;
typedef unsigned long uint32; typedef unsigned short uint16; typedef unsigned char uint8 ;
//=========================================================================== // Конец файла //=========================================================================== #endif
eFxp означает - Eternity's ForceInline dll eXPort.
Приставка is означает - Infinitation Studio, как бы намекая на команду-разработчика. И все это целиком не может опубликоваться даже на родном для нас ресурсе - http:\\infinitation.ucoz.ru. Всю работу мы ведем в скрытых разделах форума. Для оживления обстановки, не так давно, мы вживили на форум специального бота, который всегда готов к общению с посетителями. Просто потому, что долгое время мы искали ресурс, где можно было бы безопасно говорить о столь мелких, и малоизвестных деталях разработки своих проектов.
Если пишешь код, используй и тег CODE, а не курсив.
Тыкс. Если что вам помощь от меня понадобится, пишите. Но сразу скажу, я программирую преимущественно на VB(да, том самом который многие программисты, особенно пишущие на Си и подобных ему языках, сильно не уважают) и в некоторой степени на Delphi(на нём в ВУЗе программировал, и вполне успешно, однако лично я сам свои знания языка оцениваю как удовлетворительные).
Quote (Amon_Ra)
По коду - скажу сразу, что у меня наличествуют несколько извращенные понятия о программировании, которые, тем не менее, позволяют писать код достаточно грамотно, не совершая ошибок.
Аналогично. Я кстати при просмотре примеров временами замечаю мелкие, но тем не менее значимые ошибки. Миры глюками полнятся...
Небольшая мини-затравка, пока готовится игра Вечность. Один из первых кадров будущего ролика игры.
Этот кадр относится к лого, рендереному в максе. Просчет этого кадра занял примерно 3 часа. Попутно готовится демонстрационное видео.
Вариантов того, что в ролике будет демонстрироваться, несколько:
1. Эпизод со зловещим городком и железной дорогой. 2. Эпизод с ледоколом в Антарктике. 3. Нью-Йорк будущего. 4. Объект Futura Temprera, достопримечательность игры.
В трех случаях из четырех перечисленных, следует красивая концовка, вместе с тем, далекая от поэзии.
Вариантов того, что в ролике будет демонстрироваться, несколько:
1. Эпизод со зловещим городком и железной дорогой. 2. Эпизод с ледоколом в Антарктике. 3. Нью-Йорк будущего. 4. Объект Futura Temprera, достопримечательность игры.
А может лучше поочерёдно все варианты?
P.S. И очень прошу, не вставлять такие огромные картинки через IMG тег, лучше просто ссылкой. Эт так, на будущее, пока пусть так стоит.
Хотели отличиться по части игры, получается пока по части мода X-COM: Enforcer - Source.
Страничка мода на Mods Data Base - http://www.moddb.com/mods/x-com-enforcer-source Конкретно меня удивляют столь восторженные отзывы американцев о модификации, я так опасался худшего, что невольно даже ожидал плохих отзывов.
Не плохо, но помоему стоит поработать с волосами, а то выглядят они.... не совсем как волосы. Да и вообще моделька смотрится как-то резиново, если добавить ей некой детализации, будет замечательно. Миры глюками полнятся...
Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь. Он не стремится осчастливить всех - только лишь желающих. Идейки-то, идейки куда девать? Где начало того конца, которым оканчивается начало? А? Раньше меня мучили разные вопросы. А теперь мучают разные ответы!
Не плохо, но как-то всётаки слабовато в чём-то... Может быть потому что мне показалось оно каким-то незавершённым... В самом конце наверное стоит сделать какую нибудь вспышку, или наоборот угасание... Возможно стоит посильнее "покрутить" изображение. Миры глюками полнятся...
Вспышка в конце есть, оно так и задумано. Однако, вспышка будет как переход от одного кадра к другому, когда после лого команды запустится ролик. Unreal - NewType (Symphonic)
Хм. Именно в конце не заметил, ближе ко второй трети есть, а в конце не заметил. А что это будет переходом, как бы подразумивается и так вроде Миры глюками полнятся...
Больше там, собственно, и нечего показывать - только ее. Конечно, всегда можно попробовать сделать продолжение ролика, или даже ремейк, но там уже все по-другому будет. Unreal - NewType (Symphonic)
Моделер, сделавший эту модель, сможет возобновить свою работу, лишь спустя год... если захочет конечно Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь. Он не стремится осчастливить всех - только лишь желающих. Идейки-то, идейки куда девать? Где начало того конца, которым оканчивается начало? А? Раньше меня мучили разные вопросы. А теперь мучают разные ответы!
Aireon Я в курсе. Что же, пожелаем Cheko дополнительно удачи, чтобы он вернулся из армии без ран, полученных в бою подушками. А если серьезно - в армии, действительно, есть о чем беспокоиться, в наше нелегкое время, особенно, по поводу возможной войны. Unreal - NewType (Symphonic)
Совсем кратко - армия это несмертельно, но там нечего делать.
Менее кратко - армия (на данный момент) не смертельна и даже не травмоопасна. Армия это в первую очередь тотальное, абсурдное однообразие и обеднённость в окружающей обстановке, в действиях, в людях, в предметах, во всём. Армия это постоянное, ежеминутное, глубокое одиночество. Армия это изоляция. Армия это стирание всех внешних моральных и физических признаков индивидуальности. Армия это одиночество в обмен на сохранение внутренних признаков индивидуальности. Армия это постоянное ожидание. Армия это масса, прорва времени на размышления о смысле собственного существования. Армия заставляет, как никогда, почувствовать ценность гражданской жизни и бытовых мелочей.
Исключения:
Дегенераты, находящие высшее удовольствие в свободе от любых черт индивидуальности, от любой ответственности, от принятия решений, от мыслей. В армии они найдут множество таких же людей, халявную еду и практически все возможности для реализации своей мечты, которую правда будет иногда омрачать сержант на первых порах, заставляющий усваивать новые правила.
Люди с особо хрупкой душевной организацией. Армия будет для них сущим адом и кошмаром. Существует два основных сценария - активная позиция (матерные аналоги слова буйнопомешанный) и выраженный протест = мнгновенный удар, не оставляющий явных следов и приводящий к временному шокированию (в прямом смысле). При продолжении сопротивления\яром сопротивлении - наряду с ударами, различные наказания, как то невыполнимые поручения (большое число нарядов в сжатые сроки), а при неисполнении (по любым причинам) - всё то же самое и так в прогрессии. Пассивная позиция (тормоз и матерные аналоги) то есть любое (буквально любое, мелочей и исключений не бывает) несоответствование требованиям приводит к наказанию всего коллектива, при этом сам виновник наказания избегает, целью этого приёма является - наказание тормоза коллективом (не забываем, армия это пребывание в коллективе 24\7). Чаще в форме весьма убедительных "уговоров". Так или иначе это приводит к разбиванию душевной организации вдребезги, возможны попытки суицида, членовредительства, умопомешательство, но чаще - дегенерация.
Подробности от Cheko:
Внимание! Текст актуален в качестве первых впечатлений от КМБ (Курса Молодого Бойца) в дальнейшем (в части) всё гораздо жетче и тупее. Грит - люто скучно, весь быт описал за несколько минут, там реально один день в точности похож на другой. Стены, как положено покрыты блевотного цвета краской, неестественная чистота и порядок, огромное количество времени на раздумия о смысле жизни. Передвижение только в строю, разговоры запрещены (кроме небольшого промежутка личного времени вечером, но оно на деле целиком занимается тем, что бы успеть подшить воротничок). Основная боевая задача - превратить матрас в абсолютно идеальный кирпич, выровнять простыню по полосочкам, разместив их строго параллельно краям, выровнять кровати по нитке и т.п. Этой задаче посвящаются целые часы. Так же в занятия включены - сидения в классах, то есть буквально - сидеть и молчать не шевелиться несколько часов. Кроме того изредка - заучивание отдельных частей устава наизусть, стояние на тумбочке (дежурство, часто ночное - возле тумбочки с телефоном, главное не заснуть). Совсем редко - занятия на улице (чтоб не заболели, поскольку на фоне сокращения армейских чинов, истерии свинного гриппа и загубленных солдат подобные случаи крайне нежелательны). Наиболее интересные события - завтрак обед и ужин. В полном молчании (только ложки стучат), каждый раз одно и то же - картошка и рис, а так же слабо желтоватого цвета вода с лёгким привкусом крахмала. Температура еды - ужасно горячая, времени и возможности остудить никакой нет, но обожённая ротовая полость постепенно приспосабливается. Ввиду такого однообразия, карамельные конфетки (изредка раздаются всем в среднем по 2 штуки из домашних посылок... остальные части посылок солдаты никогда не видят, равно как и всех привезённых с собой и на себе вещей). Да, по субботам производится дотошная уборка всей казармы, что на фоне общей унылости и однообразности даже в чём то приятно. Воскресение - день ничегонеделания формально, а неформально день, когда можно вплотную заняться личной гигиеной. Что касается контингента и общения, как уже упомянал общение зачастую физически невозможно, запрещено или просто не одобряется. Однако, даже учитывая те краткие моменты, когда это возможно - общаться не с кем. Поскольку контингент... нет не гопота, не быдло, а просто дегенераты. Бытуют всем известные школьные\детсадовские\пионерлагерные (нужное подчеркнуть) приколы, смех может вызвать практически любое слово или действие, есть свои лидеры и крайние. Матом не ругаются, на нём разговаривают все и везде включая сержантов. Темы для редких разговоров, догадайтесь сами, но кроме стандартного набора - нездоровый интерес к наркотикам и всему, что с ними связанно. Наркоманами-пионерами (несистемные, попробовавшые пару раз по пьяни и т.п.) являются практически все, есть и опытные, пользуются уважением. Не преувеличу, если скажу, что общая мантра - где бы намутить. То есть, людей с отличающимся мировоззрением... нет не убивают и не чмырят, а просто вполне справедливо игнорируют, притом абсолютно взаимно и что характерно, между собой такие люди так же не поддерживают контактов, что бы лишний раз не привлекать к себе излишнее внимание. Одиночество - цена сохранения индивидуальности и естественная форма существования. Что же касается сержанта - это точно такой же солдат, но прокаченный и наделённый полномочиями. Сержант может пробить в душу, но аккуратно, не особенно больно и без заметных синяков, но чаще прибегает к моральному давлению, ввиду того, что никто не в состоянии ему прекословить. Самое яркое событие из ряда всего описанного - спецзадание по подклейке фотографий на стенд и непродолжительный просмотр мыльной оперы и рекламы по единственному (или их было два) каналу. Кстати, хотя формально "просмотр программы Время" зафиксирован в распорядке дня и назначен на 21:00 реально это значит вымыть ноги, одеться - пробежать строем вокруг казармы, переодеться, снова вымыть ноги. Да и конечно же ещё одна мантра - это поскорее бы перейти из учебной части (КМБ курс молодого бойца) в роту, что произойдёт после нового года. Потому, что там есть немножечко больше свобод, передвигаться можно самостоятельно (в пределах некоторых частей казармы) и прочие мелочи, приобретающие в сложившейся обстановке очень большую значимость. Ну и конечно же - поскрее бы домой, это просто по дифолту. Часть расположена в глухом лесу под Ульяновском, в 700стах километров от Дифолт Сити.
Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь. Он не стремится осчастливить всех - только лишь желающих. Идейки-то, идейки куда девать? Где начало того конца, которым оканчивается начало? А? Раньше меня мучили разные вопросы. А теперь мучают разные ответы!
ООО нашлись таки аниматоры. Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь. Он не стремится осчастливить всех - только лишь желающих. Идейки-то, идейки куда девать? Где начало того конца, которым оканчивается начало? А? Раньше меня мучили разные вопросы. А теперь мучают разные ответы!
Неужели моушен кепчер? Жаль, что на втором видео камера очень далеко от персонажа, трудно разглядеть анимацию более детально. Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь. Он не стремится осчастливить всех - только лишь желающих. Идейки-то, идейки куда девать? Где начало того конца, которым оканчивается начало? А? Раньше меня мучили разные вопросы. А теперь мучают разные ответы!
чтож партфолио вижу в процесе создания, добро Зог Одобря! а вот про Армию и товарища в ней можно и в отдельную тему, будем ждать. кто не голодал, тот не был сыт.
Сообщение отредактировал _4uT_ - Вторник, 23.03.2010, 03:01:36