Commit Graph
7533 Commits
Author SHA1 Message Date
ac-stef f0dfe2d1a3 pass arguments to and deliver results from script files
When a script file is executed, any additional arguments are passed
as execarg1..execargX to the script. The number of arguments is in
execnumargs and if the script in the file sets the value of execresult,
the exec command returns that value.

Example:

If there is a file testscript.cfg with this content:

  execresult = (* $execarg1 $execarg2)

then the command

  echo (exec testscript.cfg 6 7)

will output "42".

DOCREF exec
2016-08-31 18:53:58 +02:00
ac-stef 75af444844 automatically fix world border violations
whenever the map is saved in edit mode
2016-08-31 17:21:10 +02:00
ac-stef 4b2767a96d cleanup
* removed convertcase
  use toupper (concat A B C D ....) instead

* moved several COMMAND macros to their function bodies

* cleaned up screenshot extension handling

* prefix screenshot argument with "screenshot/" and add correct extension
2016-08-31 17:20:28 +02:00
ac-stef 300d702619 add menu to set notexture
Allows to reset notexture, to set a high-contrast color to find and
fix the areas and to set to a useful default texture.

As useful textures, in addition to rock.jpg and concrete.jpg, the menu
lists the default wall, floor and ceiling textures of the current map,
and also the last watched texture from the texture menu.

Also adds a few checks to detect unconverted map config files and misuse
of the new bright highlight textures.
2016-08-30 22:57:03 +02:00
ac-stef 98605751f4 fix unconfigured textures on official maps
replaced by makke/rock.jpg, which is the base for the "missing content"
texture - so, only the text is missing...

on outpost, notexture was reset (since there's no use for it on official
maps)
2016-08-30 21:08:38 +02:00
ac-stef f8188df428 add menu to list mapmodels with unconfigured custom textures 2016-08-30 21:04:41 +02:00
ac-stef 1310516c14 keep track of map load errors
Collect warnings during load_world() and issue a warning at the end. Most,
but not all warnings already printed a message - which usually scrolls out
of the console quite fast.

The collected value is also given back by the loadmap command, which
allows batch editing scripts for maps stop at problematic maps.

Mapsound errors are not detected, if soundvol is zero. Missing textures are
not flagged, if notexture is set.

The error code is ored together from those elements:

0x0000001  entity attribute overflow
  One or more map entities had attribute values, that are no longer
  supported with map format 10. Rework manually.

0x0000010  map decoder error
  Indicates a damaged map file.

0x0000100  world error -1
  Map is completely solid. Very funny.

0x0000200  world error -2
  Map border is not solid. Fix manually.

0x0001000  missing skymap texture files
0x0002000  missing world texture files (only if no notexture is set)
0x0004000  missing mapmodel files
0x0008000  missing mapsound files

0x0010000  bad mapsound command in map config
0x0020000  bad mapmodel command in map config
0x0040000  bad texture command in map config
0x0080000  bad loadnotexture command in map config

0x0100000  error during loading of mapmodels (see earlier console output)

0x1000000  out of range integer value in map config (for example, "fog 0")
0x2000000  out of range float value in map config
0x4000000  generic cubescript error in map config

The command loadmap is now also available for non-debug builds.

DOCREF loadmap
2016-08-30 20:56:58 +02:00
aurhat 9c964d95b4 Improve converting paths in pre v.1.2 map configs
The script converted paths only when "mapmodel" or "texture"
strings were at beginning of the lines, now that is changed,
in order to paths will be converted also in, for example,
commented out lines.
Also changed name of the script to more proper.
2016-08-29 23:21:43 +02:00
ac-stef 778ad62629 fix rendering of some heightfield borders on lainio 2016-08-29 21:52:03 +02:00
ac-stef 4f6e58040b merge identical config slots of official maps
textures:
  cavern: 1 slot merged
  complex: 3 slots merged
  depot: 11 slots merged
  lainio: 1 slot merged
  mines: 1 slots merged
  swamp: 1 slot merged

mapmodels:
  swamp: 2 slots merged
  toxic: 3 slots merged
2016-08-29 15:47:46 +02:00
ac-stef 69518c5e50 sort config slots of official maps 2016-08-29 15:47:46 +02:00
ac-stef 91e7ff6e7f delete unconfigured mapmodel entities from official maps 2016-08-29 15:47:46 +02:00
ac-stef 28d63baeee sort entities on official maps 2016-08-29 15:47:46 +02:00
ac-stef 7cb9aa79c8 add access to entities with unassigned config slots to edit menus
Mapmodel and -sound entities which refer to unassigned slots are now
listed in the "edit slots" menus. From there, the entities can be visited
and manually corrected or deleted.
2016-08-29 15:47:46 +02:00
ac-stef 3ff5e44a39 add counts for used but unconfigured model and sound slots to entstats 2016-08-29 14:11:48 +02:00
ac-stef 867d522879 fix crash on used but unassigned slots during config slot sorting
maybe we should have a warning for such entities...
2016-08-29 13:44:58 +02:00
ac-stef 15c4bbe84f fix player stuck condition
The condition appeared on 32-bit g++ builds with -O3. Apparently, due to
optimisations, the player1 location vector was kept in FPU registers
during collision checks - and the written-to-memory float values gave
different results in the next round.

The fix forces a write to memory and a readback before the collision
checks. An alternative fix would be, to compile physics.cpp with the
switch -ffloat-store, but that would cause a bigger performance hit.
2016-08-28 16:58:56 +02:00
ac-stef e648943d40 fix g++ warnings
g++ 5.4 detects the static bools as "unused", which is true - but also
intentional.

Removing the "static" adds a lot of unused symbols to the global pool,
but it also prevents any compiler from detecting the "not used" status.
2016-08-28 15:11:49 +02:00
ac-stef 41fa9e1b34 add command for raw scripted editing
selectionwalk action beginsel endsel

  The command iterates over all cubes in all selections and executes
  "action" for each cube. The cubes of every selection are framed by
  executions of "beginsel" and "endsel". The action script is allowed
  to make changes to cube attributes, and if it does, an undo point is
  automatically added. "beginsel" and "endsel" are optional.

  While the scripts are executed, several aliases provide further info:

  sw_cursel
    Position and size of the current selection. Valid in all three
    scripts. Holds four integer values for x, y, xs, ys. See command
    "selection" for details.

  (all following aliases are only valid during the execution of the action
   script and provide the attributes of one cube of the map)

  sw_abs_x
  sw_abs_y
  sw_rel_x
  sw_rel_y
    Absolute and relative (within the current selection) coordinates of
    the current cube. Read-only values.

  sw_type
    Type of the current cube. Can be 0..4 for SOLID, CORNER, FHF, CHF and
    SPACE. May be changed to other numerical value or keyword.

  sw_floor
  sw_ceil
    Floor and ceiling heights of the current cube. Range -128..127

  sw_wtex
  sw_ftex
  sw_ctex
  sw_utex
    Texture slot indices for wall, floor, ceiling and upper wall of the
    current cube.

  sw_vdelta
  sw_tag
    Vdelta and tag values of current cube.

  sw_r
  sw_g
  sw_b
    Current light values of current cube. Can be edited, but only with
    temporary effect. Will be reset with the next light recalc.

The command is mostly useful for statistics scripts (like counting cubes
with certain attributes), but is can also be used for scripted editing,
as the following (useless) example shows:

  selectionwalk [ += sw_floor (rnd 2) ]

Further changes:

  The command listoptions now also can return the names of cube types:

    echo (listoptions cubetypes)

  The command countwalls is now implemented as a script instead of a
  builtin command. The script works better, because it doesn't create
  unnecessary undo points.

DOCREF selectionwalk listoptions countwalls
2016-08-27 21:58:02 +02:00
ac-stef 1a4fca5c3c make some editmode options persistent
keep values of showmodelclipping, showladderentities and showplayerstarts
2016-08-27 21:58:02 +02:00
aurhat 2d55d5dc2a Cleanup new_content map
Fixed paths to models, adjusted map message, map saved
in format 10.
2016-08-27 20:23:38 +02:00
aurhat caa62a1214 Add shortcut in Start menu to profile folder
Also cleanups
2016-08-27 15:29:44 +02:00
ac-stef 422b407e79 misc VS warning fixes 2016-08-27 12:03:23 +02:00
ac-stef fdb683e406 add command and keybind for tag clips
edittagclip type

  Sets tag clip type of all selected cubes.

  type can be numeric 0, 64 or 128 or keyword "none", "clip", or "plclip"

DOCREF edittagclip
2016-08-26 16:45:37 +02:00
ac-stef b7d797d73c new menu for edit mode key binds
Two new commands, menuitemeditkeyinput and menuitemspectkeyinput, both
work the same as menuitemkeyinput - only for edit and spect binds.
The new edit keys menu should also work fine as edit key help :)

menuitem[|edit|spect]keyinput text bindcmd

  Menuitem, that displays "text" and all keys, that bind "bindcmd" - in
  game-, edit- or spect mode.

DOCREF menuitemeditkeyinput menuitemspectkeyinput
2016-08-26 14:34:44 +02:00
ac-stef ebd1c917dc enable the keyboard settings menu to handle multiple binds 2016-08-26 14:31:58 +02:00
ac-stef dbfdb5927b omit unchanged default binds from saved.cfg
omitunchangeddefaultbinds n

  0 print
  1 print, but commented out
  2 omit

The new var _defaultbinds is used to mark default binds in resetbinds.cfg.

DOCREF omitunchangeddefaultbinds
2016-08-26 14:31:33 +02:00
ac-stef daae49273d remove __fontsetting
instead, "curfont" returns name of current font

DOCREF __fontsetting curfont
2016-08-26 14:30:29 +02:00
ac-stef f730106c56 remove go_to
gotoposition does the same and more

DOCREF go_to
2016-08-26 14:30:02 +02:00
ac-stef 573e520ca0 argument completion for authsetup and authkey 2016-08-26 14:29:25 +02:00
ac-stef c4b570e8fd new menus for account management
During startup, it is checked, if the game account needs to be unlocked
by password. If so, the password is asked and applied.

If no game account exists yet, the creation of a new account is offered.

new command "mypubkey": returns public key of game account, or empty
  string, if no account exists or it is unusable (due to missing password,
  for example)

DOCREF mypubkey
2016-08-26 14:28:54 +02:00
ac-stef 989db7d5c8 change behaviour of menuitemtextinput
Now, if the last line of a menu is a text input item, pressing enter in
that line will not only execute the assigned command, but also close the
menu.

With this, menus without the annoying "[OK]"-button can be created.

Also: emptied text input fields don't magically fill up again, when you
deselect them.

DOCREF menuitemtextinput
2016-08-26 14:28:54 +02:00
ac-stef 4a9ae84613 add hashes for map files on server 2016-08-26 14:28:54 +02:00
ac-stef 1f5b3ed92a add basic cert management 2016-08-26 14:28:54 +02:00
ac-stef 400f1a318d add authkey command
authkey manages a list of keys other than the game key (which is managed
by authsetup). For example, this can be server owner keys or clan boss
keys.

authkey clear
  Empties the list and comments out all lines in config/authkeys.cfg.

authkey list
  Lists all authkeys that are currently in memory.

authkey delete keyname
  Deletes the key <keyname> from memory.

authkey new keyname
  Generates a new key with the name <keyname>. If a key of that name
  already exists, it is deleted. The key is added to the list in memory
  and also written to the file config/authkeys.cfg.

authkey add keyname privkey
  Adds a key with the name <keyname> to the list in memory. The privkey
  is a 32-byte hexadecimal string, preferrably generated by authkey new.
  The matching public key is generated automatically from the private key.

authkey selfcert keyname [comment]
  Generates a self-signed certificate for the key <keyname>. Being able to
  create such a cert is proof, that you own the private key of a certain
  public key.

DOCREF authkey
2016-08-26 14:28:54 +02:00
ac-stef 381e770210 add authsetup command
authsetup contains all the funtionality needed to generate, load and save
private and public keys, and to lock and unlock the private key with a
password.

Private and public keys are used to authenticate the player to servers,
and are loaded from config/authprivate.cfg. Private keys can be stored
in an "encrypted with password" version - in which case the player has
to enter the password after game start. To prevent brute-force cracking
of the password, the key-derivation function uses a constant time to
encode (usually several seconds). Because of that, the decoding at game
start can be done in the background.

The private key is actually itself a public key generated from the
prepriv key. The prepriv key should be kept away from the computer, either
as hardcopy or on a thumbdrive. The prepriv key is not required to play
the game. It can be used to prove ownership of the private key, in case
the private key gets stolen. It can also be used to regenerate private
and public keys, in case they are lost. The prepriv key can also be
encrypted by its own password.

authsetup
  checks private and public key and returns "1", if they match.

authsetup pre preprivhex [psalthex pwdcfg]
  loads prepriv key into memory. optionally supports encrypted keys.

authsetup priv privhex [salthex pwdcfg]
  loads private key into memory. optionally supports encrypted keys.

authsetup pub pubhex
  loads public key into memory.

authsetup ppass preprivpass
  decrypts prepriv key with password

authsetup pass privpass
  decrypts private key with password

authsetup passd privpass [commandwhendone]
  decrypts private key with password in background. optionally executes
  cubescript command when done.

authsetup needpass
  returns "1" if the private key needs decryption.

authsetup genpre [prelen]
  generates new prepriv key.

authsetup genpriv
  generates private key from prepriv key.

authsetup genpub
  generates public key from private key.

authsetup newppass preprivpass [preprivfilename]
  encrypts prepriv key with new password and saves the result to file.
  The default filename is config/authpreprivate.cfg and an existing file
  gets overwritten - but the former file content is kept and also written,
  each line commented out.

authsetup newpass privpass [privatefilename]
  encrypts private key with new password and saves the encrypted private
  key and the public key to file. The default filename is
  config/authprivate.cfg and an existing file gets overwritten - but the
  former file content is kept and also written, each line commented out.

authsetup unarmed
  sets private and public keys to a fixed value. For testing only.
  Can be used to "log out".

authmemusage, authrounds, authmaxtime are only used, when new passwords are
  created (authsetup new[p]pass). authmemusage is the number of megabytes
  of RAM that are used for the password hash calculation. If authrounds
  is zero (as is default), then the hash algorithm calculates as many
  rounds as possible in the number of milliseconds specified in
  authmaxtime. If authrounds is a positive number, then that is the number
  of rounds to be done, regardless the required time. Note that, since the
  password hash algorithm is not endianness-aware, it is not possible to
  move an encrypted password to a machine with different endianness.
  Moving between 32- and 64-bit machines should be no problem.

  FIXME: the command is not blocked against use in multiplayer. It has to
         be determined later, if this is a problem or feature. Especially
         the background password calculation may be a problem.

DOCREF authsetup cryptodebug authmemusage authrounds authmaxtime
2016-08-26 14:28:54 +02:00
ac-stef 940cc2e3d9 crypto tool functions and ed25519 vector test
* FNV-1a:  very fast, non-cryptographic hash
* bin2hex, hex2bin:  hex ascii parser and hex string formatter
* ed25519test:  vector test for all ed25519 functions
* ed25519speedtest:  yep, that
2016-08-26 14:28:54 +02:00
ac-stef 806e0f4f7e add Ed25519 ECC signature algorithm
The Ed25519 sources were taken from the crypto_sign/ed25519/ref
subdirectory of the SUPERCOP benchmarking tool.
The Ed25519 software is in the public domain.

Contributors (in alphabetical order)
    Daniel J. Bernstein, University of Illinois at Chicago
    Niels Duif, Technische Universiteit Eindhoven
    Tanja Lange, Technische Universiteit Eindhoven
    Peter Schwabe, National Taiwan University
    Bo-Yin Yang, Academia Sinica
2016-08-26 14:28:53 +02:00
ac-stef b080d634fc add memory-heavy key derivation function
* basically a hash function that delivers keylen bytes calculated
  from password and salt
* uses a lot of memory and a quite complex algorithm, to make
  brute-force offline-attacks on short passwords as hard as possible
* last line of defense against "evil little brothers"
2016-08-26 14:28:53 +02:00
ac-stef 8c7baa979c add SHA512 hash function and an entropy collector
SHA512 was adapted from a few public domain sources and pseudocode from
wikipedia. The entropy collector gathers entropy from keyboard events and
mouse movement - and, just for fun, from screenshots.
The entropy pool is saved at program exit and reloaded at program start.
Entropy is used to re-seed the pseudorandom generator (not that it would
make a difference).
2016-08-26 14:28:53 +02:00
ac-stef a45d926919 remove current auth system
* fix tiger hash for bigendian (we use the byte output, not the chunks)
* remove all ECC functions and comment out all calls to it
2016-08-26 14:28:53 +02:00
ac-stef 9230561697 remove illegal chars from map config files
from now on, the server's going to be very pedantic about this...
2016-08-26 14:28:53 +02:00
ac-stef 652a097c91 sync worker threads with mainloop 2016-08-26 14:28:53 +02:00
ac-stef 89f1f69eec readmapsthread
server: load all maps into memory, scan for more maps
in the background
2016-08-26 14:27:51 +02:00
ac-stef c70808e5a4 more detailed entstats
Shows some results of the new map quality checks. tbc
2016-08-26 14:08:56 +02:00
ac-stef 6454a645ae new map checks and statistics menu
Visualise the results of "mapareacheck".
2016-08-26 14:08:56 +02:00
ac-stef 084be76825 new command mapareacheck
Calculate some key values to determine map geometry viability.

mapareacheck <what>
  Returns different sets of statistics, depending on the keyword "what":

  vdelta
    Returns table of numbers of cubes within a certain range of vdelta
    differences (steepness)". First entry is "0..2 cubes steep", next is
    "2..4" and so on.

  steepest
    Returns the coordinates of the steepest heightfield cube.

  total
    Returns the number of non-solid cubes on the map.

  pprest
    Returns the number of cubes _not_ visible from one of the probe
    positions.

  pp (default)
    Returns a table of all (currently 64) probe points of the map. Each
    probe point is listed with:
      - x-coordinate
      - y-coordinate
      - floor height
      - area visible
      - volume of visible area
      - average height in visible area

DOCREF mapareacheck
2016-08-26 14:08:56 +02:00
ac-stef 77b7e9bb87 new entity type "dummy"
Adds a new entity type for use in scripts. The entity does not affect
rendering or physics and is not saved to map files.
2016-08-26 14:08:56 +02:00
ac-stef a33577c039 sort mapmodel entities during map save
* sort colored lights behind white ones to avoid a light bug
* sort all clipped entities to the end of the list to speed up physics
* sort all pickups and playerstarts to use smaller index numbers to
  use less bandwidth
2016-08-26 14:08:55 +02:00
ac-stef c54eb7f173 calcmapareastats()
new metrics to assess map geometry
2016-08-26 14:08:55 +02:00