4 #include "../dpdefs/progsdefs.qh"
5 #include "../dpdefs/dpextensions.qh"
7 #include "playerdemo.qh"
11 .float playerdemo_mode;
12 .float playerdemo_starttime;
13 .float playerdemo_time;
14 const float PLAYERDEMO_MODE_OFF = 0;
15 const float PLAYERDEMO_MODE_READING = 1;
16 const float PLAYERDEMO_MODE_WRITING = 2;
17 void playerdemo_init()
19 self.playerdemo_mode = PLAYERDEMO_MODE_OFF;
21 void playerdemo_shutdown()
23 if(self.playerdemo_mode != PLAYERDEMO_MODE_OFF)
25 print("playerdemo: ", self.netname, " closed\n");
26 fclose(self.playerdemo_fh);
28 self.playerdemo_mode = 0;
30 void playerdemo_open_read(string f)
32 playerdemo_shutdown();
33 self.playerdemo_mode = PLAYERDEMO_MODE_READING;
34 self.playerdemo_fh = fopen(f, FILE_READ);
35 self.playerdemo_starttime = time - 1;
36 self.playerdemo_time = stof(fgets(self.playerdemo_fh));
37 self.playerdemo_time += self.playerdemo_starttime;
38 self.movetype = MOVETYPE_NONE;
39 print("playerdemo: ", self.netname, " reading from ", f, "\n");
41 void playerdemo_open_write(string f)
43 playerdemo_shutdown();
44 self.playerdemo_mode = PLAYERDEMO_MODE_WRITING;
45 self.playerdemo_fh = fopen(f, FILE_WRITE);
46 self.playerdemo_starttime = time - 1;
47 print("playerdemo: ", self.netname, " writing to ", f, "\n");
48 print("WARNING: playerdemo file format is incomplete and not stable yet. DO NOT RELY ON IT!\n");
50 #define PLAYERDEMO_FIELD(func,t,f) func##t(f,#f);
51 #define PLAYERDEMO_FIELDS(func) \
52 PLAYERDEMO_FIELD(func,originvector,origin) \
53 PLAYERDEMO_FIELD(func,vector,angles) \
54 PLAYERDEMO_FIELD(func,sizevector,mins) \
55 PLAYERDEMO_FIELD(func,sizevector,maxs) \
56 PLAYERDEMO_FIELD(func,vector,v_angle) \
57 PLAYERDEMO_FIELD(func,modelstring,model) \
58 PLAYERDEMO_FIELD(func,string,playermodel) \
59 PLAYERDEMO_FIELD(func,float,skin) \
60 PLAYERDEMO_FIELD(func,string,playerskin) \
61 PLAYERDEMO_FIELD(func,float,frame) \
62 PLAYERDEMO_FIELD(func,float,effects) \
63 PLAYERDEMO_FIELD(func,float,switchweapon) \
64 PLAYERDEMO_FIELD(func,float,BUTTON_ATCK) \
65 PLAYERDEMO_FIELD(func,float,BUTTON_ATCK2) \
66 PLAYERDEMO_FIELD(func,float,BUTTON_CROUCH) \
67 PLAYERDEMO_FIELD(func,float,BUTTON_HOOK) \
68 PLAYERDEMO_FIELD(func,float,BUTTON_USE) \
69 PLAYERDEMO_FIELD(func,float,flags) \
72 void playerdemo_write_originvector(.vector f, string name)
74 fputs(self.playerdemo_fh, strcat(vtos(self.(f)), "\n"));
76 void playerdemo_write_sizevector(.vector f, string name)
78 fputs(self.playerdemo_fh, strcat(vtos(self.(f)), "\n"));
80 void playerdemo_write_vector(.vector f, string name)
82 fputs(self.playerdemo_fh, strcat(vtos(self.(f)), "\n"));
84 void playerdemo_write_string(.string f, string name)
86 fputs(self.playerdemo_fh, strcat(self.(f), "\n"));
88 void playerdemo_write_modelstring(.string f, string name)
90 fputs(self.playerdemo_fh, strcat(self.(f), "\n"));
92 void playerdemo_write_float(.float f, string name)
94 fputs(self.playerdemo_fh, strcat(ftos(self.(f)), "\n"));
96 void playerdemo_write()
98 if(self.playerdemo_mode != PLAYERDEMO_MODE_WRITING)
100 fputs(self.playerdemo_fh, strcat(ftos(time - self.playerdemo_starttime), "\n"));
101 PLAYERDEMO_FIELDS(playerdemo_write_)
103 void playerdemo_read_originvector(.vector f, string name)
105 setorigin(self, stov(fgets(self.playerdemo_fh)));
107 void playerdemo_read_sizevector(.vector f, string name)
109 self.(f) = stov(fgets(self.playerdemo_fh));
110 setsize(self, self.mins, self.maxs);
112 void playerdemo_read_vector(.vector f, string name)
114 self.(f) = stov(fgets(self.playerdemo_fh));
116 void playerdemo_read_string(.string f, string name)
118 string s = fgets(self.playerdemo_fh);
125 self.(f) = strzone(s);
128 void playerdemo_read_modelstring(.string f, string name)
130 string s = fgets(self.playerdemo_fh);
134 void playerdemo_read_float(.float f, string name)
136 self.(f) = stof(fgets(self.playerdemo_fh));
138 float playerdemo_read()
140 if(self.playerdemo_mode != PLAYERDEMO_MODE_READING)
142 if(self.playerdemo_time < 0)
146 while(time >= self.playerdemo_time)
148 PLAYERDEMO_FIELDS(playerdemo_read_)
150 time = self.playerdemo_time;
152 // not running physics though... this is just so we can run weapon stuff
155 self.playerdemo_time = stof(fgets(self.playerdemo_fh));
156 if(self.playerdemo_time == 0)
158 self.playerdemo_time = -1;
161 self.playerdemo_time += self.playerdemo_starttime;
163 self.velocity = '0 0 0';