1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
|
main()
{
maps\mp\_load::main();
maps\mp\_explosive_barrels::main();
maps\mp\_teleport::main();
maps\mp\_breakglass::main();
maps\mp\_elevatorlaby::main();
maps\mp\_elevatorlaby::main();
maps\mp\mp_labyrinth3_fx::main();
ambientPlay("ambient_crash");
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar( "r_specularcolorscale", "1" );
setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","6000");
level.elevatorDown = true; // elevator starts at bottom: true/false
level.elevatorMoving = false; // elevator is not currently moving
level._effect[ "redflash" ] = loadfx( "misc/lift_light_red" ); // loads the 3 different effects required - normally this would go in the _fx.gsc file
level._effect[ "redstatic" ] = loadfx( "misc/lift_light" );
level._effect[ "greenstatic" ] = loadfx( "misc/lift_light_green" );
level.showgreen = true;
level.redflash = false;
level.redstatic = false;
thread elevator_start();
}
elevator_start()
{
level.elevLight = getentarray ("redlightb","targetname");
elevator = getentarray ("elevatorswitch","targetname");
toprightdoor = getent ("trightdoor","targetname");
topleftdoor = getent ("tleftdoor","targetname");
toprightdoor movex(-31,0.05);
topleftdoor moveX(31,0.05);
rightgate = getent ("rightdoor", "targetname");
leftgate = getent ("leftdoor", "targetname");
if ( isdefined(elevator) )
for (i = 0; i < elevator.size; i++)
elevator[i] thread elevator_think();
for(i=0; i<level.elevLight.size; i++)
{
level.elevLight[i] thread flash_red();
level.elevLight[i] thread staticRed();
level.elevLight[i] thread staticGreen();
}
}
elevator_think()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving)
thread elevator_move();
}
}
elevator_move()
{
// read all required entities into script
elevatormodel = getent ("elevatormodel", "targetname");
rightgate = getent ("rightdoor", "targetname");
leftgate = getent ("leftdoor", "targetname");
topblock = getent ("topblock","targetname");
bottomblock = getent ("bottomblock","targetname");
toprightdoor = getent ("trightdoor","targetname");
topleftdoor = getent ("tleftdoor","targetname");
bottomrightdoor = getent ("brightdoor","targetname");
bottomleftdoor = getent ("bleftdoor","targetname");
topgauge = getent ("topgauge","targetname");
bottomgauge = getent ("bottomgauge","targetname");
top_point = getent ("shaft_top","targetname");
bottom_point = getent ("shaft_bottom","targetname");
lamp = getent ("elevatorlight","targetname");
level.showgreen = false;
level.redflash = true;
level.elevatorMoving = true;
hide_trigs(); // hides triggers while elevator is moving
speed = 10;
height = distance( top_point.origin, bottom_point.origin ); // calculates the distance between top and bottom
wait (0.5);
if (level.elevatorDown)
{ // this half of the if statement executes if the elevator is at the bottom (i.e. level.elevatorDown equals true)
bottomblock moveZ(-100,0.2); // blocks gateway before closing visible gates
bottomblock waittill("movedone");
rightgate movex(-31,2,0.5,0.5); // closes right elevator gate
leftgate moveX(31,2,0.5,0.5); // closes left elevator gate
wait 0.5;
bottomrightdoor movex(-31,2,0.5,0.5); // closes right bottom door which blocks entry to elevator shaft.
bottomleftdoor moveX(31,2,0.5,0.5); // closes left bottom door which blocks entry to elevator shaft.
bottomleftdoor waittill("movedone"); // script waits until gate is closed
bottomblock moveZ(100,0.2); // unsets door block (no longer needed)
wait (1); // short pause
level.redflash = false;
level.redstatic = true;
wait (1);
elevatormodel moveZ (height, speed, 1, 1); // moves the cage up
rightgate moveZ (height, speed, 1, 1); // moves the right gate up at same speed as the cage - you can use the linkto technique, but it tends to make the doors shake
leftgate moveZ (height, speed, 1, 1); // moves the left gate up with cage
lamp moveZ (height, speed, 1, 1); // moves the elevator light
topgauge moveZ (14, speed); // moves the elevator position gauge
bottomgauge moveZ (14, speed); //ditto
elevatormodel waittill ("movedone"); // script waits until cage has finished its movement
level.redstatic = false;
level.redflash = true;
wait (1);
toprightdoor movex(31,2,0.5,0.5); // opens top right door
topleftdoor moveX(-31,2,0.5,0.5); // opens top left door
wait 0.5;
rightgate movex(31,2,0.5,0.5); // opens elevator right door
leftgate moveX(-31,2,0.5,0.5); // opens elevator left door
leftgate waittill("movedone");
level.elevatorDown = false; // this var tells the script the elevator must go down next time.
}
else { // this half makes the elevator go down - largely the same as above, but in reverse order
topblock moveZ(-100,0.2);
topblock waittill("movedone");
rightgate movex(-31,2,0.5,0.5);
leftgate moveX(31,2,0.5,0.5);
wait 0.5;
toprightdoor movex(-31,2,0.5,0.5);
topleftdoor moveX(31,2,0.5,0.5);
leftgate waittill("movedone");
topleftdoor waittill("movedone");
topblock moveZ(100,0.2);
level.redflash = false;
level.redstatic = true;
wait (1);
wait (1);
elevatormodel moveZ (height - (height * 2), speed, 1, 1);
rightgate moveZ (height - (height * 2), speed, 1, 1);
leftgate moveZ (height - (height * 2), speed, 1, 1);
lamp moveZ (height - (height * 2), speed, 1, 1);
topgauge moveZ (-14, speed);
bottomgauge moveZ (-14, speed);
elevatormodel waittill ("movedone");
level.redstatic = false;
level.redflash = true;
wait (1);
bottomrightdoor movex(31,2,0.5,0.5);
bottomleftdoor moveX(-31,2,0.5,0.5);
wait 0.5;
rightgate movex(31,2,0.5,0.5);
leftgate moveX(-31,2,0.5,0.5);
leftgate waittill("movedone");
level.elevatorDown = true;
}
level.redflash = false;
wait 0.5;
level.showgreen = true;
level.elevatorMoving = false;
show_trigs(); // shows triggers again.
}
//=================================================//
// These two functions show //
// and hide the triggers //
//=================================================//
hide_trigs()
{
switches = getentarray ("elevatorswitch","targetname");
for(i=0; i<switches.size; i++) switches[i] maps\mp\_utility::triggerOff();
}
show_trigs()
{
switches = getentarray ("elevatorswitch","targetname");
for(i=0; i<switches.size; i++) switches[i] maps\mp\_utility::triggerOn();
}
//=================================================//
// These three functions control the //
// elevator indicator lights //
//=================================================//
flash_red()
{
while(1)
{
while(level.redflash)
{
PlayFX( level._effect[ "redflash" ], self.origin );
wait 0.5;
}
wait 0.05;
}
}
staticRed()
{
while(1)
{
while(level.redstatic)
{
PlayFX( level._effect[ "redstatic" ], self.origin );
wait 0.1;
}
wait 0.05;
}
}
staticGreen()
{
while(1)
{
while(level.showgreen)
{
PlayFX( level._effect[ "greenstatic" ], self.origin );
wait 0.1;
}
wait 0.05;
}
} |