|
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 <NNN> delmapbyname <XXX> 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. ----------------------------------------------------------------------------- |