Inside3D!
     

in-need if messing around experience

 
Post new topic   Reply to topic    Inside3d Forums Forum Index -> Engine Programming
View previous topic :: View next topic  
Author Message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Tue Nov 18, 2008 4:18 am    Post subject: in-need if messing around experience Reply with quote

Baker told me @ QuakeOne.com :
Quote:
you'd probably need to get help @ Inside3d.com because messing around always requires experience.


and well, now I'm here [scary being away from the qc forum]

i did the tutorial that makes the explosions have a blue light ( http://www.quake-1.com/docs/quakesrc.org/94.html )

and i was wondering how would i be able to make it more orange, but not the normal yellow [otherwise i wouldn't have done tutorial Wink]

i guessing it involves messing with the Numbers around here
Code:
       // CDL - epcaATpowerupDAWTcomDAWTau <- had to break the link

            // Make the dynamic light purple

            dl->colour[0] = 0.2; dl->colour[1] = 0.2; dl->colour[2] = 0.8;

            // CDL



but i don't wanna break the engine again [ i count 76-107 errors not evolving a misspelling or a missing ";" as breaking]

also [risking making this thread to bossy/long]

is this a tutorial that allows the engine to use "dpextensions.qc"?
http://www.quake-1.com/docs/quakesrc.org/140.html

i hate to be a forum jumper and this is the thread that started it:
http://www.quakeone.com/forums/showthread.php?t=4016

any help is cool 8O
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Tue Nov 18, 2008 3:32 pm    Post subject: Re: in-need if messing around experience Reply with quote

MeTcHsteekle wrote:


dl->colour[0] = 0.2; dl->colour[1] = 0.2; dl->colour[2] = 0.8;


Those are your RGB light colors.

The first color = red (0)
Second = green (1)
Third = blue (2)

Yellow would be almost no red and strong green and blue, like 0.2 0.8 0.8.
Orange is strong red and around half green with about no blue, like 0.8 0.4 0.2 or maybe try [0.8 0.4 0.0].

Here is a quick Googling of an RGB color table for you:

http://cloford.com/resources/colours/500col.htm

And that other tutorial adds an extension system into an engine. An empty one!

So, no, it wouldn't allow you to use DarkPlaces extensions because you would need to individually add code and functionality to the engine to support those.

Another engine that supports a ton of extensions is FTEQW and neither DarkPlaces nor FTEQW support all of each other's extensions ... largely because some of them are very complicated and difficult to implement.

And #2: As a general rule of thumb, almost no extensions are tutorialized. There is one, frik_file which allows QuakeC to read and write files.

Some of the extensions are simple math functions or minor effects support ... while other extensions are very complex.

I'm not big on the QuakeC side of things and have personally not used an extension in QuakeC, but the concept of extensions is that the engine lets it be known whether or not the extension is available to the QuakeC side of things.

Think of extensions as a expansion slot system. Doing that tutorial would create that and that alone, so when you are done you'd have an expansion slot system ... but no slots are filled.
Back to top
View user's profile Send private message
frag.machine



Joined: 25 Nov 2006
Posts: 728

PostPosted: Tue Nov 18, 2008 10:41 pm    Post subject: Re: in-need if messing around experience Reply with quote

Baker wrote:

Those are your RGB light colors.

The first color = red (0)
Second = green (1)
Third = blue (2)

Yellow would be almost no red and strong green and blue, like 0.2 0.8 0.8.
Orange is strong red and around half green with about no blue, like 0.8 0.4 0.2 or maybe try [0.8 0.4 0.0].



Actually yellow can be obtained by combining red and green Smile

I suggest MeTcHsteekle to take a look for example in the standard color selection dialog in Windows background settings and play with the controls to find out the tone he wants to apply. The values that appears as red, green and blue can then be divided by 255 to obtain the required ones (in floating point notation) by OpenGL.
_________________
frag.machine - Q2K4 Project
http://fragmachine.quakedev.com/
Back to top
View user's profile Send private message Visit poster's website
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Wed Nov 19, 2008 1:54 am    Post subject: Reply with quote

hehe , thanks for the help cos now i have the orange i want Very Happy

now i can go through and add other colors to things as well [ill try not to make it look to colorful though]

so if i do the extension tutorial, id have to hope that LordHavoc doesn't 86 this thread to get the DP ones?

//or i can try and fumble through the DP source Shocked

.. Idea hmm i guess i could have asked this on q1.com after all
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Wed Nov 19, 2008 4:01 am    Post subject: Reply with quote

DarkPlaces code is radically different from GLQuake/WinQuake. It has about 8 years of changes in it. (Last I heard, 97% of it is entirely rewritten from GLQuake).

For someone just starting to learn engine coding, it would be like skipping to end of an advanced calculus textbook without doing any of the middle of the book.

There is a lot of material in those Quakesrc.org tutorials and comparing an contrasting engines like GLQuake vs. FitzQuake vs. aguirRe Quake vs. JoeQuake is a good place to start.

If you really want to learn about EBFS, do the EBFS tutorial and the FrikFile tutorial.

Here is a very simple and generic ProQuake with EBFS added by RocketGuy that also has Frik_File (download).

I've not used it, but RocketGuy runs it on his RQuake server so it must be stable.

Above and beyond that, the QuakeSrc.org tutorials are a great place to start because they help you understand.


If you want to try to understand DarkPlaces and the extension system, you'd probably be best off using WinMerge to compare different old DarkPlaces version back when DarkPlaces was far more similar to original Quake.

Like such:

http://icculus.org/twilight/darkplaces/files/2000/

I'd recommend #104

http://icculus.org/twilight/darkplaces/files/2000/darkplacesengine104.zip
Back to top
View user's profile Send private message
Spike



Joined: 05 Nov 2004
Posts: 944
Location: UK

PostPosted: Thu Nov 20, 2008 3:42 am    Post subject: Reply with quote

EBFS != checkextension
_________________
What's a signature?
Back to top
View user's profile Send private message Visit poster's website
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Wed Nov 26, 2008 11:57 pm    Post subject: Reply with quote

hmm alright ill just hold back on the dp stuff, and csqc.

but ATM ima having trouble with pcx ant tga loading textures tut

http://www.quake-1.com/docs/quakesrc.org/101.html

and around the time i read this
Quote:
THATS IT...
And as a bonus cos i screwed up u also get to know how to get TGA and PCX on models!!!!


i kind of lost confidence, in it and im getting alot of stuff

Quote:
--------------------Configuration: winquake - Win32 GL Release--------------------
Compiling...
gl_draw.c
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1803) : error C2065: 'column0' : undeclared identifier
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1807) : error C2181: illegal else without matching if
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1823) : error C2065: 'j' : undeclared identifier
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1823) : error C2143: syntax error : missing ';' before ')'
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1823) : warning C4550: expression evaluates to a function which is missing an argument list
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1827) : error C2181: illegal else without matching if
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1837) : error C2059: syntax error : '}'
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1843) : error C2059: syntax error : '}'
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1851) : error C2065: 'columns' : undeclared identifier
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1851) : error C2099: initializer is not a constant
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1853) : error C2065: 'rows' : undeclared identifier
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1853) : error C2099: initializer is not a constant
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1855) : error C2059: syntax error : 'return'
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1857) : error C2059: syntax error : '}'
C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1927) : warning C4047: '=' : 'unsigned char *' differs in levels of indirection from 'int '
Error executing cl.exe.

glpro.exe - 13 error(s), 2 warning(s)


i tried fixing mos of them, but as i did it more kept forming Confused
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Thu Nov 27, 2008 2:48 am    Post subject: Reply with quote

MeTcHsteekle wrote:

C:\Users\alex\Desktop\proquake\WinQuake\gl_draw.c(1803) : error C2065: 'column0' : undeclared identifier


Looks like column0 variable isn't being defined.

And it doesn't like it is being defined in the tutorial either Sad

As an alternative, I would replace the whole *byte Load_Tga(...) with this from aguirRe Quake:

Code:
#pragma pack(1)
typedef struct _TargaHeader {
   unsigned char    id_length, colormap_type, image_type;
   unsigned short   colormap_index, colormap_length;
   unsigned char   colormap_size;
   unsigned short   x_origin, y_origin, width, height;
   unsigned char   pixel_size, attributes;
} TargaHeader;
#pragma pack()

/*
=============
LoadTGA
=============
*/
static byte *LoadTGA (char *name, int *width, int *height, qboolean alphablend)
{
   TargaHeader *targa_header;
   FILE       *f;
   int       columns, rows, numPixels;
   byte       *pixbuf, *buf;
   byte       *targa_rgba;
   int       row, realrow, column;
   qboolean    upside_down, alpha, blend;
   char       filename[MAX_OSPATH];

   sprintf (filename, "%s.tga", name);
   COM_FOpenFile (filename, &f);

   if (!f)
      return NULL;

   if (com_filesize < sizeof(TargaHeader))
      Sys_Error ("LoadTGA: can't read header in %s", filename);

   targa_header = malloc (com_filesize);

   if (!targa_header)
      Sys_Error ("LoadTGA1: error allocating %d bytes for %s", com_filesize, filename);

   if (fread (targa_header, 1, com_filesize, f) != com_filesize)
      Sys_Error ("LoadTGA: error reading %s", filename);

   fclose (f);

   targa_header->width = SwapShort (&targa_header->width);
   targa_header->height = SwapShort (&targa_header->height);

   if (targa_header->image_type!=2
      && targa_header->image_type!=10)
      Sys_Error ("LoadTGA: %s: only type 2 and 10 targa RGB images supported, not %d", filename, targa_header->image_type);

   if (targa_header->colormap_type !=0
      || (targa_header->pixel_size!=32 && targa_header->pixel_size!=24))
      Sys_Error ("LoadTGA: %s: only 24 and 32 bit images supported (no colormaps, type=%d, bpp=%d)", filename, targa_header->colormap_type, targa_header->pixel_size);

   columns = targa_header->width;
   rows = targa_header->height;
   numPixels = columns * rows;
   upside_down = !(targa_header->attributes & 0x20); // true => picture is stored bottom to top

   targa_rgba = malloc (numPixels*4);

   if (!targa_rgba)
      Sys_Error ("LoadTGA2: error allocating %d bytes for %s", numPixels*4, filename);

   blend = alphablend && gl_alphablend.value;
   alpha = targa_header->pixel_size == 32;

   buf = (byte *)(targa_header + 1);

   if (targa_header->id_length != 0)
      buf += targa_header->id_length; // skip TARGA image comment

   if (targa_header->image_type==2) {  // Uncompressed, RGB images
      for(row=rows-1; row>=0; row--) {
         realrow = upside_down ? row : rows - 1 - row;
         pixbuf = targa_rgba + realrow*columns*4;

         ChkBounds ("LoadTGA1", buf - (byte *)targa_header + columns * targa_header->pixel_size / 8, com_filesize, filename);
         ChkBounds ("LoadTGA2", pixbuf - targa_rgba + columns * 4, numPixels * 4, filename);

         for(column=0; column<columns; column++) {
            unsigned char red,green,blue,alphabyte;
            blue = *buf++;
            green = *buf++;
            red = *buf++;
            *pixbuf++ = red;
            *pixbuf++ = green;
            *pixbuf++ = blue;
            *pixbuf++ = alpha ? *buf++ : (blend ? (red + green + blue) / 3 : 255); // Better way?;
         }
      }
   }
   else if (targa_header->image_type==10) {   // Runlength encoded RGB images
      unsigned char red,green,blue,alphabyte,packetHeader,packetSize,j;
      for(row=rows-1; row>=0; row--) {
         realrow = upside_down ? row : rows - 1 - row;
         pixbuf = targa_rgba + realrow*columns*4;
         for(column=0; column<columns; ) {
            packetHeader = *buf++;
            packetSize = 1 + (packetHeader & 0x7f);

            ChkBounds ("LoadTGA3", pixbuf - targa_rgba + packetSize * 4, numPixels * 4, filename);

            if (packetHeader & 0x80) {        // run-length packet
               ChkBounds ("LoadTGA4", buf - (byte *)targa_header + targa_header->pixel_size / 8, com_filesize, filename);
               blue = *buf++;
               green = *buf++;
               red = *buf++;
               alphabyte = alpha ? *buf++ : (blend ? (red + green + blue) / 3 : 255); // Better way?;

               for(j=0;j<packetSize;j++) {
                  *pixbuf++ = red;
                  *pixbuf++ = green;
                  *pixbuf++ = blue;
                  *pixbuf++ = alphabyte;
                  column++;
                  if (column==columns) { // run spans across rows
                     column=0;
                     if (row>0)
                        row--;
                     else
                        goto breakOut;
                     realrow = upside_down ? row : rows - 1 - row;
                     pixbuf = targa_rgba + realrow*columns*4;
                  }
               }
            }
            else {                            // non run-length packet
               ChkBounds ("LoadTGA5", buf - (byte *)targa_header + packetSize * targa_header->pixel_size / 8, com_filesize, filename);
               for(j=0;j<packetSize;j++) {
                  blue = *buf++;
                  green = *buf++;
                  red = *buf++;
                  *pixbuf++ = red;
                  *pixbuf++ = green;
                  *pixbuf++ = blue;
                  *pixbuf++ = alpha ? *buf++ : (blend ? (red + green + blue) / 3 : 255); // Better way?;
                  column++;
                  if (column==columns) { // pixel packet run spans across rows
                     column=0;
                     if (row>0)
                        row--;
                     else
                        goto breakOut;
                     realrow = upside_down ? row : rows - 1 - row;
                     pixbuf = targa_rgba + realrow*columns*4;
                  }
               }
            }
         }
         breakOut:;
      }
   }

   *width = targa_header->width;
   *height = targa_header->height;

   free (targa_header);

   return targa_rgba;
}


Now the above expects a 4th parameter ... so set that to 1.

And it appears you would need this as well:

Code:
static unsigned short SwapShort (unsigned short *SVal)
{
   byte *Buf = (byte *)SVal;

   return (unsigned short)(Buf[0] + Buf[1] * 256);
}

static void ChkBounds (char *Function, int Val, int MaxVal, char *FileName)
{
   if (Val > MaxVal)
      Sys_Error ("%s: invalid buffer access (%d, max = %d) in %s", Function, Val, MaxVal, FileName);
}


These should for the purpose of simplicity be above the LoadTga function.


Last edited by Baker on Thu Nov 27, 2008 3:03 am; edited 5 times in total
Back to top
View user's profile Send private message
ceriux



Joined: 06 Sep 2008
Posts: 968
Location: Florida, USA

PostPosted: Thu Nov 27, 2008 2:50 am    Post subject: Reply with quote

why not look at the darkplaces source and see what you can while looking through the tutorial, you could probably see how they defined it and where.
_________________
QuakeDB - Quake ModDB Group
Back to top
View user's profile Send private message Yahoo Messenger
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Thu Nov 27, 2008 3:15 am    Post subject: Reply with quote

hmm that's a good idea, or maybe i should start at tomaz quake?

i believe im looking for a "#define column0 ###"


oh ya never do a search for "E" in the qrack source

Quote:
65745 occurrence(s) have been found.



!!!!realizes he missed 95% of bakers post Shocked


oh does that code require your alpha support tutorial? because i haven't gotten to that one yet, and this tga/pcx ones has been at the top of my browser for half a month now
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Thu Nov 27, 2008 3:53 am    Post subject: Reply with quote

MeTcHsteekle wrote:

oh does that code require your alpha support tutorial?


Nope, has nothing to do with it.

Some of the tutorials at the QuakeSrc.org don't quite work, per se. I think you found one of them.
Back to top
View user's profile Send private message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Sat Nov 29, 2008 2:18 am    Post subject: Reply with quote

ok thanks for the heads up that "there could be more (NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO)"

ill just have to read thru more careful next time Wink

now i have rid my code of its terrible errors Very Happy
_________________
bah
Back to top
View user's profile Send private message AIM Address
Baker



Joined: 14 Mar 2006
Posts: 1538

PostPosted: Sat Nov 29, 2008 11:16 am    Post subject: Reply with quote

Create a folder where you'll keep all of your engine stuff.

I use e:\engine

Create a functional copy of a compile-ready stock id1 Quake.

I use e:\engine\locked-quakereal

Right click the folder and do Properties -> "read-only".

When you want to do experiments, copy the folder and right click it and remove the read only status.

Then do the tutorials you can or play with WinMerge against different fairly faithful (and hence, not completely rewritten) engines like:

1. ProQuake 3.50 (easiest to work with, no graphics changes).
2. FitzQuake (2nd easiest to work with, few non-graphics changes except console and cvar callback)
3. Enhanced GLQuake (3rd easiest to work with)
4. QIP Quake (has some interesting fixes in it)
5. JoeQuake 0.14 (in most ways, the cleanest codebase for a baseline Quake)
6. Early DarkPlaces, like DarkPlaces 1.05 (*)

Get TextPad 5 or another more sophisticated text editor -- I like TextPad 5 because it does more while still using the "keep it simple" philosophy, and use Search -> Find in Files against your source codes a lot (be sure to set the filter to *.c; *.h; *.cpp; *.m).

Learning to modify the engine is hard because there are a lot of different sections. But the more you do, the more you understand. After a while, some things will start to become very obvious.

(*) That was some invaluable advice from MH I once got.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Inside3d Forums Forum Index -> Engine Programming All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2004 phpBB Group