-
Notifications
You must be signed in to change notification settings - Fork 19
/
4.XX_Changes.txt
354 lines (330 loc) · 17.6 KB
/
4.XX_Changes.txt
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
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
Comments:
=========
? when filename.??? appeared in this log, this means "tga"/"jpg"/"pcx"/"wal"
- wildcards are case-insensitive and can be in form: "*", "*.*" (same as "*"), "*text", "text*", "text*text"
or "*text*"; multiple wildcards can be separated with commas (','); if path specified, multi-wildcard syntax
should be in a following form:
"path/path.../wildcard1,wildcard2,...wildcard"
- ip mask: 4 elements, delimited with '.'; element can be:
- "NNN" - specified number
- "AAA-BBB" - any number in range
- "*" - any number (same as "0-255")
All-IP mask is "*.*.*.*" or "0-255.0-255.0-255.0-255"
Using third-party libraries:
============================
- JPEGlib
Copyright (C) 1991-1998, Thomas G. Lane.
http://www.ijg.org
- ZLib
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
http://www.zlib.org
4.00 Changes
============
- vid_fullscreen -> r_fullscreen, r_gamma = 1/vid_gamma
- nosound = !s_initsound
1. IMPROVEMENTS
~~~~~~~~~~~~~~~
- demomap can be called without ".dm2" extension (added by default)
- added support of reading/listing player models from pak files
- improved a ladder descending
- added exception handler, which will restore screen/mouse/sound parameters if game crashes and logs error ("crash.log")
- logging developer messages to "debug.log" when "developer" is set to 2
- "host_speeds" -> "com_speeds", better output
- no autosaves in deathmatch mode
- if sound file not found, game doesn't try to load it every time it must appear
- improved look of "player setup" menu
- improved "set game directory" action
- ability to reverse sound channels; controllable with "s_reverse_stereo"
- player skins:
- md2: can use skins without icon ("*_i.???") file -- skin should have name "skn_*.???"; side effect: even when
skin icon exists, it will be ignored
- md2: implemented skin selection logic when specified skin is absent
- added "disconnect" menu item into "multiplayer" menu
- win32 monitor power function, screensaver and accessibility disabled during gameplay
- game library ("gamex86.dll" etc) can be loaded from any mounted directory (CDROM, network etc)
2. FIXES
~~~~~~~~
- on game change:
- saving current config
- reconfiguration from mod's default.cfg, config.cfg and autoexec.cfg
- saving aliases to config
- "default.cfg" executed only when "config.cfg" is not found; to upgrade old config files user should:
1) exec default.cfg
2) unbindall
3) reset *
4) exec config.cfg
- bug with menu spin control (crash when curvalue > maxvalue)
- removed calling "-alias" EVERY time key depressed
- fixed collision detection code to prevent from "blocked inside the opening door" and some other bugs
- fixed "WSAECONRESET" error for Win2K (server was crashed when one of clients exits game)
- demos:
- allowed cheatvars (timedemo, r_lightmap ...) for demos, recorded from deathmatch
- disabled "set <var> <value>" commands from recorded demos
- allowed cheatvars when server started with "cheats 1"
- cinematic:
- stopped with ESC (old: open menu)
- ability to stop with any key (old: incorrect when playing sequence of few cinematics)
- menu: allowed binds to all keys (except ESC and "~")
- better work with large FPS
- cvar "logfile":
- log placed in quake root directory (not in game directory) in "quake2.log"
- use logfile=2 for flushing file after every write
- using specified model/skin in a singleplayer mode (original: used male/grunt skin)
- air acceleration works correct (sv_airaccelerate); before: value of cvar was ignored
- when multiplayer server is paused, it will process other clients anyway (will be paused only local server's
client)
- explosions are now visible through non-transparent water (server-side bug)
3. ADDONS
~~~~~~~~~
Cvar system
-----------
- command "add":
add <var_name> <inc> [<min> <max> [w][f]]
- var_name must exists and be writeable
- inc may be >0 or <0
- min<max
- if "w" is specified, when dest>max it will =min, if dest<min it =max (wrapping)
- if "w" is NOT specified, when dest>max dest=max, when dest<min dest=min (limit)
- if "f" ("force") specified and variable is not found, it will be created (error message otherwise)
- command "scale <varname> <scale>" will multiply variable value by scale
- command "toggle <varname>" will set variable to 0 if var != 0 or set to 1 otherwise
- command "cycle [-r] <varname> <v[1]> <v[2]> ..." - set variable to v[i+1] if it is matched to v[i];
(if "-r" specified -- reverse order, i.e. set to v[i-1] when matched with v[i]); if no matches found - set to
v[1]; if matched with last value - set to 1st (i.e. cycle variable values within value list)
- command "cvarlist" - added parameter:
cvarlist [mask] -- will display only variables, which names matched wildcard
- "set[a|u|s] <variable> <value>", "set <variable> <value> [a|u|s]" (archive|userinfo|serverinfo)
- alias for "set" command: "a=b" internally replaced with "set a b"
- "reset <mask>" - set value of all archive cvars which names are matched mask to default
File system
-----------
- support of zip (pk3) file containers (should also have ".pak" extension; to load ".pk3" files add to "autoexec.cfg"
something like: 'mount "baseq2/md3/*.pk3"'; NOTE: quotes required, otherwise "/*" will be treated as comment start!)
- loading unlimited number of paks with any names
- "cat <filename>" - display contents of file
- "type <filename>" - display info about file
- "cddir" cvar may specify path to game contents on hard drive or network share
example: cddir="//SERVER/GAMES/Quake2" or cddir="E:/DISTR/GAMES/Quake2"
- "mount <./game/directory> [point]"
"mount <./game/pakname.ext [point]"
"mount <wildcard> [point]"
- will mount file container to "point"; example: standard quake mounts:
"mount baseq2 baseq2" or "mount ./baseq2 baseq2" - mount directory
"mount baseq2/*.pak" - mount add "*.pak" files in directory "baseq2"
"mount c: drive_c" - mount "c:/" to "./drive_c/"
- if "point" is not specified, will mount to current game directory
"mount"
- will display current mounts
- "umount <wildcard>"
- remove mount(s); example:
"umount ./ctf/*.pak" - remove all mounted "*.pak" files from "ctf" directory
- "ls [wildcard]"
- display contents of directory, specified with wildcard
- names, starting with ".", will not be displayed (unix hidden files)
- file system is restricted to mount points: engine is unable to open files, placed outside mounts; if desired to
access some other files, mount its container (directory or pak)
- "fs_logFile" variable: 0 - disable, 1 - log to console, 2 - log to "fs.log" file
? improved "dir" console command (reformatted, listing paks)
Console/Menu
------------
- improved console command complementation:
- command/variable/alias list when partial match
- complete "map " / "demomap " with a list of available maps/demos
- complete "game" with a list of available mods
- complete "variable_name " with its value
- complete "alias" with its name / value
- complete "bind key" with its binding
- when pressing TAB twice (complete same thing twice), will appear popup with variants (if no more than 16 selections)
- console edit:
- Home / End - move cursor to the line start/end
- Left / Right - move cursor one char left/right
- Ctrl-Left / Ctrl-Right - move cursor one word left/right
- Del - delete char under cursor
- Ctrl-Del - clear text from cursor to the end of line
- Backspace - delete char before cursor
- Ctrl-Backspace - delete word before cursor
- any char - insert text
- history navigation:
- Crtl-Home / Ctrl-End will rewind console to begin/end of buffer (old behavior: same, but without Ctrl)
- PgUp / PgDn will scroll history up/down (hold Ctrl to scroll faster)
- mouse wheel scroll history (hold Ctrl to scroll slower)
- changed command history code to prevent appearing of empty lines and duplicates
- console text colorizing in Q3-manner: ^0-^7 will change color (black-white); colored output can be disabled
with "set con_colortext 0"
- reformatted console output; word-wrap may be controlled with "set con_wordwrap 0|1"
- menu navigations:
- added menu navigation and console scrolling with mouse
- added support of home/end keys; disabled menu auto-wrapping
- scrolling of long menus
- dedicated server console:
- command completion
- autorepeat
- colorized output
Keyboard
--------
- new keys:
- right-side keys RAlt and RCtrl (Alt and Ctrl are left-side)
- F13-F24
- CapsLock, NumLock, ScrLock
- UnkXX (most other keys)
- added names for keys:
key | name key | name
----+----------- ----+-----------
; | Semicolon - | Minus
, | Comma = | Equals
. | Period [ | LeftBracket
/ | Slash ] | RightBracket
\ | BackSlash * | KP_Star (extended keyboard)
- implemented keyboard autorepeat
- added binding to "Ctrl+Key" and "Alt+Key"
Configuration
-------------
- added "binds.lst" file fith the following line format:
1) "bind_cmd" "menu_text"
2) "bind_cmd" (will be shown in menu with the same name)
3) "" "Delimiter text" (delimiter, centered)
4) "" "" (empty line)
(Up to 64 lines of text, last line MUST be finished with CR/LF; almost HalfLife style)
- command "bindlist" - added parameter:
bindlist [action mask] -- will display only binds, which actions are matched wildcard
- unbind <mask> ; "unbind *" == "unbindall"
- command "unalias <mask>" - remove all matched aliases
- cvar "cfgfile" -- may be set from command line; default - "config.cfg"
- command "writeconfig filename[.cfg]" - write settings to file
- command "cmdlist [<mask>]" - will display command list with additional info:
"A" - command receives arguments; "I" - can type "command /?" to get help info
- command "wait": added parameter <num_frames>; default 1
- added "players/model.lst": this file contains names of models, which gender should be female (always female for
"female" and "crakhor")
- better support for "gender_auto"
- added "sound/materials.lst" - contains sound description depended of texture name (almost HalfLife style)
- surface footstep sounds depended on material (Kingpin, "materials.lst")
- "screenshot [-silent] [-levelshot] [-no2d] [-nogamma] [-jpeg] [<filename>]"
"-levelshot" will create screenshot 256x256 as "levelshots/<mapname>.???"
"-nogamma" will skip applying gamma correction for image
- support for "//..." and "/*...*/" (C-style) comments
- support for quote doubling: 'echo "help ""me"""' will display 'help "me"'
- main executable command line (completely different from original Quake2):
- to change cvar use "-var=value"
- to set cvar, known at the time of initialization, to "1", use "-var" (same as "-var=1")
- to execute commands, use "-command [arguments]"
- examples: quake2 -nosound -deathmatch=1 -map q2dm1 -echo "hello world!"
quake2 -nointro -nosound -timedemo -demomap demo1 -set nextserver quit
- support for Quake3 player models; simply put model.pk3 into baseq2 directory and rename file to .pak
(or use "loadpak model.pk3" command); this feature requires extended protocol support
- to use this feature, you should place *.pk3 files with player models into baseq2 directory and
rename those files to *.pak (or use "mount baseq2/*.pk3" command)
- support for Kingpin, Quake1 and Half-Life maps
- to use these maps, you should place them with the same rules, as used for Quake2 maps: *.bsp into
maps/* directory etc
Server
------
- ban system for client IP
- "ban <userid>" - ban player and add to ban list
- "banip <ip-mask>" - ban all players matched to mask and add mask to ban list
- "banlist" - show list of bans
- "banremove <n>" - remove line #n from list
- "banremove <mask>"- remove mask from list
Debugging
---------
- "r_surfinfo" variable: when value is non-zero, displaying info about maps surface under crosshair
(&2 -> no entities, &4 -> any contents, &8 -> display surface brush)
- "r_drawfps" variable: display FPS when it is set
- "r_playerpos" variable: when it is set to "1", player (spectator) world coordinates are shown
- "r_sfx_pause 1" stops particles/fx; "r_sfx_pause 2" also disables particle/fx creation
- "cmd_debug" var: &1 - display ExecString, &2 - display AddText etc
- "cl_showbboxes 1" will display object bounding boxes from client info
GUI
---
- browsing levelshots in "start server" menu (accessible via menu or "menu_dmbrowse"); displaying it while map loading
- screenshots in savegames: display in save/load game menu, display while map loading
- "cl_draw2d 0" removes HUD
- crosshairs:
- unlimited number of crosshairs; must be named "pics/ch%d.???"; when trying to set crosshair,
that does not exist, crosshair will be set to 0 (no crosshair)
- added cvar "crosshairColor"; value = [0..7] (0 - black, 1 - red, 2 - green, 4 - blue, 7 - white)
- changing crosshair shape and color from the options menu
Network
-------
- extended network protocol (fully compatible with old-version server/client). May be disabled on client
side with "set cl_extprotocol 0" or on server side with "set sv_extprotocol 0". Extensions:
- surface-dependent footstep sounds (server-side)
- surface-dependent bullet hit sounds (client-side)
- camper sounds (server-side)
- falling sounds (server-side)
- customized rail trail
* side effect: demos will crash server, when played with original Quake2; to record compatible demos, just
use cl_extprotocol=0 or sv_extprotocol=0
- faster downloading speed (10 times)
Shader system
-------------
- implemented Quake3-like shader system
- scripts can be loaded from standard Quake3 place (scripts/*.shader) and from separate file (*.qs) - one script
per file (priority to *.qs file, if absent - check *.shader files)
- shader templates (inside *.shader files, can use filename mask instead of shader name and "$texture" in *map
commands for mapping texture, which base name is the same, as requested shader name)
- in all *map shader commands, when used "./texName", "./" will be replaced within a shader path
?????????
---------
- "r_saturation" variable: default 1 (all textures and lightmaps - as is), 0 - full grayscale
?(not finished) new particle/fx system; can be disabled with "cl_newfx 0"
- timescale:
- sound pitch affected by timescale (DirectSound only, restart required)
- support for low timescale (was not able to perform frames with scaled time less than 1 ms)
timescale=0 - stop everything
- timedemo:
- timedemo <n> -- gather timing statistics with rendering <n> frames per (demo-)server frame
- when displaying cinematics, will be played with a maximal speed
- added min_fps stats
- timerefresh:
- timerefresh <n> -- display n frames (default=256)
- long measuring may be finished with activating menu or console (i.e. using ESC or ~ key)
- input:
- removed "move with mouse" stuff:
- removed commands: +strafe (now always off), +mlook (now always on), +klook (now always off)
- removed cvars: freelook (now always 1), lookstrafe (now always 0), lookspring (no code path),
m_forward+m_side (no code path)
- mouse:
- disabled mouse acceleration during game
- added mouse support via DirectInput8 (activated with "in_mouse 2", default)
- supported up to 8 mouse buttons
- removed cvars m_yaw, m_pitch; added "m_invert": when = 1 - mouse Y axis inverted
- joystick:
- removed "joy_*threshold" cvars - single "joy_threshold" used instead
- removed "joy_name" cvar (useless)
- removed "joy_advanced" cvar (always 1); removed command "joy_advancedupdate" - always updated
- third-person view: activated with "cl_3rd_person 1"
- intro playback:
- removed from "toggleconsole" command
- on startup, only cinematics will be displayed (no demos)
- to disable intro on startup, set "nointro 1" from commandline
- old-style startup behaviour: add "-nointro -d1" to commandline
- to play any demo from a command line, use "-nointro -demomap <demoname>"
- dedicated server:
- to disable auto-startup of "dedicated_start" alias, use "nointro 1"
- commands "lookdown <angle>" and "lookup <angle>"
Example: rocket jump:
alias +rj "lookdown 180;_hand=$hand;hand 2;+moveup;+attack;echo Rocket Jump"
alias -rj "-attack;-moveup;hand=$_hand;centerview"
- removed "basedir" cvar: game always reads data from main executable-related path
- removed "gamedir" cvar: not used
- but: have fake "basedir","gamedir" cvars for compatibility with some mods
4. MISFEATURES
~~~~~~~~~~~~~~
- no negative (black) dlights in renderer (can be emulated with multiplicative dlights ?)
- no support for stereo graphics
- removed IPX protocol support (DOS rudiment)
- no file system "links" (not functional in PAKs anyway, and not used by games)
5. API (internals)
~~~~~~~~~~~~~~~~~~
Memory management
-----------------
- replaced Z_TagMalloc() in gameimport_t with different function, with reserves (size+1) bytes.
We should make 1 more byte for Z_Malloc() & Z_TagMalloc() when it is called from "gi->"
(gamex86.dll) - we cannot control bugs in third-party mods, but at least "dirty" mod reads
entities in buffer = sizeof(ents) and adds 1 zero byte after (ASCIIZ) - memory overrun!
(so, we should reserve 1 byte for buggy mods).
Miscellaneous
-------------
- FS_LoadFile() will load file into a buffer of size (filelength+1) with added zero byte
- Com_WPrintf() will print message with warning color and log when developer=2