summaryrefslogtreecommitdiffstats
path: root/DTCompatibility.c
blob: d3ae922c2c4bea17d7dfaa2414bcc030ffa3065f (plain)
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
/*-- Avoid errors from non-existing Engine-Functions --*/

#strict 2

static hostFeatures;
static hostTime;

global func SetGameComment() { return _inherited(...); }
global func IsHost() { return _inherited(...); }
global func RequestHostFeature(string feature) { if(!HaveHostFeature(feature) || feature == "HostTime") return _inherited(feature, ...); }

global func AnnounceHostFeature(string feature)
{
	hostFeatures || (hostFeatures = []);
	hostFeatures[GetLength(hostFeatures)] = feature;
}

global func HaveHostFeature(string feature)
{
	hostFeatures || (hostFeatures = []);
	return GetIndexOf(feature, hostFeatures) != -1;
}

global func ReRequestHostFeatures()
{
	if(IsNetwork())
	{
		var features = hostFeatures;
		hostFeatures = [];

		if(features)
		{
			for(var feature in features)
			{
				RequestHostFeature(feature);
			}
		}
	}
}

global func AnnounceHostTime(int time)
{
	hostTime = time;
}

global func GetSystemTime(int what)
{
	if(HaveHostFeature("HostTime"))
	{
		if(what == 10) // is leap year
		{
			var year = GetSystemTime(0);
			return !!((!(year % 4) && year % 100) || !(year % 400));
		}
		if(what == 9) return hostTime; // timestamp
		if(what == 8) // day of year
		{
			return (hostTime - (GetSystemTime(0) - 1970) * 31556926)/(3600*24) + 1;
		}
		if(what == 7) return 0;
		if(what == 6) return hostTime % 60;
		if(what == 5) return (hostTime/60) % 60;
		if(what == 4) return (hostTime/3600) % 24;
		if(what == 3)
		{
			var dayofyear = GetSystemTime(8);
			var leapyear = GetSystemTime(10);
			if(dayofyear < 32) return dayofyear;
			else if(dayofyear < 60 + leapyear) return dayofyear - 31;
			else if(dayofyear < 91 + leapyear) return dayofyear - 59;
			else if(dayofyear < 121 + leapyear) return dayofyear - (90 + leapyear);
			else if(dayofyear < 152 + leapyear) return dayofyear - (120 + leapyear);
			else if(dayofyear < 182 + leapyear) return dayofyear - (151 + leapyear);
			else if(dayofyear < 213 + leapyear) return dayofyear - (181 + leapyear);
			else if(dayofyear < 244 + leapyear) return dayofyear - (212 + leapyear);
			else if(dayofyear < 274 + leapyear) return dayofyear - (243 + leapyear);
			else if(dayofyear < 305 + leapyear) return dayofyear - (273 + leapyear);
			else if(dayofyear < 335 + leapyear) return dayofyear - (204 + leapyear);
			else return dayofyear - (334 + leapyear);
		}
		if(what == 2)
		{
			return ((hostTime/86400) + 4) % 7;
		}
		if(what == 1)
		{
			var dayofyear = GetSystemTime(8);
			var leapyear = GetSystemTime(10);
			if(dayofyear < 32) return 1;
			else if(dayofyear < 60 + leapyear) return 2;
			else if(dayofyear < 91 + leapyear) return 3;
			else if(dayofyear < 121 + leapyear) return 4;
			else if(dayofyear < 152 + leapyear) return 5;
			else if(dayofyear < 182 + leapyear) return 6;
			else if(dayofyear < 213 + leapyear) return 7;
			else if(dayofyear < 244 + leapyear) return 8;
			else if(dayofyear < 274 + leapyear) return 9;
			else if(dayofyear < 305 + leapyear) return 10;
			else if(dayofyear < 335 + leapyear) return 11;
			else return 12;
		}
		if(what == 0) return 1970 + ((hostTime + 31556926 * 2)/(31556926)) - 2;
	}
	else return _inherited(what, ...);
}