Annotation of src/build.h, revision 1.1.1.1

1.1       root        1: #define MAXSECTORS 1024
                      2: #define MAXWALLS 8192
                      3: #define MAXSPRITES 4096
                      4: 
                      5: #define MAXTILES 4096
                      6: #define MAXSTATUS 1024
                      7: #define MAXPLAYERS 16
                      8: #define MAXXDIM 1600
                      9: #define MAXYDIM 1200
                     10: #define MAXPALOOKUPS 256
                     11: #define MAXPSKYTILES 256
                     12: #define MAXSPRITESONSCREEN 1024
                     13: 
                     14:        //Make all variables in BUILD.H defined in the ENGINE,
                     15:        //and externed in GAME
                     16: #ifdef ENGINE
                     17:        #define EXTERN
                     18: #else
                     19:        #define EXTERN extern
                     20: #endif
                     21: 
                     22: //ceilingstat/floorstat:
                     23: //   bit 0: 1 = parallaxing, 0 = not                                 "P"
                     24: //   bit 1: 1 = groudraw, 0 = not
                     25: //   bit 2: 1 = swap x&y, 0 = not                                    "F"
                     26: //   bit 3: 1 = double smooshiness                                   "E"
                     27: //   bit 4: 1 = x-flip                                               "F"
                     28: //   bit 5: 1 = y-flip                                               "F"
                     29: //   bit 6: 1 = Align texture to first wall of sector                "R"
                     30: //   bits 7-15: reserved
                     31: 
                     32:        //40 bytes
                     33: typedef struct
                     34: {
                     35:        short wallptr, wallnum;
                     36:        long ceilingz, floorz;
                     37:        short ceilingstat, floorstat;
                     38:        short ceilingpicnum, ceilingheinum;
                     39:        signed char ceilingshade;
                     40:        char ceilingpal, ceilingxpanning, ceilingypanning;
                     41:        short floorpicnum, floorheinum;
                     42:        signed char floorshade;
                     43:        char floorpal, floorxpanning, floorypanning;
                     44:        char visibility, filler;
                     45:        short lotag, hitag, extra;
                     46: } sectortype;
                     47: 
                     48: //cstat:
                     49: //   bit 0: 1 = Blocking wall (use with clipmove, getzrange)         "B"
                     50: //   bit 1: 1 = bottoms of invisible walls swapped, 0 = not          "2"
                     51: //   bit 2: 1 = align picture on bottom (for doors), 0 = top         "O"
                     52: //   bit 3: 1 = x-flipped, 0 = normal                                "F"
                     53: //   bit 4: 1 = masking wall, 0 = not                                "M"
                     54: //   bit 5: 1 = 1-way wall, 0 = not                                  "1"
                     55: //   bit 6: 1 = Blocking wall (use with hitscan / cliptype 1)        "H"
                     56: //   bit 7: 1 = Transluscence, 0 = not                               "T"
                     57: //   bit 8: 1 = y-flipped, 0 = normal                                "F"
                     58: //   bit 9: 1 = Transluscence reversing, 0 = normal                  "T"
                     59: //   bits 10-15: reserved
                     60: 
                     61:        //32 bytes
                     62: typedef struct
                     63: {
                     64:        long x, y;
                     65:        short point2, nextwall, nextsector, cstat;
                     66:        short picnum, overpicnum;
                     67:        signed char shade;
                     68:        char pal, xrepeat, yrepeat, xpanning, ypanning;
                     69:        short lotag, hitag, extra;
                     70: } walltype;
                     71: 
                     72: //cstat:
                     73: //   bit 0: 1 = Blocking sprite (use with clipmove, getzrange)       "B"
                     74: //   bit 1: 1 = transluscence, 0 = normal                            "T"
                     75: //   bit 2: 1 = x-flipped, 0 = normal                                "F"
                     76: //   bit 3: 1 = y-flipped, 0 = normal                                "F"
                     77: //   bits 5-4: 00 = FACE sprite (default)                            "R"
                     78: //             01 = WALL sprite (like masked walls)
                     79: //             10 = FLOOR sprite (parallel to ceilings&floors)
                     80: //   bit 6: 1 = 1-sided sprite, 0 = normal                           "1"
                     81: //   bit 7: 1 = Real centered centering, 0 = foot center             "C"
                     82: //   bit 8: 1 = Blocking sprite (use with hitscan / cliptype 1)      "H"
                     83: //   bit 9: 1 = Transluscence reversing, 0 = normal                  "T"
                     84: //   bits 10-14: reserved
                     85: //   bit 15: 1 = Invisible sprite, 0 = not invisible
                     86: 
                     87:        //44 bytes
                     88: typedef struct
                     89: {
                     90:        long x, y, z;
                     91:        short cstat, picnum;
                     92:        signed char shade;
                     93:        char pal, clipdist, filler;
                     94:        unsigned char xrepeat, yrepeat;
                     95:        signed char xoffset, yoffset;
                     96:        short sectnum, statnum;
                     97:        short ang, owner, xvel, yvel, zvel;
                     98:        short lotag, hitag, extra;
                     99: } spritetype;
                    100: 
                    101: EXTERN sectortype sector[MAXSECTORS];
                    102: EXTERN walltype wall[MAXWALLS];
                    103: EXTERN spritetype sprite[MAXSPRITES];
                    104: 
                    105: EXTERN long spritesortcnt;
                    106: EXTERN spritetype tsprite[MAXSPRITESONSCREEN];
                    107: 
                    108: EXTERN char vidoption;
                    109: EXTERN long xdim, ydim, ylookup[MAXYDIM+1], numpages;
                    110: EXTERN long yxaspect, xyaspect;
                    111: 
                    112: EXTERN short numsectors, numwalls;
                    113: EXTERN volatile long totalclock;
                    114: EXTERN long numframes, randomseed;
                    115: EXTERN short sintable[2048];
                    116: EXTERN char palette[768];
                    117: EXTERN short numpalookups;
                    118: EXTERN char *palookup[MAXPALOOKUPS];
                    119: EXTERN char parallaxtype, showinvisibility;
                    120: EXTERN long parallaxyoffs, parallaxyscale;
                    121: EXTERN long visibility, parallaxvisibility;
                    122: 
                    123: EXTERN long windowx1, windowy1, windowx2, windowy2;
                    124: EXTERN short startumost[MAXXDIM], startdmost[MAXXDIM];
                    125: 
                    126: EXTERN short pskyoff[MAXPSKYTILES], pskybits;
                    127: 
                    128: EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1];
                    129: EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES];
                    130: EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
                    131: 
                    132: EXTERN short tilesizx[MAXTILES], tilesizy[MAXTILES];
                    133: EXTERN char walock[MAXTILES];
                    134: EXTERN long numtiles, picanm[MAXTILES], waloff[MAXTILES];
                    135: 
                    136:        //These variables are for auto-mapping with the draw2dscreen function.
                    137:        //When you load a new board, these bits are all set to 0 - since
                    138:        //you haven't mapped out anything yet.  Note that these arrays are
                    139:        //bit-mapped.
                    140:        //If you want draw2dscreen() to show sprite #54 then you say:
                    141:        //   spritenum = 54;
                    142:        //   show2dsprite[spritenum>>3] |= (1<<(spritenum&7));
                    143:        //And if you want draw2dscreen() to not show sprite #54 then you say:
                    144:        //   spritenum = 54;
                    145:        //   show2dsprite[spritenum>>3] &= ~(1<<(spritenum&7));
                    146:        //Automapping defaults to 0 (do nothing).  If you set automapping to 1,
                    147:        //   then in 3D mode, the walls and sprites that you see will show up the
                    148:        //   next time you flip to 2D mode.
                    149: 
                    150: EXTERN char show2dsector[MAXSECTORS>>3];
                    151: EXTERN char show2dwall[MAXWALLS>>3];
                    152: EXTERN char show2dsprite[MAXSPRITES>>3];
                    153: EXTERN char automapping;
                    154: 
                    155: EXTERN char gotpic[MAXTILES>>3];
                    156: EXTERN char gotsector[MAXSECTORS>>3];
                    157: 
                    158: /*************************************************************************
                    159: POSITION VARIABLES:
                    160: 
                    161:                POSX is your x - position ranging from 0 to 65535
                    162:                POSY is your y - position ranging from 0 to 65535
                    163:                        (the length of a side of the grid in EDITBORD would be 1024)
                    164:                POSZ is your z - position (height) ranging from 0 to 65535, 0 highest.
                    165:                ANG is your angle ranging from 0 to 2047.  Instead of 360 degrees, or
                    166:                         2 * PI radians, I use 2048 different angles, so 90 degrees would
                    167:                         be 512 in my system.
                    168: 
                    169: SPRITE VARIABLES:
                    170: 
                    171:        EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1];
                    172:        EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES];
                    173:        EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
                    174: 
                    175:        Example: if the linked lists look like the following:
                    176:                 ��������������������������������������������������������������Ŀ
                    177:                 �      Sector lists:               Status lists:               �
                    178:                 ��������������������������������������������������������������Ĵ
                    179:                 �  Sector0:  4, 5, 8             Status0:  2, 0, 8             �
                    180:                 �  Sector1:  16, 2, 0, 7         Status1:  4, 5, 16, 7, 3, 9   �
                    181:                 �  Sector2:  3, 9                                              �
                    182:                 ����������������������������������������������������������������
                    183:        Notice that each number listed above is shown exactly once on both the
                    184:                left and right side.  This is because any sprite that exists must
                    185:                be in some sector, and must have some kind of status that you define.
                    186: 
                    187: 
                    188: Coding example #1:
                    189:        To go through all the sprites in sector 1, the code can look like this:
                    190: 
                    191:                sectnum = 1;
                    192:                i = headspritesect[sectnum];
                    193:                while (i != -1)
                    194:                {
                    195:                        nexti = nextspritesect[i];
                    196: 
                    197:                        //your code goes here
                    198:                        //ex: printf("Sprite %d is in sector %d\n",i,sectnum);
                    199: 
                    200:                        i = nexti;
                    201:                }
                    202: 
                    203: Coding example #2:
                    204:        To go through all sprites with status = 1, the code can look like this:
                    205: 
                    206:                statnum = 1;        //status 1
                    207:                i = headspritestat[statnum];
                    208:                while (i != -1)
                    209:                {
                    210:                        nexti = nextspritestat[i];
                    211: 
                    212:                        //your code goes here
                    213:                        //ex: printf("Sprite %d has a status of 1 (active)\n",i,statnum);
                    214: 
                    215:                        i = nexti;
                    216:                }
                    217: 
                    218:                         insertsprite(short sectnum, short statnum);
                    219:                         deletesprite(short spritenum);
                    220:                         changespritesect(short spritenum, short newsectnum);
                    221:                         changespritestat(short spritenum, short newstatnum);
                    222: 
                    223: TILE VARIABLES:
                    224:                NUMTILES - the number of tiles found TILES.DAT.
                    225:                TILESIZX[MAXTILES] - simply the x-dimension of the tile number.
                    226:                TILESIZY[MAXTILES] - simply the y-dimension of the tile number.
                    227:                WALOFF[MAXTILES] - the actual 32-bit offset pointing to the top-left
                    228:                                                                 corner of the tile.
                    229:                PICANM[MAXTILES] - flags for animating the tile.
                    230: 
                    231: TIMING VARIABLES:
                    232:                TOTALCLOCK - When the engine is initialized, TOTALCLOCK is set to zero.
                    233:                        From then on, it is incremented 120 times a second by 1.  That
                    234:                        means that the number of seconds elapsed is totalclock / 120.
                    235:                NUMFRAMES - The number of times the draw3dscreen function was called
                    236:                        since the engine was initialized.  This helps to determine frame
                    237:                        rate.  (Frame rate = numframes * 120 / totalclock.)
                    238: 
                    239: OTHER VARIABLES:
                    240: 
                    241:                STARTUMOST[320] is an array of the highest y-coordinates on each column
                    242:                                that my engine is allowed to write to.  You need to set it only
                    243:                                once.
                    244:                STARTDMOST[320] is an array of the lowest y-coordinates on each column
                    245:                                that my engine is allowed to write to.  You need to set it only
                    246:                                once.
                    247:                SINTABLE[2048] is a sin table with 2048 angles rather than the
                    248:                        normal 360 angles for higher precision.  Also since SINTABLE is in
                    249:                        all integers, the range is multiplied by 16383, so instead of the
                    250:                        normal -1<sin(x)<1, the range of sintable is -16383<sintable[]<16383
                    251:                        If you use this sintable, you can possibly speed up your code as
                    252:                        well as save space in memory.  If you plan to use sintable, 2
                    253:                        identities you may want to keep in mind are:
                    254:                                sintable[ang&2047]       = sin(ang * (3.141592/1024)) * 16383
                    255:                                sintable[(ang+512)&2047] = cos(ang * (3.141592/1024)) * 16383
                    256:                NUMSECTORS - the total number of existing sectors.  Modified every time
                    257:                        you call the loadboard function.
                    258: ***************************************************************************/

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.