The file packages/models/playermodels/RVSF/07_Blue-Red.psd had a filesize
of over nine megabyte - and was of no use to the game. It made all recent
game packages 9MB bigger than they had to be. That's about the size of
all game textures combined...
If someone still needs the file, check it out from an older commit.
Some changes to allow the current experimental branch to be used for a
hotfix release for win10 users.
The latest win10-update broke compatibility with SDL1.2 - and apparently
MS is not going to fix it. This hotfix allows win10 users to use our
experimental SDL2-based client.
It is quite incompatible with the 1.2.0.2 release - but it's good enough
to be played in pubs.
Coopedit will not work and quite a few custom maps won't work properly.
This is due to lots of changes in the map file format and does not mean,
that those custom maps can not be played in future game releases - they
just need to be reworked. See akimbo2 to check out the reworked maps, btw.
The old official maps and most conservative custom maps should be fine.
Due to some physics changes, players of the hotfix client will have some
advantages and some disadvantages compared to the regular clients, so DO
NOT USE THE HOTFIX CLIENT TO PLAY COMPETITIVELY.
By default, if an incompatible map is loaded in multiplayer, the client
will disconnect automatically. This can be disabled (disconnectonmaperror),
but will probably get you marked as cheater, because on incompatible maps,
model clipping may not work properly. Just stick to compatible maps...
If a key is not listed in keymap.cfg but SDL provides a good enough name
for the corresponding scancode, a keymap entry is generated automatically.
If a key can't be found when adding a bind, it is checked, if SDL can
resolve the key name. The resolved keybind is then used to recreate the
keymap entry - and the bind can succeed.
Some SDL names for scancodes may not be usable as keymap names: if the
name contains (, ), $ or ", it will be rejected. Also, SDL does not
provide names for all scancodes. Scancode names provided by SDL can be
platform-dependant, therefore recreating the bind may fail on a different
platform.
However, the feature should work fine with most nonstandard keys - and the
information written to clientlog can be used to amend keymap.cfg
If a keycode can not be found on the list from keymap.cfg a second search
is done for the scancode. This should be helpful to assign
layout-dependent keys with rare keycodes.
Also: use a hash table for the keys (instead of a list).
Add two new scan codes for dead keys on german layouts: LEFTOF1 and
LEFTOFDEL.
* use keyrepeat and textinput switch code from sauer (on windows, opening
a console with "t" also produced a "t" as text otherwise)
* screenw and screenh are now cubescript-variables that always reflect
the actual resolution of the screen or the window
DOCREF screenw screenh
* switch travis to trusty
* new parameter fullscreendesktop: uses desktop resolution for fullscreen
* "colorbits" removed, since it's no longer supported
* scr_w/scr_h no longer necessarily reflect the true display resolution
(with fullscreendesktop = 1 and fullscreen = 1, scr_w and scr_h are
ignored)
* desktopw and desktoph are now guaranteed to have nonzero values
* fallback to old mouse behaviour when SDL_SetRelativeMouseMode fails
* require a click into the window to grab the mouse
* scr_w/scr_h default to desktop resolution on first run
thx sauerbraten :)
DOCREF fullscreendesktop colorbits
the same mousewheel direction now always moves an entity away from or
towards the player
entproperty
if 100 is added to the attribute index parameter, the sign of the
increment value is changed
editaxis
returns a value for the main axis of player orientation (X:11, Y:12,
Z:13) and adds 100 if the player is looking in the negative
direction of the axis
DOCREF entproperty editaxis
greyed out menu items are a) grey and b) can't be operated
menuitemgreyedout 0|1
menu items added after this command are greyed out (1) or not (0)
DOCREF menuitemgreyedout
spectfovremote 0|1
'1' uses fov and scopefov of the spectated player, '0' uses spectfov
and the local scopefov, default is '0'
maxrollremote sets the maximum roll to be shown during spectating
DOCREF spectfovremote
* remove roll
* optimise for size
* new protocol data type: unsigned integer with known size
* highres yaw encoding
* double resolution for pitch angles -30°..30°
* half resolution for pitch angles -90°..-30° and 30°..90°
* proper rounding for pitch and yaw values
* same resolution for yaw and pitch for both pos packet types
* restore transmission of the velocity vector
fix server hanging after 5th demo
fix incomplete demo slot cleanup
fix demo file size reporting (enddemorecord can't do it accurately, because
the file is not complete, yet - so, round to megabytes, where the error
doesn't show...)
include exact demo file size in "listdemos" report
The demo data is collected, hashed and compressed fully in memory, mostly
in a worker thread.
While in memory, each demo is identified by an unique sequence number,
which is, for example, used to request a download by the client.
If so configured, the demo is written to file by the worker thread.
If F10 is pressed later than two minutes into the next game, instead of
downloading the last game, the current game is scheduled to be
automatically downloaded when it ends.
At the end of a game, all clients and the server sign the demo file.
If a filename does not contain at least mode, map and timestamp (due to
messed up format strings), the default format is used to ensure unique
filenames.
server side: added server parameters
demo_max_number
number of demo files to hold in RAM
demo_save
enable/disable writing of demos to file
demo_path
demo file path and filename prefix
demo_filenameformat
format string to assemble demo information to a filename
%g : gamemode (int)
%G : gamemode (chr)
%F : gamemode (full)
%m : minutes remaining
%M : minutes played
%s : seconds remaining
%S : seconds played
%h : IP of server
%H : hostname of server (client only)
%n : mapName
%w : timestamp (formatted by demo_timestampformat)
demo_timestampformat
timestamp format string (see strftime() for format options)
if the string starts with 'U', UTC is used - otherwise local time
client side:
changed demonameformat and demotimeformat to SVARs
demonameformat
like demo_filenameformat
demotimeformat
like demo_timestampformat
removed demotimelocal getdemonameformat getdemotimeformat getdemotimelocal
DOCREF demonameformat demotimeformat
DOCREF demotimelocal getdemonameformat getdemotimeformat getdemotimelocal
a negative modepenalty_weight value makes the server more likely to
suggest games with the same mode as was recently played
default is a positive value to more likely mix it up
Server owners can overwrite values on a server, which then don't get
updated from file anymore. With a reset command, all parameters get read
from file again. Implemented as "serverextensions".
serverextension servpar::get parname
print parname and value
serverextension servpar::set parname:value
set parname to value
also disables reading of this parameter from file (otherwise, the
new value wouldn't last very long)
serverextension servpar::reset
set all parameters to be read from file again
serverextension servpar::dump
prints unsorted list of all parameters, values, limits and descriptions
mapartist print|set|get|clear
print: prints the map artist player ID
set: sets the map artist player ID to the currently logged in player
get: returns the current map artist player ID
clear: erases an existing map artist record in the current map
modeinfo list|get|clear|<modelist> <modeflags>
list: lists current modeinfo entries
get: returns list of current modeinfo entries
clear: erases current list of modeinfo entries
<modelist> <modeflags>: specifies flags for a list of modes
DOCREF modeinfo mapartist
The server keeps track of every player ID that ever connected successfully.
This database stores the last names and IPs used by the player and the
last countries the connections came from. Some stats are counted, like
"time connected" and "total tks". Most importantly, the database stores
rights (like admin) and restrictions (like ban). All rights and
restrictions are kept as dates (or timecodes), so, for example, if your
ban date is in the future, you are banned - and if it's in the past, you
can play. The collected stats are meant to help server owners at managing
players - especially, if they want to give someone admin rights.
The database is periodically saved to a file and read from that file on
startup. The default file is config/servervita.cfg and one backup is kept
in config/servervita_bak.cfg. During server start, if the regular file
can't be loaded, the backup is tried instead.
While the server is running, it checks periodically for a file named
config/servervita_update.cfg, and if the file exists, it is renamed to
a backup filename including a timecode and read and merged into the
database. The automatic rename makes sure, that a file is only read once.
Using such updates, a server owner can easily give several people admin
rights or for example, add clan tags for a whole list of IDs. (Yes, the
database also stores a clan tag for every ID...)
The database also stores two short comments for every ID. One can only be
read by server admins, but the other one is public. The public reason, for
example, can state a reason for a ban.
One database record takes up 264 bytes of RAM. During autosave, accounts,
that have not been used for a specified time (default 12 months), will
not be written. After a server restart, those old records will be gone.
Currently, there is no process in place, to also clean up old records
from RAM. Maybe, that'll be added later...
Uses own thread to actually write to logs, so the main thread can't be
blocked by a slow logfile. Log entries are buffered in two ringbuffers,
one for the main thread and one for all other threads. The main thread
will copy the second buffer to the main buffer periodically. The main
thread buffer is read from the log worker thread.
Since two buffers are kept, there are now several functions to add a log
entry:
mlog()
for main thread functions only: will never block
tlog()
other threads only: may block, until main thread copied some entries
xlog()
automatically determines, which thread it's been called from and
then writes to the proper buffer (will block accordingly)
To avoid improper usage, mlog and tlog verify, if they are used correctly.
(Only for debug builds. An assert triggers, if necessary.)
(to avoid casting IPs to signed integer)
also mute single number debug messages for compound data structures like
string and key: no longer print a debug message for every char of a string
Instead of a list of specific map+mode combinations the maprot now only
contains general rules for maps and game modes. The server then calculates
the list by itself when needed. The server accounts played maps and modes
(and map+mode combinations) and calculates the list specifically not to
overplay maps or modes.
May need further testing.
A list of parameters is read from config/serverparameters.cfg once per
minute and the values written to corresponding server data structures.
If the binary is compiled in debug mode, starting a dedicated server
will write a blank config file with all possible parameters and their
descriptions, sorted and grouped into chapters.
The name of the config file can be set with the commandline parameter -A.
So far, syntax errors are not reported. Instead, it's possible to dump
all current values to a file every time something changes.
"readserverconfigsthread" gets triggered by poll_serverthreads() once a
minute to check the filesizes of all server config files. Altered files
get loaded into memory.
poll_serverthreads() in the main thread then processes the buffered files
one at a time. During processing, a semaphore is locked, so that other
threads can use the data structures derived from config files - if they
use the semaphore to lock the ressource.
Using the data from main thread can be done without using the semaphore,
since _all_ changes are done in the main thread.
If the main thread wants to update data that is locked by a thread, the
main thread will defer the changes for a minute. The main thread will
never lock.
also:
* -Y now sets the private key for the server
* -m without argument uses default masterserver URL
* servers run LAN-only by default (set ms URL and private key to
register with the master)
* use generic locale "POSIX"
almost 3000 lines of "errors" contained one actual memleak, one actually
unused variable and three actual ambiguous code parts
from cppcheck website: "The goal is to detect only real errors in the
code (i.e. have zero false positives)." :)
thx for finding five problems in our code
new tool: list media sources
new stage: check vantage points
new: add single map from menu
new: option to abort maps on stage errors
fixed: make sure, player is alive (to be able to enter edit mode) during
conversions
- copyent and pasteent now also work with the menu list of copied ents
- pressing editmeta while using pasteent opens the menu
- new switch command (not unlike the old one)
- make expandselection and shrinkselection work with multiple selections
DOCREF switch copyent pasteent
newent7 type attr1 attr2 attr3 attr4 attr5 attr6 attr7
Works like newent, but can set all seven attributes directly.
Does not automatically put the camera yaw angle into mapmodel and flag
entities.
fixed selectionwalk so that the first parameter can be ""
DOCREF newent7
- always allow read-only edittextureslot, editmapmodelslot and
editmapsoundslot
- allow setvantagepoint when editing offline or spectating offline
- new var editing_sp: 1 during edit mode in singleplayer (offline)
- additional menus for read-only access to map config slots
- new bonus edit scripts: selectmiddle and unclipentclippedmodels
DOCREF edittextureslot editmapmodelslot editmapsoundslot setvantagepoint
DOCREF editing_sp
menuitemmapload mapname action [hoveraction [desc]]
create menu entry for a map file
menudirlistsub action dots
adds subdirectory entries to a menu with a files list
has to come after the menudirlist command
<action> is the command to be executed, when the menu entry is chosen
if <dots> is 1, an entry ".." is added
enumfiles path [extension]
lists files in a directory
if extension is specified, only files of that extension are listed
if the extension is "dir", only directories are listed
DOCREF menuitemmapload menudirlistsub enumfiles
pressing CTRL+F12 during spectating creates a clean screenshot and saves
it as map preview picture
modkeypressed
returns 1, if a CTRL key is pressed and 0, if not
screenshotpreview [lines]
creates a screenshot cropped to 4:3 with a given number of lines
(in the range of 144 to 480, default 240 or last given value)
and jpeg quality 80
gotovantagepoint
now returns 1, if the map actually has a vantage point set
DOCREF screenshotpreview modkeypressed gotovantagepoint
(editentity, edittextureslot, editmapmodelslot, editmapsoundslot)
the commands are still not allowed to change anything in coop, but
information retrieval is ok
changed commands:
strstr haystack needle
now returns position of needle in haystack (counting from 1)
or zero, if not found
substr string start len
now counts negative length from total length
"substr text 1 -2" now returns the text without first and last char
strreplace text search replace
no longer restricted to 260 char stringlengths
removed commands:
swapelements, strpos (can be scripted, if required)
DOCREF strstr substr
DOCREF swapelements strpos
replace tokens starting with @ during scanning/sizing-up of []-blocks
@word look up word as in $word
@(...) evaluate braces
@[...] evaluate braces and look up result
@"..." parse quotes
in nested []-blocks, use multiple @ to determine time of replacement
(for example, @@@word is replaced when found inside three nested braces)
in regular $-lookup, $[...] now evaluates the braces before lookup
* fix some memory leaks
* rename stuff
* fix crash
Removed commands and variables:
chmenumdl (replaced by menumdl)
scorefont (replaced by "menufont score mono")
menuitemvar (better handled with fully dynamic menus)
Changed commands:
menufont menu font
Sets the font for a specific menu. If menu is "", the currently
initialised menu is used. Example: menufont score mono
menumdl menu mdl anim rotspeed scale
Assumes the function of the previous chmenumdl. If menu is "", the
currently initialised menu is used. Specifies, which model to render
and how. If only menu is specified, no model is rendered.
DOCREF chmenumdl scorefont menufont menumdl menuitemvar
- omit step size for sliders with value descriptions
- optionally auto-determine max value by list length
menuitemslider text min max value display action wrap
menuitemradio text min max value display action
text: menu item text
min: min value
max: max value (or optionally -1 and set by display string length)
value: initial value
display: list of value descriptions or value step size
action: executed on value changes (new value in arg1)
wrap: if 1, wrap slider around (radio buttons always wrap)
DOCREF menuitemslider menuitemradio
to use existing url parser
valid examples:
assaultcube://example.org
assaultcube://example.org:28763
assaultcube://example.org:28763/?password=secret
assaultcube://example.org?password=secret
assaultcube://example.org/?password=secret
assaultcube://example.org/?port=28763
assaultcube://example.org?password=secret&port=28763
assaultcube://example.org?port=28763&password=secret
assaultcube://11.22.33.44
assaultcube://11.22.33.44/
assaultcube://11.22.33.44:28763
assaultcube://11.22.33.44:28763/?password=secret
* the slash after the host part (example.org) is optional
* the host part can also be an IP address
* password and port in the query part (after '?') have no specific order
getxmaplist <what>
Returns a list of all regular xmaps in memory, or, if <what> is "bak"
the details of a stored backup xmap. Each xmap is listed with nickname
and description.
DOCREF getxmaplist