~ubuntu-branches/debian/stretch/assaultcube-data/stretch

« back to all changes in this revision

Viewing changes to source/src/world.h

  • Committer: Bazaar Package Importer
  • Author(s): Gonéri Le Bouder, Ansgar Burchardt, Gonéri Le Bouder
  • Date: 2010-04-02 23:37:55 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100402233755-kf74fxwlu634o6vg
Tags: 1.0.4+repack1-1
[ Ansgar Burchardt ]
* debian/control: fix typo in short description

[ Gonéri Le Bouder ]
* Upgrade to 1.0.4
* bump standards-version to 3.8.4
* Add Depends: ${misc:Depends} just to avoid a lintian warning
* Add a debian/source/format file for the same reason

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
enum                            // block types, order matters!
 
2
{
 
3
    SOLID = 0,                  // entirely solid cube [only specifies wtex]
 
4
    CORNER,                     // half full corner of a wall
 
5
    FHF,                        // floor heightfield using neighbour vdelta values
 
6
    CHF,                        // idem ceiling
 
7
    SPACE,                      // entirely empty cube
 
8
    SEMISOLID,                  // generated by mipmapping
 
9
    MAXTYPE
 
10
};
 
11
 
 
12
struct sqr
 
13
{
 
14
    uchar type;                 // one of the above
 
15
    char floor, ceil;           // height, in cubes
 
16
    uchar wtex, ftex, ctex;     // wall/floor/ceil texture ids
 
17
    uchar r, g, b;              // light value at upper left vertex
 
18
    uchar vdelta;               // vertex delta, used for heightfield cubes
 
19
    char defer;                 // used in mipmapping, when true this cube is not a perfect mip
 
20
    char occluded;              // true when occluded
 
21
    uchar utex;                 // upper wall tex id
 
22
    uchar tag;                  // used by triggers
 
23
    uchar reserved[2];
 
24
};
 
25
 
 
26
enum                            // hardcoded texture numbers
 
27
{
 
28
    DEFAULT_SKY = 0,
 
29
    DEFAULT_LIQUID,
 
30
    DEFAULT_WALL,
 
31
    DEFAULT_FLOOR,
 
32
    DEFAULT_CEIL
 
33
};
 
34
 
 
35
#define MAPVERSION 6            // bump if map format changes, see worldio.cpp
 
36
 
 
37
struct header                   // map file format header
 
38
{
 
39
    char head[4];               // "CUBE"
 
40
    int version;                // any >8bit quantity is little endian
 
41
    int headersize;             // sizeof(header)
 
42
    int sfactor;                // in bits
 
43
    int numents;
 
44
    char maptitle[128];
 
45
    uchar texlists[3][256];
 
46
    int waterlevel;
 
47
    uchar watercolor[4];
 
48
    int reserved[14];
 
49
};
 
50
 
 
51
struct mapstats
 
52
{
 
53
    struct header hdr;
 
54
    int entcnt[MAXENTTYPES];
 
55
    uchar *enttypes;
 
56
    short *entposs;
 
57
    int spawns[3];
 
58
    int flags[2];
 
59
    int flagents[2];
 
60
    bool hasffaspawns;
 
61
    bool hasteamspawns;
 
62
    bool hasflags;
 
63
};
 
64
 
 
65
#define TRANSFORMOLDENTITIES(headr) \
 
66
        if(e.type==LIGHT) \
 
67
        { \
 
68
            if(!e.attr2) e.attr2 = 255; /* needed for MAPVERSION<=2 */ \
 
69
            if(e.attr1>32) e.attr1 = 32; /* 12_03 and below */ \
 
70
        } \
 
71
        if(headr.version<MAPVERSION  && strncmp(headr.head,"CUBE",4)==0)  /* only render lights, pl starts and map models on old maps */ \
 
72
        { \
 
73
                        switch(e.type) \
 
74
                        { \
 
75
                                case 1: /* old light */ \
 
76
                                        e.type=LIGHT; \
 
77
                                        break; \
 
78
                                case 2: /* old player start */ \
 
79
                                        e.type=PLAYERSTART; \
 
80
                                        break; \
 
81
                                case 3: \
 
82
                                case 4: \
 
83
                                case 5: \
 
84
                                case 6: \
 
85
                                        e.type=I_AMMO; \
 
86
                                        break; \
 
87
                                case 7: /* old health */ \
 
88
                                        e.type=I_HEALTH; \
 
89
                                        break; \
 
90
                                case 8: /* old boost */ \
 
91
                                        e.type=I_HEALTH; \
 
92
                                        break; \
 
93
                                case 9: /* armor */ \
 
94
                                case 10: /* armor */ \
 
95
                                        e.type=I_ARMOUR; \
 
96
                                        break; \
 
97
                                case 11: /* quad */ \
 
98
                                        e.type=I_AKIMBO; \
 
99
                                        break; \
 
100
                                case 14: /* old map model */ \
 
101
                                        e.type=MAPMODEL; \
 
102
                                        break; \
 
103
                                default: \
 
104
                                        e.type=NOTUSED; \
 
105
                        } \
 
106
        }
 
107
 
 
108
#define SWS(w,x,y,s) (&(w)[((y)<<(s))+(x)])
 
109
#define SW(w,x,y) SWS(w,x,y,sfactor)
 
110
#define S(x,y) SW(world,x,y)            // convenient lookup of a lowest mip cube
 
111
#define SMALLEST_FACTOR 6               // determines number of mips there can be
 
112
#define DEFAULT_FACTOR 8
 
113
#define LARGEST_FACTOR 11               // 10 is already insane
 
114
#define MAXENTITIES 65535
 
115
#define SOLID(x) ((x)->type==SOLID)
 
116
#define MINBORD 2                       // 2 cubes from the edge of the world are always solid
 
117
#define OUTBORD(x,y) ((x)<MINBORD || (y)<MINBORD || (x)>=ssize-MINBORD || (y)>=ssize-MINBORD)
 
118
#define OUTBORDRAD(x,y,rad) (int(x-rad)<MINBORD || int(y-rad)<MINBORD || int(x+rad)>=ssize-MINBORD || (y+rad)>=ssize-MINBORD)
 
119
 
 
120
struct block { int x, y, xs, ys; };
 
121
 
 
122
// vertex array format
 
123
 
 
124
struct vertex { float u, v, x, y, z; uchar r, g, b, a; };
 
125