]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/client/wall.qc
fix note-off during decay or attack stage when above sustain level
[divverent/nexuiz.git] / data / qcsrc / client / wall.qc
1 .float lip;
2
3 void Ent_Wall_Draw()
4 {
5         float f;
6         vector save;
7
8         InterpolateOrigin_Do();
9
10         save = self.origin;
11         f = BGMScript(self);
12         if(f >= 0)
13         {
14                 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
15                         self.alpha = 1 + self.lip * f;
16                 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
17                         self.alpha = 1 - self.lip * (1 - f);
18                 self.origin = self.origin + self.movedir * f;
19         }
20         else
21         {
22                 self.alpha = 1;
23         }
24
25         R_AddEntity(self);
26
27         self.origin = save;
28 }
29
30 void Ent_Wall_Remove()
31 {
32         if(self.bgmscript)
33                 strunzone(self.bgmscript);
34         self.bgmscript = string_null;
35 }
36
37 void Ent_Wall()
38 {
39         float f;
40         InterpolateOrigin_Undo();
41         self.iflags = IFLAG_ANGLES;
42
43         f = ReadByte();
44
45         if(f & 1)
46         {
47                 if(f & 0x40)
48                         self.colormap = ReadShort();
49                 else
50                         self.colormap = 0;
51         }
52
53         if(f & 2)
54         {
55                 self.origin_x = ReadCoord();
56                 self.origin_y = ReadCoord();
57                 self.origin_z = ReadCoord();
58         }
59
60         if(f & 4)
61         {
62                 if(f & 0x10)
63                 {
64                         self.angles_x = ReadAngle();
65                         self.angles_y = ReadAngle();
66                         self.angles_z = ReadAngle();
67                 }
68                 else
69                         self.angles = '0 0 0';
70         }
71
72         if(f & 8)
73         {
74                 self.modelindex = ReadShort();
75                 self.solid = ReadByte();
76                 self.scale = ReadByte() / 16.0;
77                 if(f & 0x20)
78                 {
79                         self.mins_x = ReadCoord();
80                         self.mins_y = ReadCoord();
81                         self.mins_z = ReadCoord();
82                         self.maxs_x = ReadCoord();
83                         self.maxs_y = ReadCoord();
84                         self.maxs_z = ReadCoord();
85                 }
86                 else
87                         self.mins = self.maxs = '0 0 0';
88                 if(self.bgmscript)
89                         strunzone(self.bgmscript);
90                 self.bgmscript = strzone(ReadString());
91                 if(self.bgmscript != "")
92                 {
93                         self.bgmscriptattack = ReadByte() / 64.0;
94                         self.bgmscriptdecay = ReadByte() / 64.0;
95                         self.bgmscriptsustain = ReadByte() / 255.0;
96                         self.bgmscriptrelease = ReadByte() / 64.0;
97                         self.movedir_x = ReadCoord();
98                         self.movedir_y = ReadCoord();
99                         self.movedir_z = ReadCoord();
100                         self.lip = ReadByte() / 255.0;
101                 }
102                 BGMScript_InitEntity(self);
103         }
104
105         InterpolateOrigin_Note();
106
107         self.entremove = Ent_Wall_Remove;
108         self.draw = Ent_Wall_Draw;
109 }