2 .float playerdemo_mode;
3 .float playerdemo_starttime;
4 .float playerdemo_time;
5 #define PLAYERDEMO_MODE_OFF 0
6 #define PLAYERDEMO_MODE_READING 1
7 #define PLAYERDEMO_MODE_WRITING 2
10 self.playerdemo_mode = PLAYERDEMO_MODE_OFF;
12 void playerdemo_shutdown()
14 if(self.playerdemo_mode != PLAYERDEMO_MODE_OFF)
16 print("playerdemo: ", self.netname, " closed\n");
17 fclose(self.playerdemo_fh);
19 self.playerdemo_mode = 0;
21 void playerdemo_open_read(string f)
23 playerdemo_shutdown();
24 self.playerdemo_mode = PLAYERDEMO_MODE_READING;
25 self.playerdemo_fh = fopen(f, FILE_READ);
26 self.playerdemo_starttime = time - 1;
27 self.playerdemo_time = stof(fgets(self.playerdemo_fh));
28 self.playerdemo_time += self.playerdemo_starttime;
29 self.movetype = MOVETYPE_NONE;
30 print("playerdemo: ", self.netname, " reading from ", f, "\n");
32 void playerdemo_open_write(string f)
34 playerdemo_shutdown();
35 self.playerdemo_mode = PLAYERDEMO_MODE_WRITING;
36 self.playerdemo_fh = fopen(f, FILE_WRITE);
37 self.playerdemo_starttime = time - 1;
38 print("playerdemo: ", self.netname, " writing to ", f, "\n");
39 print("WARNING: playerdemo file format is incomplete and not stable yet. DO NOT RELY ON IT!\n");
41 #define PLAYERDEMO_FIELD(func,t,f) func##t(f,#f);
42 #define PLAYERDEMO_FIELDS(func) \
43 PLAYERDEMO_FIELD(func,originvector,origin) \
44 PLAYERDEMO_FIELD(func,vector,angles) \
45 PLAYERDEMO_FIELD(func,sizevector,mins) \
46 PLAYERDEMO_FIELD(func,sizevector,maxs) \
47 PLAYERDEMO_FIELD(func,vector,v_angle) \
48 PLAYERDEMO_FIELD(func,modelstring,model) \
49 PLAYERDEMO_FIELD(func,string,playermodel) \
50 PLAYERDEMO_FIELD(func,float,skin) \
51 PLAYERDEMO_FIELD(func,string,playerskin) \
52 PLAYERDEMO_FIELD(func,float,frame) \
53 PLAYERDEMO_FIELD(func,float,effects) \
54 PLAYERDEMO_FIELD(func,float,switchweapon) \
55 PLAYERDEMO_FIELD(func,float,BUTTON_ATCK) \
56 PLAYERDEMO_FIELD(func,float,BUTTON_ATCK2) \
57 PLAYERDEMO_FIELD(func,float,BUTTON_CROUCH) \
58 PLAYERDEMO_FIELD(func,float,BUTTON_JETPACK) \
59 PLAYERDEMO_FIELD(func,float,BUTTON_USE) \
60 PLAYERDEMO_FIELD(func,float,flags) \
63 void playerdemo_write_originvector(.vector f, string name)
65 fputs(self.playerdemo_fh, strcat(vtos(self.f), "\n"));
67 void playerdemo_write_sizevector(.vector f, string name)
69 fputs(self.playerdemo_fh, strcat(vtos(self.f), "\n"));
71 void playerdemo_write_vector(.vector f, string name)
73 fputs(self.playerdemo_fh, strcat(vtos(self.f), "\n"));
75 void playerdemo_write_string(.string f, string name)
77 fputs(self.playerdemo_fh, strcat(self.f, "\n"));
79 void playerdemo_write_modelstring(.string f, string name)
81 fputs(self.playerdemo_fh, strcat(self.f, "\n"));
83 void playerdemo_write_float(.float f, string name)
85 fputs(self.playerdemo_fh, strcat(ftos(self.f), "\n"));
87 void playerdemo_write()
89 if(self.playerdemo_mode != PLAYERDEMO_MODE_WRITING)
91 fputs(self.playerdemo_fh, strcat(ftos(time - self.playerdemo_starttime), "\n"));
92 PLAYERDEMO_FIELDS(playerdemo_write_)
94 void playerdemo_read_originvector(.vector f, string name)
96 setorigin(self, stov(fgets(self.playerdemo_fh)));
98 void playerdemo_read_sizevector(.vector f, string name)
100 self.f = stov(fgets(self.playerdemo_fh));
101 setsize(self, self.mins, self.maxs);
103 void playerdemo_read_vector(.vector f, string name)
105 self.f = stov(fgets(self.playerdemo_fh));
107 void playerdemo_read_string(.string f, string name)
110 s = fgets(self.playerdemo_fh);
120 void playerdemo_read_modelstring(.string f, string name)
123 s = fgets(self.playerdemo_fh);
127 void playerdemo_read_float(.float f, string name)
129 self.f = stof(fgets(self.playerdemo_fh));
131 float playerdemo_read()
133 if(self.playerdemo_mode != PLAYERDEMO_MODE_READING)
135 if(self.playerdemo_time < 0)
139 while(time >= self.playerdemo_time)
141 PLAYERDEMO_FIELDS(playerdemo_read_)
143 time = self.playerdemo_time;
145 // not running physics though... this is just so we can run weapon stuff
148 self.playerdemo_time = stof(fgets(self.playerdemo_fh));
149 if(self.playerdemo_time == 0)
151 self.playerdemo_time = -1;
154 self.playerdemo_time += self.playerdemo_starttime;
156 self.velocity = '0 0 0';