Quartal Engine & Cleaninng QC

Написано: среда, 19 декабря 2012 г. автор st1x51
0

На днях занимался миксом Quartal Engine и L4Q,в итоге получился неплохой движок с поддержкой внешних текстур и всяких плюшек из DQ,скорость загрузки игры сильно возросла..Жду фикса HLBSP от Crow_Bar.Так же постепенно избавляюсь от Quake контента(модели,звуки,карты),почистил код,теперь progs.dat весит ~250кб,раньше 500.
Так же помогаю американцам с Conscript.Начинается сессия,времени на что-либо мало.

HLBSP в Quartal

Написано: четверг, 27 сентября 2012 г. автор st1x51
0

Я как-то пытался с движка ProQuake взять поддержку карт half life,раза два наверное,но они были неудачными.Сегодня я решил уделить два часа разбору кода и ошибкам компилятора и вот результат.



MDiO и UP тесты

Написано: среда, 5 сентября 2012 г. автор st1x51
0






My day is over[PC only]

Написано: понедельник, 27 августа 2012 г. автор st1x51
0

Первоначально задумывалось для псп,но так как псп виснет,то не забрасывать же хорошую идею(не напишу какую=P).
Движок будет DarkPlaces..
собрал нужные исходники в один,написал за пару часов меню(потому что не сталкивился с написанием меню и созданием menu.dat)

вот что получилось пока


Untitled Project 1.2(+Исходники)

Написано: автор st1x51
0

-Уменьшена высота прыжка
-Убраны чит функции
-impulse 9 теперь дает не оружие,а нечто другое
-убраны glass.qc и qlass2.qc из-за ненадобности

Запуск:
PC(создать ярлык ку1 и прописать -game untitled)
PSP (создать рядом с eboot.pbp quake.cmdline и прописать там -game untitled)
примерно так же запускать на других устройствах..

Исходники:
Тык

Как добавить skybox на карту

Написано: вторник, 3 июля 2012 г. автор st1x51
0

1)Создайте куб вокруг вашей карты и наложите на него любую текстуру неба

2)Добавьте в wordspawn (Map>Map properties) в key параметр sky,а в value имя вашего скайбокса(например day),для этого нужно нажать SmartEdit.
3)Найдите скайбокс на геймбанане или сделайте свой,скайбокс состоит из 6 текстур(bk(задняя),dn(нижняя,ft(центральная),lf(левая),rt(правая),up(верхняя)) и все эти текстуры должны лежать в папке GFX / ENV

 4)Вот и все,скомпилируйте карту,чтобы посмотреть ваш скайбокс

P.S:работает в движках Kurok(Quartal,Kurok,Left4Quake,Solitude(Halo)),ProQuake(NZP)
 

PSP Quake Engines

Написано: понедельник, 2 июля 2012 г. автор st1x51
0

Хотелось бы написать пару слов о quake движках для psp,самый первый
движок был сделан Peter Mackay и Chris Swindle(link),потом jurajstyk(link) доработал его,собственно через несколько лет MDave сделал огромный вклад в Quake движок.Он назвал его Kurok(так называлась его игра по типу игры Turok).
В Курке было реализовано много чего:
-Mp3 плеер
-Пофиксеный Ad hoc вроде как
-Увеличение лимитов на модели
-Полная поддержка автоприцеливания
-Глубина цвета 32 бита для PSP Slim
-Альфа браши и модели
-Эффект тумана
-Функция затемнения света на моделях
-Плавная анимация моделей
-Цветное освещение для карт
-Режим для PSP Slim,дя загрузки карт и текстур больших размеров
-Поддержка скайбоксов(256x256 для PHAT,512x512 для SLIM)
-22khz Аудио
-Увеличение количества статических ентити до 256(было 128)
Скачать можно отсюда:link

Baker с inside3D,модифицировал kurok и назвал его ProQuake(правда мне не очень нравится его модификация,хотя там много полезных вещей присутствует)
О том,что там есть;
-поддержка HLBSP(Half-Life 1 карты),wad файлы вшиваются в карту(как в q1bsp),но есть небольшие баги со светом
-11khz Аудио(вот это мне и не нравится,некоторые моды просто зависают,приходится конвертировать звуки)
-возможность подключения к серверам quake
-исправления рендеринга воды
-поддержка kurok
-conback в полном экране(бекграунд,в курке он на 2/3 экрана)
- фикс mp3 плеера
Скачать:link

И наконец-то вкусняшка от нашего русского программиста crow_bar(который портировал Q3 для psp),DQuake
DQuake самый крутой движок из всех,но с fps у него туговато немного,зато красиво и играбельно.
И так,что в нем есть:
-поддержка моделей mdl(hl),md2(q2),md3(q3)
-поддержка spr,а так же spr32(dp)
-поддержка hlbsp карт(из darkplaces,нет багов со светом)
-поддержка  jpg, tga, png, pcx
-QMB,Q3 партикли
-скайбоксы,туман,свет на картах(все из курка)
-Полный яркий свет для текстур
-бампмап
-wad файл не вшивается в hl карту
Скачать:link

Вот и все,может я тут что-то и попутал,но суть думаю ясна,для меня самым нормальным движком остается kurok.




Tricks

Написано: понедельник, 18 июня 2012 г. автор st1x51
0

Рис. 1 - пример использования Portal Gun - сила тяжести

*выход*
  __      ,.,
 |  |   ,'   ',
-|  |--|-----, ',
 |  | \|/   / | |    
___________/  | 2      ,.,   
          |   | |    ,'   ',  
          |   | |  O       ', 
          |   | |  |-       |
          |  /'-|--/\-,     |
          | /  (_)   / |    |
          |/________/  |    1
                   |   |    |
                   |   |    |
                   |   |   \|/
                   |  /'----'-- - -
                   | /     (_)
                   |/_________ _ _

===============================================================================
Рис. 2 - телепортация объекта(Х)
                                                                  
_ _ _____________________________________________ _ _
                _      
               (_)     
               /       
_ _ _________ 1 ____         ____________________ _ _                  
           O /     /|       / _                                        
           |- --------2------(X)                                       
           /\    /  |     /                                            
                /   |    /                                             
               /    |__ /                                              
_ _ __________/    /   /_______________________ _ _                     
              |   /    |                                                
              |  /     |                                                
              | /      |                                                
              |/_______|                                                

===============================================================================
Рис. 3 - Пройди там,где невозможно пройти,используя Portal Gun
    _____________________________________________________
   /                                                    /|
  /                                                    / |
 /____________________________________________________/  |
 |      |            || || || || || ||         _      |  |
 |      |____________||_||_||_||_||_||________(_)_____|  |
 | _   /             || || || || || |/     O ~        |  |
 |(_)~/~ ~ ~ ~ ~ ~ ~ ||~||~||~||~|/~ ~ ~ ~-|~         |  |
 |   /               || || || |/          /\          |  |
 |  /                || || |/                         |  / 
 | /                 || |/                            | /
 |/__________________|/_______________________________|/ 

===============================================================================

Quartal 2.5[PSP]

Написано: суббота, 9 июня 2012 г. автор st1x51
4

Ну вот,с минуты на минуту выложу сюда и на парочку сайтов Quartal 2.5,ссылку и изменения можно увидеть тут.
Сегодня поправил кубы,написал спасибки всем,работу думаю приостановлю,ибо никто уже не помогает.
Всем Good Bye,Всем спасибо,пора сдавать экзамены.
Отдельное спасибо Сергею Круглову за турельки.



So Freeze

Написано: четверг, 31 мая 2012 г. автор st1x51
2

В связи с тем,что я был освобожден от трех зачетов,я еще углубился в Quake моддинг и доработал таки свою схему по переделыванию HL2  карт в Quake,получается такой вот ремастеринг:



работа над quartal остановлена,буду пока набираться опыта и переводить QC мануал
может пора свалить,как dr.mabuse,правда у него сломалась псп и он не может продолжать работу,да и с движком ему не помогают
вот его еще один мод,типа RE на Quake
Video



Немного новостей

Написано: четверг, 24 мая 2012 г. автор st1x51
0

Буду краток,ибо спать хочу ужасно.
Начал работу над картой из первого Portal.
Сделал парочку альфа текстур и сделал стекло,улучшенное,а то раньше спрайтик тупо был:)


 

Еще один потраченный на модели

Написано: вторник, 8 мая 2012 г. автор st1x51
0

Ооо да,так как я научился конвертировать модельки из hl1 в q1,я решил попробовать это сделать и с hl2(точнее с Portal).Обычным способом через Quark у меня не получилось,да и с Blender тоже(руки кривые).Но все таки к концу дня я намутил таки отличную модель с использованием кучки программ: Milkshape 3D,fimg,Quark,Crafty,Vtf editor,QME.
С помощью Crafty спер модельку из портала в формате obj
С помощью Vtf editor,сделал текстуры bmp и tga формата
С помощью fimg переделал текстуры под палитру квейка
С помощью Milkshape сделал размер модели и наклеил текстуру
С помощью Quark переделал текстуру ибо он в 24bpp не компилит модель и скомпилировал mdl модельку
С помощью QME исправил текстуру,чтобы цвет был нормальный и все.
Оригинальное радио из Portal в Quartal:)


Quartal entities(Worldcraft)

Написано: пятница, 4 мая 2012 г. автор st1x51
0

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

up:добавил все,но почему то половины ентити попросту нет,странно однако:)
описывать что ли все...

QC Kurok модификации

Написано: автор st1x51
0

Решил по изучать еще qc и модифицировать kurok
тут буду выкладывать то что надо попытаться спереть и вставить в kurok :D
 -фонарь(добавлен невидимый спрайт,для реалистичности)
-дождь(ентити  func_rain)
-магазин
-диалог,по типу Prydon Gate
и там еще куча всего....

Игра,похожая на SCP

Написано: среда, 25 апреля 2012 г. автор st1x51
2

Один чувак с moddb с ником dr_mabuse1981,по ходу вдохновился нашим Untitled Project 038G-5 и решил сделать свою игру,только он хочет добавить туда монстров и оружие. Как он сказал,это будет что-то типа SCP и Silent Hill.Выглядит данная игра довольно впечатляюще.



Я думаю игра будет на PC,PSP и на Wii:)

Untitled Project v.1.1 и немного о Quartal 2.5

Написано: понедельник, 16 апреля 2012 г. автор st1x51
0

С небольшой задержкой,выкладываю UP 1.1.
ссылка будет во вкладке "Проекты"
Так же идет работа над Quartal 2.5,готово что то типа менюшки,работаем над персонажем(будем тестить MP)
Надеюсь,dimaflash сломает свою виту,и займется созданием карт)
тут еще пара наработок от Xavier:





P.S: скоро на moddb,Untitled Project
Да и Quartal 2.5 уже близко

Немного о изменениях и релизах

Написано: вторник, 10 апреля 2012 г. автор st1x51
0

И так,начну я с неизвестного проекта,версия 1.1 с исправленым багом и новыми звуками будет выложена послезавтра наверно,а вслед за ней дня через три выйдет квартал с 2.5.В нем,в основном будет слегка почищен код,будут изменены звуки,изображения,хотелось бы отвязать мод от кваки,дабы уменьшить размер игры.
На самом деле нужно еще много чего сделать....

Немного новостей

Написано: четверг, 5 апреля 2012 г. автор st1x51
0

Немного новостей
День как обычно выдался суровый,но часик на все можно отвести:)
Начнем с новости в плане Untitled Project:
Из-за того что я случайно удалил исходники этого мода,мне пришлось его заново переписывать и заодно исправить один баг,так что скоро можно увидеть Untitled Project 1.1

C Quartal дела обстоят как-то туго,самой главной проблемой являются турели,которые могут завалить игрока за пару секунд,их нужно исправлять..
Xavier с moddb предложил мне модельку портал гана,приближенную к реальной портальной пушке из Portal,только она была без текстур и мне пришлось самому разукрашивать и делать анимации(которые Xavier потом поправил и сделале ще нормальное расположение пушки в руках у игрока),а так же пришлось убирать дырки в модели.
Получилось что-то типа этого:

QuakeC:приседание

Написано: автор st1x51
0

Приседание[QuakeC]
Думал сегодня ничего не писать,ну да ладно.Начнем.

1)Создаем файл crouch.qc и попируем туда этот код:
.float crouch, attemptcrouch;
float (entity targ) crouchcheck =
{

makevectors (self.v_angle);
tracebox (self.origin, VEC_HULL_MIN, VEC_HULL_MAX, self.origin + '0 0 16', FALSE, self); 

 /*
vector VEC_HULL_MIN = '-16 -16 -24';
vector VEC_HULL_MAX = '16 16 32';
 */ 


if (trace_fraction == 1)            //hits nothing go ahead
 return TRUE;

if (!trace_ent.takedamage)      //hits world or nondamagable object
 return FALSE;

 return FALSE;

};

void() crouch_on =
{

if ((!self.crouch) && (!self.velocity_z)) //crouch down
{
setsize (self, '-16 -16 -8', '16 16 8');
self.crouch = 1;
self.view_ofs = '0 0 14';
self.attemptcrouch = 1;
return;
}
self.attemptcrouch = 0;
};

void() crouch_off =
{
if (self.crouch && (!self.velocity_z) && (crouchcheck(self)))  //get up
{
setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
self.crouch = 0;
self.origin_z = self.origin_z + 16;
self.view_ofs = '0 0 22';
self.attemptcrouch = 0;
return;
}
self.attemptcrouch = 1;
};

2) Добавляем эти строки в ImpulseCommands в weapons.qc:
 
if (self.impulse == 33)
crouch_on ();

if (self.impulse == 34)
crouch_off ();

3) Добавьте crouch.qc в progs.src после строки weapons.qc и можете компилировать.
 
4) Добавьте в autoexec.cfg(если нету,то создать) в папке id1 / или в папке вашего мода
эти строки:

alias +crouch_on        "impulse 33"
alias -crouch_on        "impulse 34"


вы можете забиндить команду +crouch_on, например:
Добавив в autoexec.cfg
bind ctrl "+crouch_on"
 
  

QuakeC:рандомная загрузка уровней

Написано: вторник, 3 апреля 2012 г. автор st1x51
0

Рандомная загрузка уровней[QuakeC]
Открываем client.qc и видим такую вот картину:
void() NextLevel =
{
 local entity o;

 if (mapname == "start")
 {
  if (!cvar("registered"))
  {
   mapname = "e1m1";
  }
  else if (!(serverflags & 1))
  {
   mapname = "e1m1";
   serverflags = serverflags | 1;
  }
  else if (!(serverflags & 2))
  {
   mapname = "e2m1";
   serverflags = serverflags | 2;
  }
  else if (!(serverflags & 4))
  {
   mapname = "e3m1";
   serverflags = serverflags | 4;
  }
  else if (!(serverflags & 8))
  {
   mapname = "e4m1";
   serverflags = serverflags - 7;
  }

  o = spawn();
  o.map = mapname;
 }
 else
 {
  // find a trigger changelevel
  o = find(world, classname, "trigger_changelevel");

  // go back to start if no trigger_changelevel
  if (!o)
  {
   mapname = "start";
   o = spawn();
   o.map = mapname;
  }
 }

 nextmap = o.map;
 gameover = TRUE;
 
 if (o.nextthink < time)
 {
  o.think = execute_changelevel;
  o.nextthink = time + 0.1;
 }
};
 
Копируем NextLevel() функцию и меняем ей имя на NextRandomLevel.
Теперь,замените это:
 
if (mapname == "start")
 {
  if (!cvar("registered"))
  {
   mapname = "e1m1";
  }
  else if (!(serverflags & 1))
  {
   mapname = "e1m1";
   serverflags = serverflags | 1;
  }
  else if (!(serverflags & 2))
  {
   mapname = "e2m1";
   serverflags = serverflags | 2;
  }
  else if (!(serverflags & 4))
  {
   mapname = "e3m1";
   serverflags = serverflags | 4;
  }
  else if (!(serverflags & 8))
  {
   mapname = "e4m1";
   serverflags = serverflags - 7;
  }

  o = spawn();
  o.map = mapname;
 }
 else
 {
  // find a trigger changelevel
  o = find(world, classname, "trigger_changelevel");

  // go back to start if no trigger_changelevel
  if (!o)
  {
   mapname = "start";
   o = spawn();
   o.map = mapname;
  }
 } 
 
На это:

local float whichmap;
 
 whichmap = rint (random()*36 + 1);
 
 if (whichmap == 1)
  mapname = "start";
 else if (whichmap == 2)
  mapname = "e1m1";
 else if (whichmap == 3)
  mapname = "e1m2";
 else if (whichmap == 4)
  mapname = "e1m3";
 else if (whichmap == 5)
  mapname = "e1m4";
 else if (whichmap == 6)
  mapname = "e1m5";
 else if (whichmap == 7)
  mapname = "e1m6";
 else if (whichmap == 8)
  mapname = "e1m7";
 else if (whichmap == 9)
  mapname = "e1m8";
 else if (whichmap == 10)
  mapname = "e2m1";
 else if (whichmap == 11)
  mapname = "e2m2";
 else if (whichmap == 12)
  mapname = "e2m3";
 else if (whichmap == 13)
  mapname = "e2m4";
 else if (whichmap == 14)
  mapname = "e2m5";
 else if (whichmap == 15)
  mapname = "e2m6";
 else if (whichmap == 16)
  mapname = "e2m7";
 else if (whichmap == 17)
  mapname = "e3m1";
 else if (whichmap == 18)
  mapname = "e3m2";
 else if (whichmap == 19)
  mapname = "e3m3";
 else if (whichmap == 20)
  mapname = "e3m4";
 else if (whichmap == 21)
  mapname = "e3m5";
 else if (whichmap == 22)
  mapname = "e3m6";
 else if (whichmap == 23)
  mapname = "e3m7";
 else if (whichmap == 24)
  mapname = "e4m1";
 else if (whichmap == 25)
  mapname = "e4m2";
 else if (whichmap == 26)
  mapname = "e4m3";
 else if (whichmap == 27)
  mapname = "e4m4";
 else if (whichmap == 28)
  mapname = "e4m5";
 else if (whichmap == 29)
  mapname = "e4m6";
 else if (whichmap == 30)
  mapname = "e4m7";
 else if (whichmap == 31)
  mapname = "e4m8";
 else if (whichmap == 32)
  mapname = "dm1";
 else if (whichmap == 33)
  mapname = "dm2";
 else if (whichmap == 34)
  mapname = "dm3";
 else if (whichmap == 35)
  mapname = "dm4";
 else if (whichmap == 36)
  mapname = "dm5";
 else
  mapname = "dm6";
 
 o = spawn();
 o.map = mapname;
 
В CheckRules() Функции найдите:
 
if (deathmatch && fraglimit && self.frags >= fraglimit)
{
 NextLevel ();
 return;
}  

Теперь замените NextLevel (); на:
NextRandomLevel ();
 
Все.Компилим.Теперь наши уровни загружаются рандомно

QuakeC:звук шагов

Написано: автор st1x51
0

Добавляем в Quake звук шагов[QuakeC]
Для начала,вы должны найти звуки шагов и положить их в папку
                        sound/player/,звуков должно быть 4.
 Ну что ж ,начнём.
Откройте world.qc и пролистайте до:
precache_sound ("misc/water2.wav");   // swimming


После той строки вставьте это:


      precache_sound ("player/foot1.wav");      
      precache_sound ("player/foot2.wav");      
      precache_sound ("player/foot3.wav");      
      precache_sound ("player/foot4.wav");


Теперь мы должны использовать наши звуки по назначению,
откройте player.qc
Найдите там:


void() player_run =[ $rockrun1, player_run ]
{


После фигурной скобки вставьте этот код:

        if (self.walkframe == 1 || self.walkframe == 4 )
        {
                if (checkbottom(self) == TRUE)
                {
                        if (self.waterlevel == 0)
    {
          local float r;
     r = rint(random() * 3);   
     if (r == 1)
             sound (self, CHAN_AUTO, "player/foot1.wav", 0.5, ATTN_NORM);
     else if (r == 2)
             sound (self, CHAN_AUTO, "player/foot2.wav", 0.5, ATTN_NORM);
     else if (r == 0)
             sound (self, CHAN_AUTO, "player/foot3.wav", 0.5, ATTN_NORM);
     else
            sound (self, CHAN_AUTO, "player/foot4.wav", 0.5, ATTN_NORM);
    }
                }
        }
 
 
Собственно все,можно все компилировать и наслаждаться звуками шагов. 

QuakeC: фонарик

Написано: понедельник, 2 апреля 2012 г. автор st1x51
0

 Как в Quake добавить фонарик[QuakeC]

Шаг 1
Создайте текстовый файл и назовите его flash.qc ,вставьте в этот файл то,что написано ниже, и положите flash.qc в папку со своими исходниками
void() W_SetCurrentAmmo;void() flash_update =
{
        // The Player is dead so turn the Flashlight off
        if (self.owner.deadflag != DEAD_NO)
                self.effects = 0;

        // The Player is alive so turn On the Flashlight
        else                                
                self.effects = EF_DIMLIGHT;  

        // Find out which direction player facing
        makevectors (self.owner.v_angle);

        // Check if there is any things infront of the flashlight
        traceline (self.owner.origin , (self.owner.origin+(v_forward * 500)) , FALSE , self);

        // Set the Flashlight's position

        setorigin (self, trace_endpos+(v_forward * -5));

        // Repeat it in 0.02 seconds...
        self.nextthink = time + 0.02;
};

void() flash_on =
{
        // Make a new entity to hold the Flashlight
        local entity myflash;

        // spawn flash
        myflash = spawn ();
        myflash.movetype = MOVETYPE_NONE;
        myflash.solid = SOLID_NOT;
        // this uses the s_bubble.spr, if you want it to be completly
        // invisible you need to create a one pixel trancparent spirit
        // and use it here...
        setmodel (myflash, "progs/s_bubble.spr"); 
        setsize (myflash, '0 0 0', '0 0 0');

        // Wire Player And Flashlight Together
        myflash.owner = self;
        self.flash = myflash;
        
        // give the flash a Name And Make It Glow
        myflash.classname = "flash";
        myflash.effects = EF_DIMLIGHT;
        
        // Set Start Position
        makevectors (self.v_angle);
        traceline (self.origin , (self.origin+(v_forward * 500)) , FALSE , self);
        setorigin (myflash, trace_endpos);

        // Start Flashlight Update
        myflash.think = flash_update;
        myflash.nextthink = time + 0.02;
};


void () flash_toggle =
{
        // If Off, Turn On
        if (self.flash_flag == FALSE)
        {       
                self.flash_flag = TRUE;
                flash_on();
        }

        // If On, Turn Off
        else
        {
                self.flash_flag = FALSE;
                W_SetCurrentAmmo ();
                self.flash.think = SUB_Remove;
                self.flash.nextthink = time + 0.1;
        }
};
Шаг 2
Откройте defs.qc и добавьте в конец следующие строки:
.float flash_flag; // On/off for the flashlight
.entity flash;   // flash entity
Шаг 3
Откройте weapons.qc и найдите строку ImpulseCommands (она почти в самом низу),после
self.impulse = 0;
добавьте:

if (self.impulse == 30) 
        flash_toggle();
Шаг 4
Теперь вы должны прописать flash.qc в файл progs.scr . Напишите flash.qc под defs.qc.
Шаг 5
Компилируем файлы и кидаем наш progs.dat в папку с нашим модом(игрой), напишите в консоле impulse 30 ии тадаам,фонарик :D
P.S: для полного удобства,чтобы не лазить все время в консоль,можно сделать так: bind "f" "impulse 30"
Автор кода:ShockMan


QuakeC:С чего начать

Написано: автор st1x51
0

Во-первых, позвольте мне дать вам краткое объяснение того, что же такое QC. QuakeC — интерпретируемый язык программирования, разработанный в 1996 году Джоном Кармаком (id Software) для написания части компьютерной игры Quake. Используя QuakeC, программист имеет возможность модифицировать игру: добавить оружие, изменить игровую логику и физику, написать сложный сценарий. Язык может использоваться для контроля за многими аспектами игры, такими как искусственный интеллект (противников), триггеры, изменения на карте.
QC записан в .qc файлах, которые компилируются QC компилятором в файл под названием progs.dat. Progs.dat читается движком Quake , и он принимает код игры оттуда.
QC код отвечает не на все в Quake. Часть кода обрабатывается движком Quake Engine. QC включает в себя: оружие, движения игроков и анимации, все элементов кода и т.д.
Первое, что вы должны сделать, это достать копию исходного кода QC . Последней версией, выпущенной Software ID была версия 1.06, но я рекомендую использовать QC исходник Джастина Тимьяна, который является очищенным вариантом версии оригинального исходного кода. Его можно скачать здесь: http://www.quaddicted.com/files/tools/Clean_v106qc.zip
Следующее, что вам нужно сделать, это создать новый каталог для нашего мода. Внутри вашей папки Quake нужно создать папку с вашим модом,например mymod. Далее вам нужно поместить QC код в эту папку. Распакуйте Clean_v106qc.zip ,или возьмите папку qc из архива и положите ее в папку с вашим модом(в нашем случае это mymod),должно получится такое: quake/mymod/qc
Теперь, когда QC файлы лежат в нужной папке, следующее, что нужно сделать,это найти компилятор. Это программа, предназначенная для компиляции текстовых. QC-файлов в файл progs.dat. QC компилятора от ID Software назывался QCC.EXE, но как и многие оригинальные инструменты Quake он был заменен более современным компилятором, улучшенной версии. Я рекомендую FTEQCC.(http://www.4shared.com/file/yHnxNE5M/fteqcc.html) или (http://www.quaddicted.com/files/tools/fteqccgui2770-win32.zip)
Распакуйте этот файл в quake/mymod/qc и запустите FTEQCC.EXE для компиляции кода. Появится командная строка DOS и покажет список qc файлов ,а затем остановится.Предположим,что ошибок у нас никаких нет и закроем DOS окно. В папке quake/mymod появится наш progs.dat . Вы можете запустить этот мод сейчас, но так как мы ничего не изменили,значит глупо запускать тот же квейк.
Итак, давайте вдаваться в код. Но для начала, что мы хотим сделать? Я думаю, что для этого урока я начну с очень простого. Давайте сделаем "Сообщение дня", сообщение, которое ненадолго появляется в центре экрана, когда игроки подключаются к серверу. Давайте сделаем это.
Открываем файл quake/mymod/qc/client.qc. Это QC файл отвечает за такие вещи как:спавн игроков, что делать когда игроки подключаются и отключаются и т.д. Это все относится к функциям клиента. QC файлы разбиваются на функции(functions), которые являются автономными участками кода. Простая функция выглядит следующим образом:

void() GotoNextMap =
{
        if (cvar("samelevel")) // if samelevel is set, stay on same level
               changelevel (mapname);
        else
               changelevel (nextmap);
};

Это довольно короткая функция. Я не буду перечислять все, что она делает сейчас, здесь показано что у функции есть имя (GotoNextMap). А тело функции раздела в фигурных скобках(это код, который запускается, когда эта функция вызывается)
Хорошо, теперь игнорируем эту функцию полностью, так как я просто показал как функция выглядит. Функция, которую мы ищем, называется ClientConnect и находится она на линии 1159. Выглядит это примерно так:
/*
===========
ClientConnect
called when a player connects to a server
============
*/
void() ClientConnect =
{
        bprint (self.netname);
        bprint (" entered the game\n");     
// a client connecting during an intermission can cause problems
        if (intermission_running)
               ExitIntermission ();
};
Раздел / * и * /, является комментарием. Комментарии игнорируются компилятором полностью, они нужны для того, чтобы сделать код более легким для чтения и понимания для людей, которые редактируют код. Строки, начинающиеся с / / тоже комментарий. Как отмечено в комментарии,в начале говорится о том что, эта функция вызывается, когда клиент соединяется с сервером. Это идеальное место чтобы написать наш код "Сообщение дня", так как мы хотим, чтобы сообщение писалось игроку, когда он присоединяется к серверу. В конце функции, как раз перед окончательным}; добавьте следующую строку:

centerprint(self, "Welcome To My Mod\n");

centerprint является функцией встроенной в движок и, используется для вывода сообщения в центре экрана игрока self является переменной, которая здесь указывает на игрока, который только что подключился к серверу, таким образом,движок знает, кому показать сообщение.(self на самом деле может относится к любому субъекту в игре) В функции стрельбы из оружия self будет относиться к игроку, который стрелял из оружия и т.д. Это очень полезная переменная для многих ситуаций, и вы будете использовать ее много раз. "Welcome To My Mod\ П", сообщение, которое мы хотим отобразить. \ П в этом сообщении-не будет показано на экране,так как это используется для того,чтобы сообщить движку,что это конец строки.
Вы, наверное, заметили, что большинство строк кода, кажется, заканчиваются точкой с запятой. Это говорит компилятору о том, что команда достигла конца, и он будет жаловаться/отказываться от компиляции, если ; стоит не правильно.
Говоря о компиляторах, сохраните client.qc и запустите FTEQCC.EXE. Предположим,что все скомпилировалось. Запускаем мод, и смотрим наше "Сообщение дня"

Welcome

Написано: автор st1x51
0

И так все мы уже давно знаем,что чуть ли не каждый человек,может сделать игру на движке quake1,ибо квейк настолько популярен,что свою игру можно будет портировать на PSP,DS,Android,Win Mobile,PC,Linux,Symbian и на другие платформы.В этом мини блоге я постараюсь собрать базу туториалов по обращению с quake,а так же игр сделанных на этом движке(в основном игры будут PSP/PC)

P.S:может года через два сюда кто-нибудь заглянет:)