author | alfadur |
Fri, 09 Aug 2019 23:41:46 +0300 | |
changeset 15312 | 6794b6ad3f86 |
parent 14953 | f27f00fabc0d |
permissions | -rw-r--r-- |
4976 | 1 |
(* |
2 |
* Hedgewars, a free turn based strategy game |
|
11046 | 3 |
* Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> |
4976 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10104
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
4976 | 17 |
*) |
18 |
||
4374 | 19 |
{$INCLUDE "options.inc"} |
4976 | 20 |
|
4374 | 21 |
unit uUtils; |
22 |
||
23 |
interface |
|
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
24 |
uses uTypes, uFloat; |
4374 | 25 |
|
11829 | 26 |
// returns s with whitespaces (chars <= #32) removed form both ends |
27 |
function Trim(s: shortstring) : shortstring; |
|
28 |
||
4374 | 29 |
procedure SplitBySpace(var a, b: shortstring); |
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
30 |
procedure SplitByChar(var a, b: shortstring; c: char); |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
31 |
procedure SplitByCharA(var a, b: ansistring; c: char); |
4374 | 32 |
|
13985
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
33 |
procedure EscapeCharA(var a: ansistring; e: char); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
34 |
procedure UnEscapeCharA(var a: ansistring; e: char); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
35 |
|
11831
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
36 |
function ExtractFileDir(s: shortstring) : shortstring; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
37 |
function ExtractFileName(s: shortstring) : shortstring; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
38 |
|
4374 | 39 |
function EnumToStr(const en : TGearType) : shortstring; overload; |
4453 | 40 |
function EnumToStr(const en : TVisualGearType) : shortstring; overload; |
4374 | 41 |
function EnumToStr(const en : TSound) : shortstring; overload; |
42 |
function EnumToStr(const en : TAmmoType) : shortstring; overload; |
|
9642
8a691e0f117a
use consts for TStatInfo enum
Periklis Ntanasis <pntanasis@gmail.com>
parents:
9377
diff
changeset
|
43 |
function EnumToStr(const en : TStatInfoType) : shortstring; overload; |
4374 | 44 |
function EnumToStr(const en : THogEffect) : shortstring; overload; |
5118 | 45 |
function EnumToStr(const en : TCapGroup) : shortstring; overload; |
10280
762c256552e9
WIP: PlaceSprite for lua API. also changed PlaceGirder so that it will return true/false for whether placing was successful too
sheepluva
parents:
10131
diff
changeset
|
46 |
function EnumToStr(const en : TSprite) : shortstring; overload; |
10603
bda5c7caf396
switch mapgen to enum. should still try and make sure the values are backwards compatible if possible.
nemo
parents:
10595
diff
changeset
|
47 |
function EnumToStr(const en : TMapGen) : shortstring; overload; |
11884
c6eafb6f2735
Add WorldEdge to Lua API to expose/change world edge type
Wuzzy <almikes@aol.com>
parents:
11831
diff
changeset
|
48 |
function EnumToStr(const en : TWorldEdge) : shortstring; overload; |
4374 | 49 |
|
50 |
function Min(a, b: LongInt): LongInt; inline; |
|
10562 | 51 |
function MinD(a, b: double) : double; inline; |
4374 | 52 |
function Max(a, b: LongInt): LongInt; inline; |
53 |
||
54 |
function IntToStr(n: LongInt): shortstring; |
|
7151 | 55 |
function StrToInt(s: shortstring): LongInt; |
13884
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
56 |
//function StrToInt(s: shortstring; var success: boolean): LongInt; |
4374 | 57 |
function FloatToStr(n: hwFloat): shortstring; |
58 |
||
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
59 |
function DxDy2Angle(const _dY, _dX: hwFloat): real; inline; |
4374 | 60 |
function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; |
61 |
function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; |
|
6894 | 62 |
function DxDy2AttackAnglef(const _dY, _dX: extended): LongInt; |
4374 | 63 |
|
64 |
procedure SetLittle(var r: hwFloat); |
|
65 |
||
66 |
function Str2PChar(const s: shortstring): PChar; |
|
67 |
function DecodeBase64(s: shortstring): shortstring; |
|
68 |
||
69 |
function isPowerOf2(i: Longword): boolean; |
|
70 |
function toPowerOf2(i: Longword): Longword; inline; |
|
71 |
||
72 |
function endian(independent: LongWord): LongWord; inline; |
|
73 |
||
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
74 |
function CheckCJKFont(s: ansistring; font: THWFont): THWFont; |
4380 | 75 |
|
4374 | 76 |
procedure AddFileLog(s: shortstring); |
7180 | 77 |
procedure AddFileLogRaw(s: pchar); cdecl; |
4374 | 78 |
|
4900 | 79 |
function CheckNoTeamOrHH: boolean; inline; |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
80 |
|
4403 | 81 |
function GetLaunchX(at: TAmmoType; dir: LongInt; angle: LongInt): LongInt; |
82 |
function GetLaunchY(at: TAmmoType; angle: LongInt): LongInt; |
|
83 |
||
12740 | 84 |
function CalcWorldWrap(X, radius: LongInt): LongInt; |
85 |
||
14900
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
86 |
procedure updateVolumeDelta(precise: boolean); |
14901
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
87 |
procedure updateCursorMovementDelta(precise: boolean; dir: LongInt; var cursorVar: LongInt); |
14900
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
88 |
|
11775 | 89 |
function read1stLn(filePath: shortstring): shortstring; |
11780
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
90 |
function readValueFromINI(key, filePath: shortstring): shortstring; |
11775 | 91 |
|
7151 | 92 |
{$IFNDEF PAS2C} |
93 |
procedure Write(var f: textfile; s: shortstring); |
|
94 |
procedure WriteLn(var f: textfile; s: shortstring); |
|
10080 | 95 |
function StrLength(s: PChar): Longword; |
10690 | 96 |
procedure SetLengthA(var s: ansistring; len: Longword); |
7151 | 97 |
{$ENDIF} |
98 |
||
8204 | 99 |
function isPhone: Boolean; inline; |
100 |
||
101 |
{$IFDEF IPHONEOS} |
|
102 |
procedure startLoadingIndicator; cdecl; external; |
|
103 |
procedure stopLoadingIndicator; cdecl; external; |
|
104 |
procedure saveFinishedSynching; cdecl; external; |
|
105 |
function isApplePhone: Boolean; cdecl; external; |
|
106 |
procedure AudioServicesPlaySystemSound(num: LongInt); cdecl; external; |
|
107 |
{$ENDIF} |
|
108 |
||
8498
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
109 |
function sanitizeForLog(s: shortstring): shortstring; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
110 |
function sanitizeCharForLog(c: char): shortstring; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
111 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7565
diff
changeset
|
112 |
procedure initModule(isNotPreview: boolean); |
4374 | 113 |
procedure freeModule; |
114 |
||
4385 | 115 |
|
4374 | 116 |
implementation |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
117 |
uses {$IFNDEF PAS2C}typinfo, SDLh, {$ENDIF}Math, uConsts, uVariables, uPhysFSLayer, uDebug; |
4374 | 118 |
|
119 |
{$IFDEF DEBUGFILE} |
|
11637 | 120 |
var logFile: PFSFile; |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
121 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
122 |
logMutex: PSDL_mutex; // mutex for debug file |
4374 | 123 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
124 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
125 |
var CharArray: array[0..255] of Char; |
4374 | 126 |
|
11829 | 127 |
// All leading/tailing characters with ordinal values less than or equal to 32 (a space) are stripped. |
128 |
function Trim(s: shortstring) : shortstring; |
|
129 |
var len, left, right: integer; |
|
130 |
begin |
|
131 |
||
132 |
len:= Length(s); |
|
133 |
||
134 |
if len = 0 then |
|
135 |
exit(s); |
|
136 |
||
137 |
// find first non-whitespace |
|
138 |
left:= 1; |
|
139 |
while left <= len do |
|
140 |
begin |
|
141 |
if s[left] > #32 then |
|
142 |
break; |
|
143 |
inc(left); |
|
144 |
end; |
|
145 |
||
146 |
// find last non-whitespace |
|
147 |
right:= len; |
|
148 |
while right >= 1 do |
|
149 |
begin |
|
150 |
if s[right] > #32 then |
|
151 |
break; |
|
152 |
dec(right); |
|
153 |
end; |
|
154 |
||
155 |
// string is whitespace only |
|
156 |
if left > right then |
|
157 |
exit(''); |
|
158 |
||
159 |
// get string without surrounding whitespace |
|
160 |
len:= right - left + 1; |
|
161 |
||
162 |
Trim:= copy(s, left, len); |
|
163 |
||
164 |
end; |
|
165 |
||
11831
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
166 |
function GetLastSlashPos(var s: shortString) : integer; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
167 |
var lslash: integer; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
168 |
c: char; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
169 |
begin |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
170 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
171 |
// find last slash |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
172 |
lslash:= Length(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
173 |
while lslash >= 1 do |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
174 |
begin |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
175 |
c:= s[lslash]; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
176 |
if (c = #47) or (c = #92) then |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
177 |
break; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
178 |
dec(lslash); end; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
179 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
180 |
GetLastSlashPos:= lslash; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
181 |
end; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
182 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
183 |
function ExtractFileDir(s: shortstring) : shortstring; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
184 |
var lslash: byte; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
185 |
begin |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
186 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
187 |
if Length(s) = 0 then |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
188 |
exit(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
189 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
190 |
lslash:= GetLastSlashPos(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
191 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
192 |
if lslash <= 1 then |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
193 |
exit(''); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
194 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
195 |
s[0]:= char(lslash - 1); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
196 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
197 |
ExtractFileDir:= s; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
198 |
end; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
199 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
200 |
function ExtractFileName(s: shortstring) : shortstring; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
201 |
var lslash, len: byte; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
202 |
begin |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
203 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
204 |
len:= Length(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
205 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
206 |
if len = 0 then |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
207 |
exit(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
208 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
209 |
lslash:= GetLastSlashPos(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
210 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
211 |
if lslash < 1 then |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
212 |
exit(s); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
213 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
214 |
if lslash = len then |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
215 |
exit(''); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
216 |
|
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
217 |
len:= len - lslash; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
218 |
ExtractFilename:= copy(s, lslash + 1, len); |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
219 |
end; |
7654e2357934
implement ExtraftFileDir and ExtractFileName in uUtils
sheepluva
parents:
11829
diff
changeset
|
220 |
|
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
221 |
procedure SplitBySpace(var a,b: shortstring); |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
222 |
begin |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
223 |
SplitByChar(a,b,' '); |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
224 |
end; |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
225 |
|
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
226 |
procedure SplitByChar(var a, b: shortstring; c : char); |
13094
c9cdbf630447
Stop SplitByChar also lowercasing the entire string. Fixes bug 581.
Wuzzy <Wuzzy2@mail.ru>
parents:
12810
diff
changeset
|
227 |
var i: LongInt; |
4374 | 228 |
begin |
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
229 |
i:= Pos(c, a); |
4374 | 230 |
if i > 0 then |
231 |
begin |
|
232 |
b:= copy(a, i + 1, Length(a) - i); |
|
7074 | 233 |
a[0]:= char(Pred(i)) |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
234 |
{$IFDEF PAS2C} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
235 |
a[i] := 0; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
236 |
{$ENDIF} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
237 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
238 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
239 |
b:= ''; |
4374 | 240 |
end; |
241 |
||
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
242 |
{$IFNDEF PAS2C} |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
243 |
procedure SetLengthA(var s: ansistring; len: Longword); |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
244 |
begin |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
245 |
SetLength(s, len) |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
246 |
end; |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
247 |
{$ENDIF} |
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
248 |
|
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
249 |
procedure SplitByCharA(var a, b: ansistring; c: char); |
4374 | 250 |
var i: LongInt; |
251 |
begin |
|
252 |
i:= Pos(c, a); |
|
253 |
if i > 0 then |
|
254 |
begin |
|
255 |
b:= copy(a, i + 1, Length(a) - i); |
|
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
256 |
SetLengthA(a, Pred(i)); |
4374 | 257 |
end else b:= ''; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
258 |
end; { SplitByCharA } |
4374 | 259 |
|
13985
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
260 |
// In the ansistring a, escapes all instances of |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
261 |
// '\e' with an ASCII ESC character, where e is |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
262 |
// a char chosen by you. |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
263 |
procedure EscapeCharA(var a: ansistring; e: char); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
264 |
var i: LongInt; |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
265 |
begin |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
266 |
repeat |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
267 |
i:= Pos(e, a); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
268 |
if (i > 1) and (a[i - 1] = '\') then |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
269 |
begin |
14085 | 270 |
a[i]:= Char($1B); // ASCII ESC |
13985
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
271 |
Delete(a, i - 1, 1); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
272 |
end |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
273 |
else |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
274 |
break; |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
275 |
until (i <= 0); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
276 |
end; { EscapeCharA } |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
277 |
|
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
278 |
// Unescapes a previously escaped string and inserts |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
279 |
// e back into the string. e is a char chosen by you. |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
280 |
procedure UnEscapeCharA(var a: ansistring; e: char); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
281 |
var i: LongInt; |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
282 |
begin |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
283 |
repeat |
14085 | 284 |
i:= Pos(Char($1B), a); // ASCII ESC |
13985
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
285 |
if (i > 0) then |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
286 |
begin |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
287 |
a[i]:= e; |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
288 |
end |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
289 |
else |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
290 |
break; |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
291 |
until (i <= 0); |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
292 |
end; { UnEscapeCharA } |
3183c4dc6e53
Allow to escape | and : character in engine translation files
Wuzzy <Wuzzy2@mail.ru>
parents:
13884
diff
changeset
|
293 |
|
4374 | 294 |
function EnumToStr(const en : TGearType) : shortstring; overload; |
295 |
begin |
|
296 |
EnumToStr:= GetEnumName(TypeInfo(TGearType), ord(en)) |
|
297 |
end; |
|
8838
aa2ffd427f6a
strip PAS2C, old WEB symbols and outdated pas2c sources from default branch, all c-related development is done on the webgl branch
koda
parents:
8575
diff
changeset
|
298 |
|
4453 | 299 |
function EnumToStr(const en : TVisualGearType) : shortstring; overload; |
300 |
begin |
|
301 |
EnumToStr:= GetEnumName(TypeInfo(TVisualGearType), ord(en)) |
|
302 |
end; |
|
4374 | 303 |
|
304 |
function EnumToStr(const en : TSound) : shortstring; overload; |
|
305 |
begin |
|
306 |
EnumToStr:= GetEnumName(TypeInfo(TSound), ord(en)) |
|
307 |
end; |
|
308 |
||
309 |
function EnumToStr(const en : TAmmoType) : shortstring; overload; |
|
310 |
begin |
|
311 |
EnumToStr:= GetEnumName(TypeInfo(TAmmoType), ord(en)) |
|
312 |
end; |
|
313 |
||
9642
8a691e0f117a
use consts for TStatInfo enum
Periklis Ntanasis <pntanasis@gmail.com>
parents:
9377
diff
changeset
|
314 |
function EnumToStr(const en : TStatInfoType) : shortstring; overload; |
8a691e0f117a
use consts for TStatInfo enum
Periklis Ntanasis <pntanasis@gmail.com>
parents:
9377
diff
changeset
|
315 |
begin |
8a691e0f117a
use consts for TStatInfo enum
Periklis Ntanasis <pntanasis@gmail.com>
parents:
9377
diff
changeset
|
316 |
EnumToStr:= GetEnumName(TypeInfo(TStatInfoType), ord(en)) |
8a691e0f117a
use consts for TStatInfo enum
Periklis Ntanasis <pntanasis@gmail.com>
parents:
9377
diff
changeset
|
317 |
end; |
8a691e0f117a
use consts for TStatInfo enum
Periklis Ntanasis <pntanasis@gmail.com>
parents:
9377
diff
changeset
|
318 |
|
4374 | 319 |
function EnumToStr(const en: THogEffect) : shortstring; overload; |
320 |
begin |
|
5118 | 321 |
EnumToStr := GetEnumName(TypeInfo(THogEffect), ord(en)) |
322 |
end; |
|
323 |
||
324 |
function EnumToStr(const en: TCapGroup) : shortstring; overload; |
|
325 |
begin |
|
326 |
EnumToStr := GetEnumName(TypeInfo(TCapGroup), ord(en)) |
|
4374 | 327 |
end; |
8838
aa2ffd427f6a
strip PAS2C, old WEB symbols and outdated pas2c sources from default branch, all c-related development is done on the webgl branch
koda
parents:
8575
diff
changeset
|
328 |
|
10280
762c256552e9
WIP: PlaceSprite for lua API. also changed PlaceGirder so that it will return true/false for whether placing was successful too
sheepluva
parents:
10131
diff
changeset
|
329 |
function EnumToStr(const en: TSprite) : shortstring; overload; |
762c256552e9
WIP: PlaceSprite for lua API. also changed PlaceGirder so that it will return true/false for whether placing was successful too
sheepluva
parents:
10131
diff
changeset
|
330 |
begin |
762c256552e9
WIP: PlaceSprite for lua API. also changed PlaceGirder so that it will return true/false for whether placing was successful too
sheepluva
parents:
10131
diff
changeset
|
331 |
EnumToStr := GetEnumName(TypeInfo(TSprite), ord(en)) |
762c256552e9
WIP: PlaceSprite for lua API. also changed PlaceGirder so that it will return true/false for whether placing was successful too
sheepluva
parents:
10131
diff
changeset
|
332 |
end; |
762c256552e9
WIP: PlaceSprite for lua API. also changed PlaceGirder so that it will return true/false for whether placing was successful too
sheepluva
parents:
10131
diff
changeset
|
333 |
|
10603
bda5c7caf396
switch mapgen to enum. should still try and make sure the values are backwards compatible if possible.
nemo
parents:
10595
diff
changeset
|
334 |
function EnumToStr(const en: TMapGen) : shortstring; overload; |
bda5c7caf396
switch mapgen to enum. should still try and make sure the values are backwards compatible if possible.
nemo
parents:
10595
diff
changeset
|
335 |
begin |
bda5c7caf396
switch mapgen to enum. should still try and make sure the values are backwards compatible if possible.
nemo
parents:
10595
diff
changeset
|
336 |
EnumToStr := GetEnumName(TypeInfo(TMapGen), ord(en)) |
bda5c7caf396
switch mapgen to enum. should still try and make sure the values are backwards compatible if possible.
nemo
parents:
10595
diff
changeset
|
337 |
end; |
bda5c7caf396
switch mapgen to enum. should still try and make sure the values are backwards compatible if possible.
nemo
parents:
10595
diff
changeset
|
338 |
|
11884
c6eafb6f2735
Add WorldEdge to Lua API to expose/change world edge type
Wuzzy <almikes@aol.com>
parents:
11831
diff
changeset
|
339 |
function EnumToStr(const en: TWorldEdge) : shortstring; overload; |
c6eafb6f2735
Add WorldEdge to Lua API to expose/change world edge type
Wuzzy <almikes@aol.com>
parents:
11831
diff
changeset
|
340 |
begin |
c6eafb6f2735
Add WorldEdge to Lua API to expose/change world edge type
Wuzzy <almikes@aol.com>
parents:
11831
diff
changeset
|
341 |
EnumToStr := GetEnumName(TypeInfo(TWorldEdge), ord(en)) |
c6eafb6f2735
Add WorldEdge to Lua API to expose/change world edge type
Wuzzy <almikes@aol.com>
parents:
11831
diff
changeset
|
342 |
end; |
c6eafb6f2735
Add WorldEdge to Lua API to expose/change world edge type
Wuzzy <almikes@aol.com>
parents:
11831
diff
changeset
|
343 |
|
4374 | 344 |
|
345 |
function Min(a, b: LongInt): LongInt; |
|
346 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
347 |
if a < b then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
348 |
Min:= a |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
349 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
350 |
Min:= b |
4374 | 351 |
end; |
352 |
||
10562 | 353 |
function MinD(a, b: double): double; |
354 |
begin |
|
355 |
if a < b then |
|
356 |
MinD:= a |
|
357 |
else |
|
358 |
MinD:= b |
|
359 |
end; |
|
360 |
||
4374 | 361 |
function Max(a, b: LongInt): LongInt; |
362 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
363 |
if a > b then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
364 |
Max:= a |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
365 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
366 |
Max:= b |
4374 | 367 |
end; |
368 |
||
369 |
||
370 |
function IntToStr(n: LongInt): shortstring; |
|
371 |
begin |
|
372 |
str(n, IntToStr) |
|
373 |
end; |
|
374 |
||
13826
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
375 |
// Convert string to longint, with error checking. |
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
376 |
// Success will be set to false when conversion failed. |
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
377 |
// See documentation on Val procedure for syntax of s |
13884
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
378 |
//function StrToInt(s: shortstring; var success: boolean): LongInt; |
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
379 |
//var Code: Word; |
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
380 |
//begin |
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
381 |
//val(s, StrToInt, Code); |
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
382 |
//success:= Code = 0; |
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
383 |
//end; |
13826
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
384 |
|
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
385 |
// Convert string to longint, without error checking |
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
386 |
function StrToInt(s: shortstring): LongInt; |
94d0d1ab7a0e
Rewrite StrToInt code in uStore; get rid of "try" and "except" keywords
Wuzzy <Wuzzy2@mail.ru>
parents:
13317
diff
changeset
|
387 |
begin |
13884
6b2c87490f0a
drop the error checked StrToInt as non-critical - pas2c did not implement it.
nemo
parents:
13882
diff
changeset
|
388 |
val(s, StrToInt); |
7151 | 389 |
end; |
390 |
||
4374 | 391 |
function FloatToStr(n: hwFloat): shortstring; |
392 |
begin |
|
393 |
FloatToStr:= cstr(n) + '_' + inttostr(Lo(n.QWordValue)) |
|
394 |
end; |
|
395 |
||
396 |
||
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
397 |
function DxDy2Angle(const _dY, _dX: hwFloat): real; inline; |
4374 | 398 |
var dY, dX: Extended; |
399 |
begin |
|
7547 | 400 |
dY:= hwFloat2Float(_dY); |
401 |
dX:= hwFloat2Float(_dX); |
|
4374 | 402 |
DxDy2Angle:= arctan2(dY, dX) * 180 / pi |
403 |
end; |
|
404 |
||
405 |
function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; |
|
406 |
const _16divPI: Extended = 16/pi; |
|
407 |
var dY, dX: Extended; |
|
408 |
begin |
|
7547 | 409 |
dY:= hwFloat2Float(_dY); |
410 |
dX:= hwFloat2Float(_dX); |
|
4374 | 411 |
DxDy2Angle32:= trunc(arctan2(dY, dX) * _16divPI) and $1f |
412 |
end; |
|
413 |
||
414 |
function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; |
|
415 |
const MaxAngleDivPI: Extended = cMaxAngle/pi; |
|
416 |
var dY, dX: Extended; |
|
417 |
begin |
|
7547 | 418 |
dY:= hwFloat2Float(_dY); |
419 |
dX:= hwFloat2Float(_dX); |
|
4374 | 420 |
DxDy2AttackAngle:= trunc(arctan2(dY, dX) * MaxAngleDivPI) |
421 |
end; |
|
422 |
||
6894 | 423 |
function DxDy2AttackAnglef(const _dY, _dX: extended): LongInt; inline; |
5151
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5130
diff
changeset
|
424 |
begin |
6894 | 425 |
DxDy2AttackAnglef:= trunc(arctan2(_dY, _dX) * (cMaxAngle/pi)) |
5151
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5130
diff
changeset
|
426 |
end; |
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5130
diff
changeset
|
427 |
|
4374 | 428 |
|
429 |
procedure SetLittle(var r: hwFloat); |
|
430 |
begin |
|
431 |
r:= SignAs(cLittle, r) |
|
432 |
end; |
|
433 |
||
434 |
||
435 |
function isPowerOf2(i: Longword): boolean; |
|
436 |
begin |
|
4981
0c60ade27a0a
Optimize check (not like it is called much, just ffs; not tested)
unc0rr
parents:
4976
diff
changeset
|
437 |
isPowerOf2:= (i and (i - 1)) = 0 |
4374 | 438 |
end; |
439 |
||
440 |
function toPowerOf2(i: Longword): Longword; |
|
441 |
begin |
|
442 |
toPowerOf2:= 1; |
|
443 |
while (toPowerOf2 < i) do toPowerOf2:= toPowerOf2 shl 1 |
|
444 |
end; |
|
445 |
||
446 |
||
447 |
function DecodeBase64(s: shortstring): shortstring; |
|
448 |
const table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
|
10560 | 449 |
var i, t, c: LongInt; |
4374 | 450 |
begin |
451 |
c:= 0; |
|
452 |
for i:= 1 to Length(s) do |
|
453 |
begin |
|
454 |
t:= Pos(s[i], table); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
455 |
if s[i] = '=' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
456 |
inc(c); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
457 |
if t > 0 then |
7074 | 458 |
s[i]:= char(t - 1) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
459 |
else |
7074 | 460 |
s[i]:= #0 |
4374 | 461 |
end; |
462 |
||
463 |
i:= 1; |
|
464 |
t:= 1; |
|
465 |
while i <= length(s) do |
|
466 |
begin |
|
467 |
DecodeBase64[t ]:= char((byte(s[i ]) shl 2) or (byte(s[i + 1]) shr 4)); |
|
468 |
DecodeBase64[t + 1]:= char((byte(s[i + 1]) shl 4) or (byte(s[i + 2]) shr 2)); |
|
469 |
DecodeBase64[t + 2]:= char((byte(s[i + 2]) shl 6) or (byte(s[i + 3]) )); |
|
470 |
inc(t, 3); |
|
471 |
inc(i, 4) |
|
472 |
end; |
|
473 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
474 |
if c < 3 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
475 |
t:= t - c; |
4374 | 476 |
|
7074 | 477 |
DecodeBase64[0]:= char(t - 1) |
4374 | 478 |
end; |
479 |
||
480 |
||
481 |
function Str2PChar(const s: shortstring): PChar; |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
482 |
var i :Integer ; |
4374 | 483 |
begin |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
484 |
for i:= 1 to Length(s) do |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
485 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
486 |
CharArray[i - 1] := s[i]; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
487 |
end; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
488 |
CharArray[Length(s)]:= #0; |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
489 |
Str2PChar:= @(CharArray[0]); |
4374 | 490 |
end; |
491 |
||
492 |
||
493 |
function endian(independent: LongWord): LongWord; inline; |
|
494 |
begin |
|
495 |
{$IFDEF ENDIAN_LITTLE} |
|
496 |
endian:= independent; |
|
497 |
{$ELSE} |
|
498 |
endian:= (((independent and $FF000000) shr 24) or |
|
499 |
((independent and $00FF0000) shr 8) or |
|
500 |
((independent and $0000FF00) shl 8) or |
|
501 |
((independent and $000000FF) shl 24)) |
|
502 |
{$ENDIF} |
|
503 |
end; |
|
504 |
||
505 |
||
506 |
procedure AddFileLog(s: shortstring); |
|
507 |
begin |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
508 |
// s:= s; |
4900 | 509 |
{$IFDEF DEBUGFILE} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
510 |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
511 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
512 |
if SDL_LockMutex(logMutex) <> 0 then |
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
513 |
OutError('Logging mutex could not be locked!', true); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
514 |
{$ENDIF} |
11748
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
515 |
if logFile <> nil then |
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
516 |
pfsWriteLn(logFile, inttostr(GameTicks) + ': ' + s) |
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
517 |
else |
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
518 |
WriteLn(stdout, inttostr(GameTicks) + ': ' + s); |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
519 |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
520 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
521 |
if SDL_UnlockMutex(logMutex) <> 0 then |
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
522 |
OutError('Logging mutex could not be unlocked!', true); |
4900 | 523 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7896
diff
changeset
|
524 |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
525 |
{$ENDIF} |
4374 | 526 |
end; |
527 |
||
7180 | 528 |
procedure AddFileLogRaw(s: pchar); cdecl; |
14953
f27f00fabc0d
Don't use Str2PChar twice in a row
Wuzzy <Wuzzy2@mail.ru>
parents:
14951
diff
changeset
|
529 |
var msgLine: PChar; |
7180 | 530 |
begin |
531 |
s:= s; |
|
9966 | 532 |
{$IFNDEF PAS2C} |
7180 | 533 |
{$IFDEF DEBUGFILE} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
534 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
535 |
if SDL_LockMutex(logMutex) <> 0 then |
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
536 |
OutError('Logging mutex could not be locked!', true); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
537 |
{$ENDIF} |
14953
f27f00fabc0d
Don't use Str2PChar twice in a row
Wuzzy <Wuzzy2@mail.ru>
parents:
14951
diff
changeset
|
538 |
msgLine:= Str2PChar(IntToStr(GameTicks) + ': '); |
14951 | 539 |
if (logFile <> nil) then |
540 |
begin |
|
14953
f27f00fabc0d
Don't use Str2PChar twice in a row
Wuzzy <Wuzzy2@mail.ru>
parents:
14951
diff
changeset
|
541 |
pfsWriteRaw(logFile, msgLine, StrLen(msgLine)); |
14951 | 542 |
pfsWriteRaw(logFile, s, StrLen(s)); |
543 |
end |
|
544 |
else |
|
545 |
begin |
|
14953
f27f00fabc0d
Don't use Str2PChar twice in a row
Wuzzy <Wuzzy2@mail.ru>
parents:
14951
diff
changeset
|
546 |
Write(stdout, msgLine); |
14951 | 547 |
Flush(stdout); |
548 |
end; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
549 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
550 |
if SDL_UnlockMutex(logMutex) <> 0 then |
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
551 |
OutError('Logging mutex could not be unlocked!', true); |
7180 | 552 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
553 |
{$ENDIF} |
9966 | 554 |
{$ENDIF} |
7180 | 555 |
end; |
4374 | 556 |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
557 |
function CheckCJKFont(s: ansistring; font: THWFont): THWFont; |
4380 | 558 |
var l, i : LongInt; |
559 |
u: WideChar; |
|
560 |
tmpstr: array[0..256] of WideChar; |
|
561 |
begin |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
562 |
CheckCJKFont:= font; |
4380 | 563 |
|
5639 | 564 |
{$IFNDEF MOBILE} |
4380 | 565 |
// remove chinese fonts for now |
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
566 |
if (font >= CJKfnt16) or (length(s) = 0) then |
4380 | 567 |
{$ENDIF} |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
568 |
exit; |
4380 | 569 |
|
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10127
diff
changeset
|
570 |
l:= Utf8ToUnicode(PWideChar(@tmpstr), PChar(s), min(length(tmpstr), length(s)))-1; |
4380 | 571 |
i:= 0; |
4737 | 572 |
|
4380 | 573 |
while i < l do |
574 |
begin |
|
575 |
u:= tmpstr[i]; |
|
4737 | 576 |
if (#$1100 <= u) and ( |
577 |
(u <= #$11FF ) or // Hangul Jamo |
|
578 |
((#$2E80 <= u) and (u <= #$2FDF)) or // CJK Radicals Supplement / Kangxi Radicals |
|
8575 | 579 |
((#$2FF0 <= u) and (u <= #$31FF)) or // Ideographic Description Characters / CJK Radicals Supplement / Hiragana / Hangul Compatibility Jamo / Katakana |
4380 | 580 |
((#$31C0 <= u) and (u <= #$31EF)) or // CJK Strokes |
8575 | 581 |
((#$3200 <= u) and (u <= #$4DBF)) or // Enclosed CJK Letters and Months / CJK Compatibility / CJK Unified Ideographs Extension A / Circled Katakana |
4380 | 582 |
((#$4E00 <= u) and (u <= #$9FFF)) or // CJK Unified Ideographs |
4737 | 583 |
((#$AC00 <= u) and (u <= #$D7AF)) or // Hangul Syllables |
4380 | 584 |
((#$F900 <= u) and (u <= #$FAFF)) or // CJK Compatibility Ideographs |
8575 | 585 |
((#$FE30 <= u) and (u <= #$FE4F)) or // CJK Compatibility Forms |
14062
1a85afba813d
Enable CJK font when using any full/halfwith char (U+FF00 to U+FFEF)
Wuzzy <Wuzzy2@mail.ru>
parents:
13985
diff
changeset
|
586 |
((#$FF00 <= u) and (u <= #$FFEF))) // half- and fullwidth characters |
10015 | 587 |
then |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
588 |
begin |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
589 |
CheckCJKFont:= THWFont( ord(font) + ((ord(High(THWFont))+1) div 2) ); |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
590 |
exit; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
591 |
end; |
4380 | 592 |
inc(i) |
593 |
end; |
|
594 |
(* two more to check. pascal WideChar is only 16 bit though |
|
595 |
((#$20000 <= u) and (u >= #$2A6DF)) or // CJK Unified Ideographs Extension B |
|
596 |
((#$2F800 <= u) and (u >= #$2FA1F))) // CJK Compatibility Ideographs Supplement *) |
|
597 |
end; |
|
598 |
||
4385 | 599 |
|
600 |
function GetLaunchX(at: TAmmoType; dir: LongInt; angle: LongInt): LongInt; |
|
601 |
begin |
|
12626 | 602 |
at:= at; dir:= dir; angle:= angle; // parameter hint suppression because code below is currently disabled |
12322
b81a1d1497c4
Backed out changeset 98824a464230 (disable GetLaunchX/Y again)
Wuzzy <almikes@aol.com>
parents:
12202
diff
changeset
|
603 |
GetLaunchX:= 0 |
b81a1d1497c4
Backed out changeset 98824a464230 (disable GetLaunchX/Y again)
Wuzzy <almikes@aol.com>
parents:
12202
diff
changeset
|
604 |
(* |
4385 | 605 |
if (Ammoz[at].ejectX <> 0) or (Ammoz[at].ejectY <> 0) then |
606 |
GetLaunchX:= sign(dir) * (8 + hwRound(AngleSin(angle) * Ammoz[at].ejectX) + hwRound(AngleCos(angle) * Ammoz[at].ejectY)) |
|
607 |
else |
|
12322
b81a1d1497c4
Backed out changeset 98824a464230 (disable GetLaunchX/Y again)
Wuzzy <almikes@aol.com>
parents:
12202
diff
changeset
|
608 |
GetLaunchX:= 0 *) |
4385 | 609 |
end; |
610 |
||
611 |
function GetLaunchY(at: TAmmoType; angle: LongInt): LongInt; |
|
612 |
begin |
|
12626 | 613 |
at:= at; angle:= angle; // parameter hint suppression because code below is currently disabled |
12322
b81a1d1497c4
Backed out changeset 98824a464230 (disable GetLaunchX/Y again)
Wuzzy <almikes@aol.com>
parents:
12202
diff
changeset
|
614 |
GetLaunchY:= 0 |
b81a1d1497c4
Backed out changeset 98824a464230 (disable GetLaunchX/Y again)
Wuzzy <almikes@aol.com>
parents:
12202
diff
changeset
|
615 |
(* |
4385 | 616 |
if (Ammoz[at].ejectX <> 0) or (Ammoz[at].ejectY <> 0) then |
617 |
GetLaunchY:= hwRound(AngleSin(angle) * Ammoz[at].ejectY) - hwRound(AngleCos(angle) * Ammoz[at].ejectX) - 2 |
|
618 |
else |
|
12322
b81a1d1497c4
Backed out changeset 98824a464230 (disable GetLaunchX/Y again)
Wuzzy <almikes@aol.com>
parents:
12202
diff
changeset
|
619 |
GetLaunchY:= 0*) |
4385 | 620 |
end; |
621 |
||
12740 | 622 |
// Takes an X coordinate and corrects if according to the world edge rules |
623 |
// Wrap-around: X will be wrapped |
|
624 |
// Bouncy: X will be kept inside the legal land (taking radius into account) |
|
625 |
// Other world edges: Just returns X |
|
626 |
// radius is a radius (gear radius) tolerance for an appropriate distance from bouncy world edges. |
|
627 |
// Set radius to 0 if you don't care. |
|
628 |
function CalcWorldWrap(X, radius: LongInt): LongInt; |
|
629 |
begin |
|
630 |
if WorldEdge = weWrap then |
|
12794
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
631 |
begin |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
632 |
if X < leftX then |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
633 |
X:= X + (rightX - leftX) |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
634 |
else if X > rightX then |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
635 |
X:= X - (rightX - leftX); |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
636 |
end |
12740 | 637 |
else if WorldEdge = weBounce then |
12794
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
638 |
begin |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
639 |
if (X + radius) < leftX then |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
640 |
X:= leftX + radius |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
641 |
else if (X - radius) > rightX then |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
642 |
X:= rightX - radius; |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12749
diff
changeset
|
643 |
end; |
12740 | 644 |
CalcWorldWrap:= X; |
645 |
end; |
|
646 |
||
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
647 |
function CheckNoTeamOrHH: boolean; |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
648 |
begin |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
649 |
CheckNoTeamOrHH:= (CurrentTeam = nil) or (CurrentHedgehog^.Gear = nil); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
650 |
end; |
4385 | 651 |
|
7151 | 652 |
{$IFNDEF PAS2C} |
653 |
procedure Write(var f: textfile; s: shortstring); |
|
654 |
begin |
|
655 |
system.write(f, s) |
|
656 |
end; |
|
657 |
||
658 |
procedure WriteLn(var f: textfile; s: shortstring); |
|
659 |
begin |
|
660 |
system.writeln(f, s) |
|
661 |
end; |
|
10080 | 662 |
|
663 |
function StrLength(s: PChar): Longword; |
|
664 |
begin |
|
665 |
StrLength:= length(s) |
|
666 |
end; |
|
7151 | 667 |
{$ENDIF} |
668 |
||
8204 | 669 |
// this function is just to determine whether we are running on a limited screen device |
670 |
function isPhone: Boolean; inline; |
|
671 |
begin |
|
672 |
isPhone:= false; |
|
673 |
{$IFDEF IPHONEOS} |
|
674 |
isPhone:= isApplePhone(); |
|
675 |
{$ENDIF} |
|
676 |
{$IFDEF ANDROID} |
|
677 |
//nasty nasty hack. TODO: implement callback to java to have a unified way of determining if it is a tablet |
|
678 |
if (cScreenWidth < 1000) and (cScreenHeight < 500) then |
|
679 |
isPhone:= true; |
|
680 |
{$ENDIF} |
|
681 |
end; |
|
682 |
||
683 |
||
8498
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
684 |
function sanitizeForLog(s: shortstring): shortstring; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
685 |
var i: byte; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
686 |
r: shortstring; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
687 |
begin |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
688 |
r[0]:= s[0]; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
689 |
for i:= 1 to length(s) do |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
690 |
if (s[i] < #32) or (s[i] > #127) then |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
691 |
r[i]:= '?' |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
692 |
else |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
693 |
r[i]:= s[i]; |
10015 | 694 |
|
8498
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
695 |
sanitizeForLog:= r |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
696 |
end; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
697 |
|
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
698 |
function sanitizeCharForLog(c: char): shortstring; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
699 |
var r: shortstring; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
700 |
begin |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
701 |
if (c < #32) or (c > #127) then |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
702 |
r:= '#' + inttostr(byte(c)) |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
703 |
else |
8841 | 704 |
begin |
705 |
// some magic for pas2c |
|
706 |
r[0]:= #1; |
|
707 |
r[1]:= c; |
|
708 |
end; |
|
709 |
||
8498
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
710 |
sanitizeCharForLog:= r |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
711 |
end; |
eecadca7db50
Bring back full log strings for commands, just a bit sanitized
unc0rr
parents:
8425
diff
changeset
|
712 |
|
14900
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
713 |
// helper function for volume change controls |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
714 |
procedure updateVolumeDelta(precise: boolean); |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
715 |
begin |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
716 |
if cVolumeUpKey and (not cVolumeDownKey) then |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
717 |
if precise then |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
718 |
cVolumeDelta:= 1 |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
719 |
else |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
720 |
cVolumeDelta:= 3 |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
721 |
else if cVolumeDownKey and (not cVolumeUpKey) then |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
722 |
if precise then |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
723 |
cVolumeDelta:= -1 |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
724 |
else |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
725 |
cVolumeDelta:= -3 |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
726 |
else |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
727 |
cVolumeDelta:= 0; |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
728 |
end; |
d4a19bf6687e
Fix incorrect handling of slow/precise volume change when it's not your turn
Wuzzy <Wuzzy2@mail.ru>
parents:
14897
diff
changeset
|
729 |
|
14901
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
730 |
// helper function for cursor movement change controls |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
731 |
procedure updateCursorMovementDelta(precise: boolean; dir: LongInt; var cursorVar: LongInt); |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
732 |
begin |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
733 |
if dir > 0 then |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
734 |
if precise then |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
735 |
cursorVar:= cameraKeyboardSpeedSlow |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
736 |
else |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
737 |
cursorVar:= cameraKeyboardSpeed |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
738 |
else if dir < 0 then |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
739 |
if precise then |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
740 |
cursorVar:= - cameraKeyboardSpeedSlow |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
741 |
else |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
742 |
cursorVar:= - cameraKeyboardSpeed |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
743 |
else |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
744 |
cursorVar:= 0; |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
745 |
end; |
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14900
diff
changeset
|
746 |
|
11775 | 747 |
function read1stLn(filePath: shortstring): shortstring; |
748 |
var f: pfsFile; |
|
749 |
begin |
|
750 |
read1stLn:= ''; |
|
751 |
if pfsExists(filePath) then |
|
752 |
begin |
|
753 |
f:= pfsOpenRead(filePath); |
|
754 |
if (not pfsEOF(f)) and allOK then |
|
755 |
pfsReadLn(f, read1stLn); |
|
756 |
pfsClose(f); |
|
757 |
f:= nil; |
|
758 |
end; |
|
759 |
end; |
|
760 |
||
11780
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
761 |
function readValueFromINI(key, filePath: shortstring): shortstring; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
762 |
var f: pfsFile; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
763 |
s: shortstring; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
764 |
i: LongInt; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
765 |
begin |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
766 |
s:= ''; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
767 |
readValueFromINI:= ''; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
768 |
|
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
769 |
if pfsExists(filePath) then |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
770 |
begin |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
771 |
f:= pfsOpenRead(filePath); |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
772 |
|
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
773 |
while (not pfsEOF(f)) and allOK do |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
774 |
begin pfsReadLn(f, s); |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
775 |
if Length(s) = 0 then |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
776 |
continue; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
777 |
if s[1] = ';' then |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
778 |
continue; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
779 |
|
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
780 |
i:= Pos('=', s); |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
781 |
if Trim(Copy(s, 1, Pred(i))) = key then |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
782 |
begin |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
783 |
Delete(s, 1, i); |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
784 |
readValueFromINI:= s; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
785 |
end; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
786 |
end; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
787 |
pfsClose(f); |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
788 |
f:= nil; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
789 |
end; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
790 |
end; |
ee85798d6974
aggregate music credits into a single file (individual files can still be used to override. useful for .hwp etc.)
sheepluva
parents:
11775
diff
changeset
|
791 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7565
diff
changeset
|
792 |
procedure initModule(isNotPreview: boolean); |
7027 | 793 |
{$IFDEF DEBUGFILE} |
794 |
var logfileBase: shortstring; |
|
8095 | 795 |
i: LongInt; |
7027 | 796 |
{$ENDIF} |
4374 | 797 |
begin |
798 |
{$IFDEF DEBUGFILE} |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7565
diff
changeset
|
799 |
if isNotPreview then |
7386
e82a076df09b
Fix bug with isInLag picture displayed at end of some videos.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
800 |
begin |
e82a076df09b
Fix bug with isInLag picture displayed at end of some videos.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
801 |
if GameType = gmtRecord then |
e82a076df09b
Fix bug with isInLag picture displayed at end of some videos.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
802 |
logfileBase:= 'rec' |
e82a076df09b
Fix bug with isInLag picture displayed at end of some videos.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
803 |
else |
10505 | 804 |
{$IFDEF PAS2C} |
805 |
logfileBase:= 'game_pas2c'; |
|
806 |
{$ELSE} |
|
807 |
logfileBase:= 'game'; |
|
808 |
{$ENDIF} |
|
7386
e82a076df09b
Fix bug with isInLag picture displayed at end of some videos.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
809 |
end |
7027 | 810 |
else |
10502
a888e649bea2
Fix difference in map generation between fpc and pas2c engine
unc0rr
parents:
10280
diff
changeset
|
811 |
{$IFDEF PAS2C} |
10503 | 812 |
logfileBase:= 'preview_pas2c'; |
10502
a888e649bea2
Fix difference in map generation between fpc and pas2c engine
unc0rr
parents:
10280
diff
changeset
|
813 |
{$ELSE} |
10504 | 814 |
logfileBase:= 'preview'; |
10502
a888e649bea2
Fix difference in map generation between fpc and pas2c engine
unc0rr
parents:
10280
diff
changeset
|
815 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
816 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
817 |
logMutex:= SDL_CreateMutex(); |
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
818 |
if (logMutex = nil) then |
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
819 |
OutError('Could not create mutex for logging', true); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
820 |
{$ENDIF} |
11793
0327d20fa4a1
[BUG 66] - Create '/Logs' folder if not exists
antonc27 <antonc27@mail.ru>
parents:
11780
diff
changeset
|
821 |
if not pfsExists('/Logs') then |
0327d20fa4a1
[BUG 66] - Create '/Logs' folder if not exists
antonc27 <antonc27@mail.ru>
parents:
11780
diff
changeset
|
822 |
pfsMakeDir('/Logs'); |
11637 | 823 |
// if log is locked, write to the next one |
824 |
i:= 0; |
|
825 |
while(i < 7) do |
|
826 |
begin |
|
827 |
logFile:= pfsOpenWrite('/Logs/' + logfileBase + inttostr(i) + '.log'); |
|
828 |
if logFile <> nil then |
|
829 |
break; |
|
830 |
inc(i) |
|
831 |
end; |
|
11748
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
832 |
|
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
833 |
if logFile = nil then |
eefa04b23c3b
fallback to stdout if no writable logfile available
sheepluva
parents:
11637
diff
changeset
|
834 |
WriteLn(stdout, '[WARNING] Could not open log file for writing. Log will be written to stdout!'); |
4374 | 835 |
{$ENDIF} |
836 |
||
9300 | 837 |
//mobile stuff |
838 |
{$IFDEF IPHONEOS} |
|
839 |
mobileRecord.PerformRumble:= @AudioServicesPlaySystemSound; |
|
840 |
mobileRecord.GameLoading:= @startLoadingIndicator; |
|
841 |
mobileRecord.GameLoaded:= @stopLoadingIndicator; |
|
842 |
mobileRecord.SaveLoadingEnded:= @saveFinishedSynching; |
|
843 |
{$ELSE} |
|
844 |
mobileRecord.PerformRumble:= nil; |
|
845 |
mobileRecord.GameLoading:= nil; |
|
846 |
mobileRecord.GameLoaded:= nil; |
|
847 |
mobileRecord.SaveLoadingEnded:= nil; |
|
848 |
{$ENDIF} |
|
849 |
||
4374 | 850 |
end; |
851 |
||
852 |
procedure freeModule; |
|
853 |
begin |
|
854 |
{$IFDEF DEBUGFILE} |
|
13317 | 855 |
if logFile <> nil then |
856 |
begin |
|
11637 | 857 |
pfsWriteLn(logFile, 'halt at ' + inttostr(GameTicks) + ' ticks. TurnTimeLeft = ' + inttostr(TurnTimeLeft)); |
858 |
pfsFlush(logFile); |
|
859 |
pfsClose(logFile); |
|
13317 | 860 |
end |
861 |
else |
|
862 |
WriteLn(stdout, 'halt at ' + inttostr(GameTicks) + ' ticks. TurnTimeLeft = ' + inttostr(TurnTimeLeft)); |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
863 |
{$IFDEF USE_VIDEO_RECORDING} |
14897
444ed0622348
Switch to SDL's mutex for critical section handling
Wuzzy <Wuzzy2@mail.ru>
parents:
14085
diff
changeset
|
864 |
SDL_DestroyMutex(logMutex); |
4374 | 865 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
866 |
{$ENDIF} |
4374 | 867 |
end; |
868 |
||
4453 | 869 |
end. |