Changelog for the ZDaemon 1.09 -> 1.10 transition
=================================================
1. Point 01 release (2012-11-09)
-----------------------------------------------------------------------
1. Fix for spurious turbo errors.
2. The kick message was not getting recorded in demos. Fixed.
3. There was a problem when a server reached maxclients. Fixed.
4. The usage of the teamscorelimit CVAR for coop/survival turned
out to be too confusing. Therefore we introduced a new CVAR
called teamkilllimit: it specifies the number of monsters
killed by all players that will trigger a map change in coop
and survival modes. It defaults to zero (ie., inactive).
5. Implemented Super-Sampled Anti-Aliasing in the renderer.
It can be configured in the video options and supports 2x, 4x
and 8x anti-aliasing. Of course, this consumes more CPU cycles
than otherwise (and the CPU needs increase sharply with the anti-
aliasing multiplier), so be sure your CPU can handle it. This
feature works best with relatively low resolutions (eg.,
640x480) rather than higher ones (eg., 1280x1024).
6. Fixed the GUI scale multiplier rounding errors. This bug stretched
the HUD and menu visuals differently based on the resolution. Now
the HUD and menus are in equal ratio to vanilla doom.
7. Fixed a turnspeeds bug: it should finally work as intended.
8. Added support for the BFG edition IWAD.
9. Rewrote the DirectInput mouse code and made the whole input
use DirectInput 8. This fixes the bug that applied windows
acceleration and sensitivity to the mouse.
10. ZDaemon isn't restricted to max 4 mouse buttons any more. You
can now use as many mouse buttons as DirectInput 8 supports.
11. The server rearranges the packet sending order by ping in the
interests of fairness.
12. Fixed own weapon switching when recording a demo and instaswitch
is on.
13. Updated the demo tool to handle LAN and Bot players.
14. Added sitrep to the display options; also added vote yes/no and
turn180 to the customize controls menu.
15. Added a vpos_event2 CVAR to fine tune the vert. position of the
blinking DDOM msg (and other game event messages in the future).
16. When opening a ZDD demo via the launcher, the launcher checks
for the presence of the WADs specified in the demo and prompts
to fetch any missing ones.
17. The ChangeCamera and SetPlayerProperty ACS line specials should
not apply to spectators.
18. New client CVAR "demo_prioritizeplayers" whereby the demo view
auto-switches to a player's view when the view is on a spectator
(or freeview) and the first player spawns in the map. Defaults
to "true".
19. New demo compression method: it results in filesizes about 25%
smaller than those from the previous compression method. The
demo tool will automatically convert any demos to the new method.
20. New support for widescreen monitors/resolutions. You can select
if you want to preserve the true image aspect ratio or you prefer
to stretch it. You can also select the desired amount of pillar-
boxing in both cases.
21. Implemented Quick Chat Block menu (similar to Quick Voice Mute).
You can bind a key to it in the customize controls menu or execute
chat_quickblock in the console.
-----------------------------------------------------------------------
2. 1.10b01 release (2013-12-25)
-----------------------------------------------------------------------
1. Implemented server-side demos (SSD). The server can automatically
generate and publish demos of all games. The recording of demos is
controlled via the "ssd_record" CVAR
(0=off, 1=record when one player joins the game,
2=record when one player connects to the server); the demos are
saved in the directory "server_demos" directly underneath the server
directory. The server can also "publish" the demos via an embedded
mini web server. This is controlled via the "ssd_publish" CVAR
(1=on, 0=off). When it's enabled, one can browse/fetch the demos
by pointing a web browser to the URL:
http://SERVER_IP:PORT/demos/
The server can automatically cleanup the directory by removing
demos older than a given number of days; this is controlled from
the "ssd_keepdays" CVAR: it defaults to 7 (one week); a value of
zero disables this cleanup, but you better have another way of
removing them as they will consume more and more of your disk
space.
There is also an "ssd_minsecs" CVAR that determines the minimum
number of seconds for a demo's duration. If a demo is shorter
than that minimum, then it will not be stored at all. The default
value is 30 (seconds).
There are cases where the server admin may prefer to avoid the
above described publishing and process the demos in some other
way (for example, move them to other directories, send them to
other hosts, etc). In that case, he can use the "ssd_process"
CVAR; it's a string containing a command will be issued when
the demo is ready. If that command is non-empty, then the zserv
will issue that command and will NOT do anything more regarding
the demo (ie., it will not move it, delete it, or touch it in
any way); from that point on, the demo becomes the responsibility
of the specified command.
When the server admin decides to process the demos in some other
way, he may want to publish them at some other URL, which he can
specify by using the "ssd_url" CVAR. It's a simple string and it
overrides the above described default URL. There are 2 special
escape sequences that can be used in the URL: $a will be replaced
by the IP address of the server and $p will be replaced by the
listening port.
Furthermore, the server admin may wish to specify some unique name
to be displayed in the demo download page. This is done via the
"http_title" CVAR.
Finally there is an "ssd_voice" CVAR (1=on, 0=off) that determines
whether voice data will be stored in demos or not. Defaults to ON.
2. Implemented WAD downloads directly from the server. It's controlled
from the "wad_downloads" CVAR (1=on, 0=off). When the downloads are
enabled, the launcher will be notified about it and it will use the
server's download page:
http://SERVER_IP:PORT/wads/
to fetch any missing WADs. The WADs are auto-compressed into ZIP
files and they're cached in the "cache" directory for the life of
the server (ie., once a given WAD has been compressed into ZIP,
it will never be re-compressed while the server is still running).
3. Implemented throttling of WAD and demo downloads; it's controlled
via the "max_download_kbps" CVAR. A positive value indicates the
maximum download rate in kilo-bits per second; zero or negative
values disable the throttling. Defaults to zero. There is also a
related CVAR called "max_transfers" which controls the maximum
number of concurrent downloads allowed; requests that will result
in exceeding that limit are ignored. Defaults to 10.
4. Extension of the sv_voice_chat server CVAR to recognize a value
of "3" which will stand for "commentary mode". This mode works
as follows:
Team modes
----------
Chat is in-team as usual, but there is also a "commentators" CVAR
that contains a space-delimited list of nicks allowed to speak
*from the non-playing teams*. If the list is empty, then everyone
can speak; if not, only the specified nick(s) can talk. Suppose
for example that maxteams=2; in that case 2 teams are non-playing.
Spectators would get into the non-playing teams; one or more of
those spectators would be designated as a commentator and that
person would be heard only by whoever is on his team. In this
way you could even have 2 commentary channels (green and white):
imagine for example english commentary on one channel, spanish
on the other.
Non-team modes
--------------
Commentary mode results in a "spectator-separated chat". If the
mode is coop/survival, then the players talk only to each other
(and that's one conceptual channel) and spectators talk only to
each other (that's a second channel). If it's DM, then there is
no player channel (unless it's a private server). There is also
a "commentators" CVAR containing a space-delimited list of nicks
allowed to speak from the spectator channel. If the list is
empty, it means that anyone can talk.
No changes are needed to the "voice_chat" CVAR on the client.
People will be able to hear the commentators simply by joining
the proper team (in team modes) and remaining a spectator.
There are also 3 new server commands to facilitate the mani-
pulation of the "commentators" CVAR:
commentators_clear
commentators_add nick [nick ...]
commentators_remove nick [nick ...]
5. Added a "refreshbans" server command that asks the server to
reload the master and server-provider ban lists.
6. Added new SetActivator and SetActivatorToTarget acs functions.
7. Fixed a crash on e2m9 intermission.
8. Added some spectator CCMDs that are useful for video recording.
spec_togglenoclip: allows specs to enable noclip (it is needed
in some maps that teleport players only when they use a
switch).
spec_warp: warp the spec to location x, y, z and set pitch and
angle (the input values are on the same scale as the idmypos
output).
spec_follow: make the spectator view follow a player.
spec_follow_params: TODO
spec_stopfollow: stop following a player.
9. Fixed a client crash when using combinations of higher resolutions,
SSAA and zooming.
10. Resolved a weapon/ammo desync in demos from the recorder's POV.
11. Added a new dmflag (DF_MULTIKEYBINDS = 536870912) and an associated
CVAR (sv_multikeybinds). It determines whether aliases/bindings can
trigger more than one key at the same time (typically used for SR50
automation).
12. The dmflag2 "DF2_OS_JUMP" (262144) is not needed any more. The
classic movement it implies will be always used except when
when mlook + jump + no OS_BLAST is set (rjump physics).
13. Implemented UT-style double jumping: activates when you jump a
second time near the apex of the first jump and gives you an extra
boost. It's activated via a new dmflag (DF_DBL_JUMP = 536870912),
or an associated CVAR (sv_dbljump).
14. Implemented true widescreen (16:9) support; when enabled, it
expands the field of view to 106 (rather than 90) degrees in the
horizontal direction and is suitable for most of today's monitors.
Fullscreen (4:3) as opposed to Widescreen (16:9) view is controlled
via a dmflag2 (DF2_FULLSCREEN = 262144) or an associated CVAR
(sv_fullscreen). There are also very flexible arrangements for
using widescreen on a fullscreen video mode: you can select
between letterboxing vs. stretching and you can also select the
desired amount of letterboxing/stretching.
15. Added a client CVAR called "demo_ar". It controls the desired aspect
ratio while playing back demos. It can assume a value of zero (in
which case the demo plays back at the "native" aspect ratio), one
(in that case the demo plays back as widescreen), or two (in that
case the demo plays back as fullscreen).
16. In some instances, missiles that exploded on the server would appear
as live on the client: fixed.
17. Fixed a case where doors could move below their initial height in
sectors that also had a lift in them (See liftdoortest2.wad). thx to
rhinoduck, Krawa and Evolution for reporting and testing work.
18. Added the StrParam ACS function. It allows creating temporary ACS
strings on the fly.
19. Added lineid arguments to Polyobj_StartLine and Polyobj_ExplicitLine
line specials.
20. Protocol improvements to help the hosting of home servers when
port forwarding or upnp are not properly configured.
21. Added Support for the "map00 lobby convention" in WADs. It's
controlled via the "lobby" CVAR. When that CVAR is 1, it activates
the "lobby mode":
1. The server auto-switches to map00 when both players leave.
2. The server auto-switches to map00 when a map ends.
3. All maps will always be available for voting, no matter
the value of sv_vote_map_skip.
4. There will be no time limit on map00.
5. Dynamic bots (minplayers) are excluded from map00.
For this mode to get activated, you need to:
a. Set the "lobby" CVAR to a value of 1.
b. map00 should exist in the loaded WADs.
c. Define a maplist on the server.
d. Include map00 into the maplist.
22. Multiple fixes for client and server crashes.
23. Fixed monster railgun shots not being visible online.
24. Added two new command line parameters -rand_color and
-rand_voice to randomize the player's color/voice.
25. Enabled loading of font lumps that have kerning specified.
26. Remember the value of the idmypos CVAR on the client.
27. Make color representation of health depend on dehacked
start health.
28. Allow maxplayers=1 in coop/survival.
29. Proper tid=0 handling for Thing_Damage special.
30. Fixed the spectator teleports and improved the player teleports
as recorded in demos.
31. Transfer TID when morphing an actor.
32. Fixed nightmare monster respawns; they should not spawn into
players any longer.
33. New server CVAR sv_acs_world_exit. When enabled then ASC OPEN
scripts can exit a map even when sv_noexit is set. Beware that
the activator in other scripts that use a delay can become NULL
before exit is called, thus resulting in a mistaken 'world'
exit (e.g., see DeathBall).
34. Fixed a problem with split demos and inventory/ammo/weapons
in coop/survival.
35. Fixed a crash related to long cvar names in cvar overrides.
36. Restored vanilla barrel height.
37. Added new client CVAR cl_showeventmsg. When disabled the event
messages (flag taken, etc.) will not be printed to screen. Event
sounds will still play.
38. Added new client CVAR cl_showdeadscore. It controls whether the
scoreboard is automatically drawn for dead players.
39. Added the following read-only CVARs on the client: get_x, get_y,
get_z to get the x, y, z position (fixed-point) of the display-
player; get_pitch, get_yaw, to get the pitch and angle (truncated)
of the displayplayer; get_consoleplayer, get_displayplayer to get
the consoleplayer and displayplayer indices respectively.
40. Allow old thrust method (sv_newthrust) to operate on TIDs. The ACS
function declaration is:
ThrustThing (angle, force, nolimit, tid)
old ThrustThing (angle, force, dummy, tid)
Nolimit does nothing when old thrust is enabled for compatibility
reasons.
41. Windows client and Linux server crashes will generate a dump file
that can help to fix the crash. To make it work in Linux you need
to have GDB installed. At any rate, if your server or client crashes,
you can submit the dump file so we can fix the bug.
42. Added a new dmflag2 (DF2_BRIGHTSKINS = 1073741824) and an
associated CVAR (sv_brightskins). It determines whether player
skins are brighter/more visible from a distance than normal.
43. Fixed skin scaling to work online.
44. Fix color overrides to be not applied when spectating a game.
45. Fixed a ZDoom bug that sometimes caused the BFG to misfire right
after pickup.
46. New "motd_duration" CVAR controlling how long the MOTD stays on
screen. Default value = 15 (seconds). It can range between 1 and
300; a zero value blocks the display of the MOTD completely.
47. Two new commands to re-display / kill the MOTD: "showmotd" and
"killmotd".
48. The item selection (heretic/hexen) should be shown while spying
or demo viewing.
49. Fixed the Windows 8 problems by replacing DirectDraw framebuffer
with Direct3D framebuffer using the D3D device backbuffer. This
also means that now 3rd party programs, like Steam Overlay UI,
are working.
50. Better multiple monitor support and implementing it as a menu
item to the video options.
51. Improved a bit the handling on the server of uneven packet
delivery from the clients.
52. Added a new dmflag (DF3_INSTATELE = 1) and an associated CVAR
(sv_instatele). When enabled, it removes the half-second freeze,
and preserves the player speed and angle on normal (non-silent)
teleports.
53. Switched the timestamps in all server logs to the standard ISO
format (YYYY-MM-DD HH:MM:SS). Furthermore, the frag and weapon
logs will contain timestamps just like all other logs.
54. New "limited" log on the server; it's similar to the general one,
but it does not display the IPs of connecting players, rcon commands
and non-public messages. It's enabled by the -llog cmd. line switch.
55. Implemented log downloading in the zserv; it's controlled from the
"log_publish" CVAR; when it's turned on, logs can be fetched from:
http://SERVER_IP:PORT/logs/
Only "non-sensitive" logs are available through this mechanism:
CTF, frag, weapon and limited logs. There is also a restriction in
the age of logs: current logs are NOT available for download: only
older logs are. The max. age of the logs that will be available for
download is controlled via the "log_publish_maxage" CVAR; it's an
integer that can range from 1 up to 30 (days); defaults to 7.
56. The railgun has been extended to work as a standard weapon in
Heretic and Hexen; it uses Hellstaff ammo (lesser and greater
runes) in Heretic and blue mana in Hexen. both cases it consumes
2 units of ammo per shot and gives 20 units of ammo (ie., 10 shots)
on pickup. The instagib dmflag has also been extended to work
properly in Heretic and Hexen.
57. Added the CLIENTSIDE flag to dehacked; objects having that flag
move independently on the client (no bandwidth is consumed for
their movement).
58. New "joinable_teams" server CVAR; it's a bitmask indicating which
teams are allowed to join (1=red, 2=blue, 4=green, 8=white). It is
automatically reset whenever maxteams is set; it can assume a value
between 1 (only red can join) and 15 (all 4 teams can join). Note
that team joining is STILL SUBJECT TO "maxteams"; if for example
you want only red and green to join, you will set maxteams to 3
(or 4) and joinable_teams to 1+4 = 5. If you set maxteams to 2 and
joinable_teams to 5, then only red will be able to join.
59. New "sv_info_caching" server CVAR: it determines the amount of
caching that the zserv will apply to the info sent to browsers.
It's an integer value expressed in seconds. Defaults to 3. It
can range from 1 (very little caching) to 15 (very large caching).
60. Increased the client limit to 100.
61. Implemented uncapped FPS; it's controlled from the "vid_capped_fps"
client CVAR; when the CVAR is on, the client uses 35 FPS (as in
classic DOOM); when it's off, the client uses as many FPS as your
computer can handle, SUBJECT TO your monitor's limitations (vsync).
If for example you have a strong CPU but a low-end monitor, then
you will probably see 60 FPS (the refresh rate of most low-end
monitors); if your monitor is fancier, you will see a higher FPS
value. The implementation is correct, in that this setting does
NOT affect your keyboard or mouse handling in any way.
62. Fixed a problem where a weapon appeared to fire while no projectiles
were spawned when fire was kept pressed during a weapon pickup and
PWO was enabled.
63. Spectator pitch is now recorded in demos (for the recording
player of course).
64. Improved the robustness of the old CTF convention with respect
to packet loss.
65. Enabled the demo tool to handle demos over 42MB.
66. Allow passing high CVAR values (eg. 1e+006) with the Puke CCMD.
Make it also possible to properly return such high CVAR values.
67. sv_aircontrol changes should get propagated from server to client.
68. A value of 2 for the restartemptymap CVAR will advance to the
next map.
69. Fixed a non-switching-out bug in the railgun when running out
of ammo.
70. Fixed a problem in using the A_FireCustomRailgun in dehacked
patches.
71. Made the ID numbers of Hudmessages serve as priority for the
messages. Hudmessages with lower IDs will appear in front of
those with higher IDs.
72. More work on hexen has been done; the HUD, as well as most
artifacts, armor, weapons, monsters, player classes are
*starting* to work; don't assume though that they are "done";
there is still a long road ahead for that.
73. Barrels should be able to activate lines.
74. Fixed the Hexen main menu (it should show minotaurs instead of
skulls).
-----------------------------------------------------------------------
3. 1.10b02 release (2014-08-02)
-----------------------------------------------------------------------
1. Hexen leaves are decorative and should not waste bandwidth (or
spawn twice). Fixed.
2. Added the CLIENTSIDEONLY synonym to the CLIENTSIDE dehacked
flag.
3. New dehacked flag called "SERVERONLY"; any object having that
property will spawn on the server (so it can do whatever it's
supposed to do), but the spawn & movement will not be sent to
the clients. This is useful for objects that need a single,
authoritative instance (running on the server) as opposed to
many instances (one on the server + one on each client). Objects
related to game logic can benefit from this flag. The principal
difference between this flag and the CLIENTSIDE flag is that
CLIENTSIDE tells the clients than the object has been spawned,
but doesn't send movement afterwards (so the client has to move
it), whereas SERVERONLY does not tell the clients anything about
that object (so it exists only on the server).
4. Pickup of invulnerability spheres by players would not update
their APROP_Invulnerable property (as reported to ACS). Fixed.
5. Fixed a problem when in-game chat contained the character #255.
6. A couple of crosshair fixes in virtual 320x200 mode.
7. Fixed a problem with the 'mute when out of focus' option in
full screen mode.
8. Extended the server maplist to handle very large maplists (up
to 10000 maps) efficiently.
9. Fixed bouncing-related bugs in dehacked.
10. Bossbrain and serpent fixes.
11. Log access via the ZServ HTTPD was not functioning correctly on
Linux servers. Corrected.
12. Added Cyrillic versions of the Trebuchet font.
13. Fixed a quake-related crash.
14. Fixed a 'corpse queue'-related crash.
15. Fixed some rendering-related crashes.
-----------------------------------------------------------------------
4. 1.10b03 release (2015-01-01)
-----------------------------------------------------------------------
1. Fixed a recently introduced bug whereby the "cl_maxbodies" CVAR
would be ignored.
2. Fixed a crash in the ACS function "CheckWeapon" when the activator
had no weapon at all.
3. Fixed an occasional "no camera" bug while viewing demos.
4. Fixed a crash when an actor died from ice damage and had no ice
death defined.
5. Fixed a client crash when encountering a "none" decal in the
DECALDEF lump.
6. Fixed a recently introducted bug when an actor's death state was
set to NULL.
7. From now on, CVAR overrides for a given map will be applied in the
order specified in zserv.cfg and they'll be restored in the inverse
order.
8. Implemented an MBF-style codepointer A_PlayWeaponSound. It's
similar to A_PlaySound, except that:
a. it applies to weapon rather than actor frames,
b. it uses the weapon rather than the body channel,
c. it uses Args1/Args2 rather than Unknown 1/2 for the sound
number and attenuation flag respectively (Unknown 1/2 are
used for the animation in weapon frames).
9. Fixed some inacurracy when using the turn180 command online.
10. Extended the number of possible Args in dehacked frames to 9
(Args1...Args9). This will be useful in future extensions.
11. Implemented several new MBF-style codepointers; they're inter-
faces to the ACS scripting functions and they're designed to
allow controling ACS scripts from dehacked. For each relevant
ACS function, there are 2 codepointers: one strictly for actor
frames (names starting with CPA_), the other strictly for
weapon frames (names starting with CPW_). All the codepointers
take their parameters as Args1...Args5 in the order used by
the ACS function that they call. Here is the list:
a. CPA_Execute, CPW_Execute:
they map to the ACS function:
ACS_Execute(script, map, s_arg1, s_arg2, s_arg3)
Since ACS_Execute takes 5 parameters, the codepointers
use Args1...Args5.
b. CPA_ExecuteAlways, CPW_ExecuteAlways:
they map to the ACS function:
ACS_ExecuteAlways(script, map, s_arg1, s_arg2, s_arg3)
Since ACS_ExecuteAlways takes 5 parameters, the codepointers
use Args1...Args5.
c. CPA_LockedExecute, CPW_LockedExecute:
they map to the ACS function:
ACS_LockedExecute(script, map, s_arg1, s_arg2, lock)
Since ACS_LockedExecute takes 5 parameters, the codepointers
use Args1...Args5.
d. CPA_LockedExecuteDoor, CPW_LockedExecuteDoor:
they map to the ACS function:
ACS_LockedExecuteDoor(script, map, s_arg1, s_arg2, lock)
Since ACS_LockedExecuteDoor takes 5 parameters, the code-
pointers use Args1...Args5.
e. CPA_Suspend, CPW_Suspend:
they map to the ACS function:
ACS_Suspend(script, map)
Since ACS_Suspend takes 2 parameters, the codepointers
use Args1...Args2.
f. CPA_Terminate, CPW_Terminate:
they map to the ACS function:
ACS_Terminate(script, map)
Since ACS_Terminate takes 2 parameters, the codepointers
use Args1...Args2.
12. Implemented an MBF-style codepointer A_RandomJump. It can alter
the execution path of actors depending on a random drawing. One
uses the "Unknown2" parameter to specify the desired probability
(N / 256) of a jump to the frame specified by the "Unknown1"
parameter. If for example, Unknown2=192 and Unknown1=14, it
means we want the actor to jump to frame 14 with a probability
of 75% (192/256) or to the next frame otherwise.
IMPORTANT NOTE: this codepointer applies to actors only; if you
try to use it on weapons, it *will* crash the engine.
13. Fixed a client crash after the end of a level when the level does
not have an intermission image.
14. Enabled the getting/setting of 3 actor properties from the
Get/SetActorProperty() ACS functions:
APROP_Height (read only)
APROP_Radius (read only)
APROP_ReactionTime (read/write)
15. The APROP_Speed property can now be read/set on players.
16. Implemented the decapitation in the Heretic's player, Hexen's
Fighter player and Fighter Boss (Zedek) extreme death (gibbing).
17. Heretic's bag of holding should not spawn in instagib mode.
18. Successive "say" commands cannot occur within 3 ticks of each
other.
19. Implemented the automatic submission of minidump files when the
client crashes; this can help in finding and fixing client bugs.
The generation and submission of those files is controled by the
"minidump_policy" CVAR. It can take one of the following values:
0: Don't generate any minidumps
1: Just generate minidumps; don't send them anywhere.
2: Generate minidumps and submit them to zdaemon. This is
the default value.
3: Generate minidumps, submit them to zdaemon and then
delete them.
20. The A_FastChase codepointer can now be accessed from dehacked.
21. The "turn180" command will not be able to coexist with other
commands in the same alias (macro). Firing rockets from one's
back was never intended as a game feature. The command will
still be usable in its intended (standalone) form.
22. A "monsters telefrag each other" option was always forced on
on any map called "map30"; it's useful for the "Icon of Sin"
map in doom2.wad, but not for other WADs. We changed it so
that this flag is turned on for map30 only when doom2.wad is
loaded and it's the only wad. In this way it will work for
normal DOOM coop, but it will not conflict with other WADs
(one can turn on that flag from mapinfo for any map on newer
WADs).
-----------------------------------------------------------------------
5. 1.10b04 release (2015-08-02)
-----------------------------------------------------------------------
1. Fix for the automap which was off-center in overlaid mode when
the virtual 320x200 mode was selected.
2. Doom Builder's 3D Camera object will get ignored on map loading.
It's not used by the engine anyway.
3. Frags by fist (staff in Heretic) will trigger the playback of
the "ann/kill_fist" sound clip. Similarly frags by chainsaw
(gauntlets in Heretic) will trigger the "ann/kill_chainsaw"
sound clip. Both clips are optional and may be provided by
a PWAD.
4. Implementation of the "weapon-specific" scripted marines,
including the ACS opcodes to set their weapon / sprite.
5. The "spec_warp" client command should not check for the
validity of a move if the client has noclip enabled.
6. Implementation of the following ACS functions:
* ResetMap
* PlayerIsSpectator(player_index)
* ConsolePlayerNumber
* GetPlayerLivesLeft(player_index)
* ACS_NamedExecute
* ACS_NamedExecuteWait
* ACS_NamedExecuteAlways
* ACS_NamedExecuteWithResult
* ACS_NamedLockedExecute
* ACS NamedLockedExecuteDoor
* ACS_NamedSuspend
* ACS_NamedTerminate
* NamedScriptWait
7. Fixed a desync in the movement of the Heretic firemace
projectiles in online mode. thx to Krawa for the report
and debugging work.
8. Added a "SYNCMOVEMENT" flag to dehacked; it can be used
for projectiles having idiosynchratic/randomized movement
that need frequent "driving" from the server to the clients
(use it with restraint though: it consumes more bandwidth
than normal projectiles).
9. The recent DirectDraw -> Direct3D video changes resulted
in an incompatibility with 16-bit (Highcolor) video modes.
This has been fixed now.
10. New constants for the GetPlayerInfo() ACS function, so it
can access more player-related data.
PLAYERINFO_ITEMS: the player's item count.
PLAYERINFO_HEALTH: the player's current health.
PLAYERINFO_ARMOR: the player's current armor.
PLAYERINFO_SECRETS: the player's secret count.
PLAYERINFO_KILLS: the player's kill (NOT frag) count.
PLAYERINFO_DEATHS: the player's death count.
PLAYERINFO_SUICIDES: the player's suicide count.
PLAYERINFO_PTS_1: the primary criterion for the current
gamemode. It pertains to frags in DM,
damage in coop/survival, points in
CTF/DDOM/KOTH.
PLAYERINFO_PTS_2: the secondary criterion for the
current gamemode. It pertains to
deaths in DM, and kills in coop/
survival.
PLAYERINFO_PTS_3: the tertiary criterion for the
current gamemode. It pertains to
deaths in coop/survival.
PLAYERINFO_TIME: the time (in game ticks) since the
player last spawned (in the current
level); -1 if he hasn't.
PLAYERINFO_USR_1: Ten user-defined counters that
... may be used by modders for any
PLAYERINFO_USR_10: purpose.
11. New SetPlayerInfo() ACS function to set some player
characteristics. The syntax is:
void SetPlayerInfo(int player, int selector, int value)
The "selector" parameter must range from PLAYERINFO_USR_1
through PLAYERINFO_USR_10; other values for the selector
will be silently ignored. This is just a first implemen-
tation; the function may be extended to handle more
PLAYERINFO_* constants in the future.
12. New PlayerTopIndex() ACS function to obtain the highest
player index at the moment; it can be used to efficiently
obtain the upper bound for loops iterating over all players.
The syntax is:
int PlayerTopIndex(void)
13. New NetMode() ACS function to obtain the current "network
mode" at runtime. The syntax is:
int NetMode(void)
It returns one of three possible values:
* NM_SINGLEPLAYER (1): The script is being run by
the ZDaemon client in SP mode.
* NM_SERVER (2): The script is being run by the
the ZDaemon server in online mode.
* NM_CLIENT (3): The script is being run by the
the ZDaemon client in online mode.
14. New ACS functions for executing scripts "remotely" (ie.,
the server can instruct a client to run a script and
the client can instruct the server to run another script).
The syntax is:
void Server_Execute(int script, int map,
int arg1, int arg2, int arg3)
void Server_ExecuteAlways(int script, int map,
int arg1, int arg2, int arg3)
void Server_NamedExecute(string script, int map,
int arg1, int arg2, int arg3)
void Server_NamedExecuteAlways(string script, int map,
int arg1, int arg2, int arg3)
void Client_Execute(int client, int script, int map,
int arg1, int arg2, int arg3)
void Client_ExecuteAlways(int client, int script, int map,
int arg1, int arg2, int arg3)
void Client_NamedExecute(int client, string script, int map,
int arg1, int arg2, int arg3)
void Client_NamedExecuteAlways(int client, string script,
int map, int arg1, int arg2, int arg3)
The functions mimic the ACS_Execute, ACS_ExecuteAlways,
ACS_NamedExecute, ACS_NamedExecuteAlways functions in
terms of parameters and functionality. The Client_*
functions have an additional parameter at the front,
indicating the "target client"; a value of -1 indicates
all clients.
When the Server_* functions are encountered by the
server, they're executed just like normal ACS_Execute.
When they're encountered by the client in SP mode, they
are also executed just like normal ACS_Execute. When
they're encountered by the client in online mode, the
clients sends a message to the server to carry out the
execution.
When the Client_* functions are encountered by the
server, the server sends a message to the indicated
clients to carry out the execution. When they're
encountered by the client in either SP or online mode,
they're executed just like normal ACS_Execute as long
as the "target client" is either -1 or equal to the
consoleplayer.
The ACS extensions of the last 5 items above require a new
"zdaemon.acs" file for ACC (the ACS compiler); you can
download it from:
https://downloads.zdaemon.org/zdaemon.acs
15. Complete implementation of monster infighting with respect
to the latest zdoom (2.7.1). There are two dehacked keywords
"Monsters Ignore Each Other"
"Monsters Infight",
a dehacked flag called "NOINFIGHTING", as well as a new
"infighting" CVAR which is an integer with 3 possible
values (default value = 0):
-1 : Monsters never fight other monsters
0 : Monsters do not fight other monsters of their own
kind unless they use bullet attacks. This is the
standard Doom behavior.
1 : Monsters will fight other monsters, including
those of their own kind.
16. The height of the CTF flags went up from 16 units to 48.
17. Implementation of friendly monsters; there are also two
new dehacked flags "FRIENDLY" and "SUMMONEDMONSTER" which
can be applied to various actors.
18. New client command "spy" that enables you to specify
either a player number (when using a # prefix) or a
player name (when using a $ prefix) so you can switch
POV to that player directly. The usual restrictions
apply of course.
19. Two new server commands to remove maps from the maplist:
delmapbyidx
delmapbyname
The first removes a map by its index (1 being the first
one), the second removes all entries matching the specified
map name.
20. Implementation of 4 new ACS functions for simpler/better
pseudorandom numbers:
1. int ZD_rand(int min_value, int max_value);
Draws a uniformly distributed random number in the specified
range (the range includes the min. and max. values). It can
work in "repeatable" mode (via the functions below), but
that's NOT the default operation; it defaults to "always
new" drawings.
2. void ZD_srand(int seed);
Sets the seed of the random number generator; if the specified
value is negative, then it will use something "random" based
on the current time and other parameters. This function gets
auto-called with seed = -1 on every map load, which results
in "always new" drawings; if you want repeatability, you can
call the function with a fixed (and non-negative) seed value
(eg., 0).
3. void ZD_rand_savestate();
Saves the current state so you can restore it later.
4. void ZD_rand_restorestate();
Restores a previously saved state so you can re-draw the same
random numbers.
These extensions require a new "zdaemon.acs" file for ACC (the
ACS compiler); you can download it from:
https://downloads.zdaemon.org/zdaemon.acs
-----------------------------------------------------------------------
7. 1.10b06 release (2015-08-21)
-----------------------------------------------------------------------
1. Fixed a monster infighting problem whereby hitscan monsters
would not target other monsters of the same kind that damaged
them.
2. Fixed a namespace collision problem between BEHAVIOR and LOADACS
lumps.
3. The RCON SAY command will be included in the limited log.
-----------------------------------------------------------------------
8. 1.10b07 release (2015-10-08)
-----------------------------------------------------------------------
1. Implemented the "pukename" console command: it enables the
invocation of named scripts from the console. The syntax is:
pukename < script_name > ["always"] [arg1] [arg2] [arg3]
where items in square brackets are optional.
2. Extended the A_Mushroom codepointer to use the Unknown1/2
parameters as per the original MBF behavior.
3. Implemented a "CHASEGOAL" actor property; monsters with that
flag walks towards their goal instead of their target if a
valid goal is set. The property can be set/read from ACS
(GetProperty/SetProperty/CheckProperty/Thing_SetGoal) or from
dehacked (deh. flag name = "CHASEGOAL").
4. Implemented the "VISIBILITYPULSE" dehacked flag.
5. Playback of external m3u/audio files has been blocked; users
can get the same results from using any media player.
6. Enabled the access/manipulation of all code pointers in the
engine via dehacked: not only those of doom. Also added some
related documentation to the web site:
http://www.zdaemon.org/?CMD=info&NAME=deh
7. Added protection against code pointer mismatches: the engine
will detect (and complain) if an actor code pointer gets
called by a weapon and vice versa.
8. Implemented several new MBF-style code pointers:
a. CPA_BulletAttack
Performs a hitscan attack (firing bullets); you can
specify the number of bullets in "Args1" and the sound
to be made in "Args2". This code pointer is meant to
be used by actors only: not weapons.
b. CPW_BulletAttack
Similar to CPA_BulletAttack but for weapons; it will
also do ammo checking/depletion.
c. CPA_CustomBulletAttack
Implements a more customizable hitscan attack for monsters;
the parameters are passed as Args1..Args8:
1. horz_spread: The horizontal spread, in degrees.
2. vert_spread: The vertical spread, in degrees.
3. numbullets: The number of bullets to fire.
4. damageperbullet: The amount of damage each bullet
does. Unless the CBAF_NORANDOM flag is set, this
is multiplied by a random value between 1 and 3.
5. pufftype: Thing mnemonic or DeHackEd number to
spawn for puffs (when a wall is hit). Defaults
to "BulletPuff" if missing or invalid.
6. range: The maximum range of the bullets. Default
is 0, which is interpreted as 2048.
7. flags: bitmask consisting of any number of the
following options (bits):
CBAF_AIMFACING (1): If set, the attack will be
fired in the direction the actor is currently
facing, rather than at the actor's current
target.
CBAF_NORANDOM (2): If set, the damage per bullet
is not randomized.
CBAF_EXPLICITANGLE (4): If set, the horizontal
and vertical spread are used as explicitly
stated, instead of being used as a range for
random spread.
CBAF_NOPITCH (8): If set, the vertical angle is
not adjusted to aim at the target.
CBAF_USEAMMO (16): If set, the player's bullet
inventory is checked/depleted. Valid only
for players/weapons.
8. firing sound
d. CPW_CustomBulletAttack
Similar to CPA_CustomBulletAttack but for weapons; it will
also do ammo checking/depletion if you use the CBAF_USEAMMO
bit in the flags parameter.
e. CPA_CustomMissile
Implements a customizable projectile attack for monsters.
the parameters are passed as Args1..Args7:
1. missiletype: Thing mnemonic or DeHackEd number of
missile to be spawned. Defaults to "Rocket" if
missing or invalid.
2. spawnheight: how high from the monster's feet to
shoot the missile.
3. spawnofs_horiz: how far from the monster's center
to shoot the missile.
4. angle: the direction relative to the monster's
facing angle in which to shoot the missile.
5. pitch: used only when some of the flags (listed
below) are used.
6. firing sound
7. flags: bitmask consisting of any number of the
following options (bits):
CMF_AIMOFFSET (1): the missile is aimed parallel
to a missile with a spawn height of 32 and an
xy-offet of 0. This can be useful if you want
to have a monster shoot multiple missiles at
once.
CMF_AIMDIRECTION (2): the missile is not aimed
at a target. Instead, it is shot in the
specified direction with the specified pitch.
CMF_TRACKOWNER (4): if a missile is fired by
another missile, use this flag to ensure the
secondary projectile knows who is its real
owner.
CMF_CHECKTARGETDEAD (8): with this flag, the
function will not spawn a missile if the
calling actor's current target is dead.
CMF_ABSOLUTEPITCH (16): use the pitch parameter
as an absolute value, ignoring the calculated
aim pitch. Implied CMF_AIMDIRECTION. The main
difference here is that a target is required,
where CMF_AIMDIRECTION does not require a
target.
CMF_OFFSETPITCH (32): use the pitch parameter as
an offset to the calculated aim pitch.
CMF_SAVEPITCH (64): the pitch used for firing
the missile is saved as the missile's own
pitch. (Requires CMF_AIMDIRECTION,
CMF_ABSOLUTEPITCH, or CMF_OFFSETPITCH.)
CMF_ABSOLUTEANGLE (128): use the angle parameter
as an absolute value, instead of an offset to
the actor's angle.
f. CPW_CustomMissile
Similar to CPA_CustomMissile but for weapons; it uses the
same parameters for Args1..Args6. Args7 is still a flags
parameter but it accepts different options (bits):
CMF_USEAMMO (256): check and deplete the player's ammo.
Args8 specifies the ammo to be checked/used according
to the following convention:
1: Bullets
2: Shotgun Shells
3: Energy Cells
4: Rockets
5: Wand Crystals
6: Ethereal Arrows
7: Dragon Claw/Blaster orbs
8: Hellstaff/Skullrod runes
9: Phoenix Rod orbs
10: Mace Spheres
11: Blue Mana
12: Green Mana
Args9 specifies the ammount of ammo used per shot.
CMF_AIMATANGLE (512): add the specified angle to the
player's angle when shooting the missile.
9. Slightly modified the survival rules: when someone disconnects
while playing, he doesn't get automatically blocked from re-
joining in the same level: he gets charged with one death
instead; if the resulting death count is lower than maxlives,
he can re-join but he will get "charged" with the death count.
Otherwise, he will be blocked just like before.
10. Implemented a more precise gravity property per actor accessible
from dehacked or ACS; a value of 1.0 signifies "normal gravity",
0.1250 signifies "low gravity" and 0 signifies "no gravity". The
NOGRAVITY and LOGRAV flags remain for compatibility purposes.
11. Implemented a "DamageFactor" dehacked property for actors. It
specifies an actor's sensitivity to damage (1.0 being "normal",
and higher values indicating higher sensitivity to damage).
12. Implemented a remove_cvaroverride server command: the syntax is:
remove_cvaroverride < map_name > < cvar_name >
13. Added a new boolean CVAR "retain_console". When set to true,
it will not close the console at map start; defaults to false
(ie., same behavior like before).
14. Coop/Survival players are not autojoined any more on map reset.
15. When a map changes via voting, in-game players will be auto-
joined except in coop/survival.
16. sv_randmaps now uses maplist shuffling instead of purely random
selection.
17. Kick voting now requires at least 2 voters (apart from the
percentage specified by "sv_vote_kick_percent").
18. Various minor ACS improvements:
a. ACS named scripts will be case-insensitive.
b. Script names are shown by name and number where applicable.
c. An "instance id" has been added to each script's displayed
name to distinguish instances of the same script.
19. The coop/survival spawning algorithm has been reworked as follows:
a. In SP mode: for "spectator spawn", "normal in-game spawn",
and "respawn after death" we use the "player number method"
of Doom. So the player always spawns at spot 1; if he adds
a bot, the bot always spawns at spot 2; if he adds another
bot, that goes to spot 3, and so on. So in SP mode ZDaemon
behaves identically to Doom.
b. In C/S mode: when you spawn (as a player) in-game, ZDaemon
uses a "by spawn order" (rather than by player number);
this means that the first guy to spawn goes to spot 1, the
second to spot 2, etc. This is the closest possible C/S
analogue to the original Doom behavior.
c. In C/S mode: when you respawn after death, you use the
same spawn that you used on first in-game spawn. This
together with the item above, implies that the spawning
behaves as in SP mode (and as in classic Doom), when
there is only one player in the server.
d. In C/S mode: when you spawn as a spectator, it simply uses
one of the coop spawns at random; this is more useful for
spectating. It has no analogue in classic Doom, as Doom
had no spectator support.
-----------------------------------------------------------------------
9. 1.10b08 release (2017-09-04)
-----------------------------------------------------------------------
1. Modified the "Press the 'USE' key to join" message shown to
spectators in survival when sv_joinlimit is in effect. The new
message either displays the remaining time to join or informs
players that joining is disabled until the next round.
2. Extended the range of numeric ACS scripts: they can range from
1 up to 32767. Also extended the upper limit on the total number
of named scripts to 32768.
3. Implemented the APROP_MasterTID, APROP_TargetTID. APROP_TracerTID
actor properties for the GetActorProperty, SetActorProperty and
CheckActorProperty ACS functions.
4. Freedoomu is now correctly recognized as a registered IWAD.
5. Updates for the FLAC and ZLIB libraries.
-----------------------------------------------------------------------
10. 1.10b09 release (2018-02-12)
-----------------------------------------------------------------------
1. chase_dist is now restricted to the 0...1000 range.
2. chase_height is now restricted to the -100...100 range.
3. Security cameras did not work with uncapped FPS: fixed.
4. Fixed a problem when a player's camera was switched via
scripting, while the player had activated spycam.
5. Fixed a bug that could crash the server in some
combinations of player respawning/disconnections.
6. High resolution video modes having an aspect ratio of 1.6
(for example 1920x1200, 1440x900, 1280x800) were treated
like 320x200 in terms of the aspect ratio (so they looked
distorted). Fixed. This also means that virtual 320x200
mode is available only for fullscreen (not widescreen)
gameplay.
7. Avoid geometric distortions during window resizing and
maximization by enforcing the aspect ratio of the selected
mode; also handles multiple monitors properly. One can
supress that behavior (and mess with the aspect ratio)
by setting the "vid_override_ar" CVAR to true.
8. Security & safety improvements in ACS handling.
9. The "exec" cmd. on the server has been restricted to
access files inside the server's working directory.
The same command has been re-enabled on the client
subject to the same restriction, but only in SP mode.
10. Fixed a bug related to the invocation of acs named
scripts across acs libraries.
11. There was a bug in the ChangeCamera line special logic:
sometimes it would change the camera of all players even
when it should change only the activator's camera: fixed.
12. The ThingDamage line special was buggy regarding the target
of the damage and the reporting of negative damages in
online mode: fixed.
13. Added a new dmflag (DF3_NOCHASEMODE = 2) and an associated
CVAR (sv_nochasemode). It blocks chase mode from working
in coop/survival modes in online games (chase mode is
already blocked in other, competitive modes).
14. Monsters should not open fast doors.
15. rhinoduck-contributed fix for a problem regarding nested
invocations of the ACS Log() function. Thanks rhinoduck.
16. Improved the implementation of the SetActivatorToTarget and
SetActivator ACS functions.
17. The kick and addban commands got extended to handle the
# and $ player specification (just like addtempban).
18. Improvements in the boss death behavior.
19. Fixed some problems with the monster count regarding
friendly monsters.
20. The "special touching" logic has been reworked for better
fidelity to vanilla DOOM. You can now pick up items 56
units or below: used to be 55 or below.
21. Better syncing of level variables (monsters, items, secrets)
between server and clients.
22. Improved the handling of moving floors/ceilings in the
presence of packet loss.
23. Fixed a bug regarding the activation/deactivation of ambient
sounds.
24. Fixed a bug related to certain color translations in online
mode.
25. Netcode improvements for handling packet loss/out-of-order
problems.
26. Fixed more camera "synchronization" problems in online mode.
27. Improved spectator/player weapon pickup synchronization even
when DMFLAGS change.
28. Enabled floor/ceiling waggles in online mode.
29. Implementation of the ACS functions FadeTo, FadeRange and
CancelFade in online mode.
30. Stealth monsters were not visible at all while shooting in
online mode: fixed.
31. Earthquakes should move the player's view even when his
view has switched to some camera.
-----------------------------------------------------------------------
11. 1.10 release (2018-03-07)
-----------------------------------------------------------------------------
1. Fixed sound sequence problems in online mode.
2. Fixed console wrapping in the presence of SSAA.
3. Do not log client IPs in ltd log.
4. Resolved a case where a client disconnection wouldn't be
logged in the ltd log after a kick or ban.
5. Better polyobject handling in online mode.
6. SP is now more consistent with C/S in various game modes.
7. Smoother sprite animation. Thx to Medis and noncom for the
patch submission.
8. GetPolyobjX and GetPolyobjY work now (client and server).
9. Added server name and address to demos.
10. Survival fix to avoid taking a life when someone disconnects
while dead.
-----------------------------------------------------------------------------
|