Notes for new features in V1.05 =============================== IFeel support ------------- If you have iFeel-compatibile mouse, you can turn the iFeel support on/off in the Players and Controls menu. If you wish to modify the .ifr effect files, they are located in the Data directory. The file "IFeel.txt" determines which effects are loaded for which mouse. MOTD ---- Simply set the cvar ser_strMOTD. Using SeriousEditor with mods ----------------------------- SeriousEditor.exe will now accept input parameter +game, in the same way that SeriousSam.exe does, and it will be able to load the files from the Mod directory. Direct3D 8 ---------- Support for D3D is finished, but there might be some issues with different hardware. Generally D3D is ~10% slower than OpenGL, but on some systems you might experience moderate speedups and/or compatiblity fixes. Feel free to experiment. It is recommended to install DirectX 8.1 version, but 8.0 will be sufficient, too. Tools work in D3D mode too, but you might experience some trouble when using full-screen mode for testing. If possible, try not to use one API for SeriousEditor and other for full-screen testing inside the editor. Console variables that controls API now have 3 prefixes; 'ogl_' for OpenGL control, 'd3d_' for Direct3D control, and 'gap_' for both APIs. Help is still available for almost every of these console variables ('help [cvar_name]'), and some of them can be controled thru 'advanced rendering' sub-menu. Truform/N-Patches ----------------- SSam now supports Truform (OpenGL) or N-Patches (Direct3D) in hardware. For the time being, only board that supports this feature is ATI Radeon 8500. You can control Truform usage thru 'advanced rendering' sub-menu or corresponding console variables. Keep in mind that Truform usage is enabled by default, but only for Truform-ready models. The catch is that SSam doesn't have any of such models, so you'll need to force Truform usage on all models with cvar '/gap_bForceTruform=1'. Notes for new features in V1.04 =============================== Menu appearance changing (for mod coders only) ---------------------------------------------- Serious Sam calls LCD functions from LCDDrawing.cpp, same as NETRICSA. Change LCDGetColor() to override colors used. Input is the original color and symbolic name of the item involved, output the color you would like. Item names are like: 'enabled unselected', 'slider box', 'bcg fill', etc. Advanced server administration parameters for connecting clients, observers and VIPs ------------------------------------------------------------------------------------ Now, there are 4 different passwords configurable per server: 1) net_strConnectPassword Connection password still has same function as before - if the connection password is set, you gotta have it in order to connect to the server. 2) net_strAdminPassword Admin password is used for remote administration, either by a connect client (like before), or using RCon.exe. Note that now, using RCon.exe, you can administer a server remotely without connecting to it, so you need only the admin password for that. 3) net_strObserverPassword If observer password is set, you need to know the password in order to be an observer. Note that if oberver password is set, but connection password is not, you can connect without knowing the password, but then you must play - i.e. you may not be an observer. This was implemented specially to limit server workload imposed by observers during competition matches. 4) net_strVIPPassword You need to know this password in order to be able to connect as one of the VIPs on the server. net_iVIPReserve controls the number of client/player slots reserved for VIPs. So VIPs have the privilege to be able to connect even when the server is full, since there are reserved places waiting for them. VIPs have no administrative rights per se, just reserved places waiting for them to play. Also, using net_iMaxObservers, you can now control maximum number of observers that can be connected at one time. Using net_iMaxClients, you control the maximum number of connections at one time. If net_iMaxClients is set to 0 (default), the number of connections is equal to the number of players. Using net_iMaxClients and net_iMaxObservers you can limit your server to some strange combinations if you want, like allowing 4 players, but only 2 connections (i.e. allow 2 split screen PC to connect, two players per PC). Chat message notification sound ------------------------------- Every time a chat message is printed on screen, Sounds\Menu\Chat.wav will be played. You can put any sample you want there. Transparent polygons on world ----------------------------- Just select 'transparent' on the Polygon property page. This is ideal for bars gratings and similar. In most cases you will want to set Passable off and Shootthrough on. Batch command scripts --------------------- All .ini files placed in directory Scripts\Commands are considered batch commands. They are executed in a similar mannar as .bat files in dos, by substituting parameters given on the command line for %1, %2, etc. See the four provided commands kick, rkick, list and rlist for examples. kick and list work locally and rkick and rlist remotely, on the server. Example: -> /kick WiseGuy* Just type /kick or /rkick for usage text. Note that with the batch scripts you don't have to type input parameters in parentheses and separated with commas like with functions. Just list them on the command line. New console commands -------------------- ListPlayers() gives you a subset of info from NetworkInfo(), but this is what most people need - just a list of players, without extra debugging data. KickByName() kicks the client by its player name, and supports wildcards. Also, it ignores color codes, so it is easier to kick people with decorated names. Restart() works only for DedicatedServer, and it makes it restart from the first map in the sequence. NextMap() works only for DedicatedServer, and it makes it skip over to the next map. Using ded_strLevel, gam_ variables, and NextMap() you can adjust next map and parameters on the fly and then switch to it. UDP-only RCon protocol and accompanying RCon program ---------------------------------------------------- Besides the old Admin() command, there is now a simple UDP-only RCon protocol available. Using RCon.exe, you can connect to a server and administer it without starting SeriousSam. Usage: RCon.exe "" Example: C:\Program Files\Croteam\Serious Sam\Bin\> RCon.exe coolserver.mydomain.net 25600 "ImSoCool" Note that you _must_ put the password in quotes! Banning by ip and/or playername ------------------------------- ser_strIPMask and ser_strNameMask hold the banning masks for ip addresses and player names. Each line in the mask string is one ip address or name (or a wildcard) that will be forbidden to access the server. You can also use console functions AddIPMask(), RemIPMask(), AddNameMask() and RemNameMask() to change those masks. The functions just add or remove lines to the strings. Examples: /AddIPMask("123.124.125.126"); // ban that one ip /AddIPMask("192.168.*.*"); // ban the whole local subnet /AddNameMask("John"); // john gets grounded /AddNameMask("[EvilTeam]*"); // the evil team is not welcome on this server ATI Truform support for models ------------------------------ Set ogl_iTruformLevel to a number greater than zero. Note Truform is supported on all ATI cards, but it is emulated in software on anything below Radeon2, so it will be very slow. Added transformation matrix for importing 3d objects ---------------------------------------------------- In model script, between SIZE and FLAT add keyword TRANSFORM, followed with 9 numbers. The numbers represent a transformation matrix (translation is not supported, only rotation, stretching and flipping). For example: TRANSFORM 1 0 0 0 1 0 0 0 1 is identity transformation. and: TRANSFORM -1 0 0 0 1 0 0 0 1 flips the x axis. Dynamically customizable model collision boxes per entity (for mod coders only) ------------------------------------------------------------------------------- By overriding GetCollisionBoxParameters() virtual function, you can change sizes of each collision box for each entity. Note that you should never change the parameters of the current box dynamically, during the game, or you might end up beeing inside a wall. If you want to change box size, don't change the one that is your current. Change some other box and then switch to it using standard functions (CanChangeCollisionBoxNow() and ChangeCollisionBoxWhenPossible()). Generally, you should be able to do whatever you want using a simple double-buffering method. Visibility Tweaks ----------------- VisTweaks are special flags assigned to each sector and to each worldbase brush entity. They are used to hand-tune visibility calculations for non-zoning brushes. Normally, visibility calculations are 'conservative', meaning that you always see all brushes that are in your line of sight. However, in order to improve the frame rate, you would sometimes prefer to drop some brushes that could potentially be visible. Naturally, the results are not realistic, since some buildings that might be seen from some points in the level will not be rendered, but if the gamer doesn't notice, it may be acceptable. There are two groups of flags: visibility bits (banks 0 and 1) and classification bits (banks 2 and 3). The bits are editable per sector of a zoning brush (in the Sector property page), and per non-zoning brush (Shift+C, Shift+V). Classification bits are very simple. Normally, each non-zoning brush is classified into all sectors that it touches, and whenever any of those sectors is visible, the brush is added to rendering. In some cases this is undesirable. You can then mark one classification bit in the brush, and that same bit in the sector(s) that you don't want it to classify into. For example, lets say that you have a house in a yard, and that the house sticks a bit above the yard wall. It will be classified in the sector above and probably be rendered from the neighbouring yards. If you mark same bit in the house and the above sector, then the house will only be classified in the yard, not in the above sector, and it will not be rendered unless that yard itself is visible. Visibility bits are a bit more complicated to understand, but simpler to configure. Visibility flags determine from which sector(s) is some non-zoning brush visibile. Note that this take into account _which sector the viewer is viewing from_, not which sectors the brush is in. Visibiity flags can work in two different modes per sector - include and exclude. You choose the mode using the radio button on the sector property page. When in include mode, only those brushes that have at least one same flag as current sector will be visible. When in exclude mode, those will _not_ be visible. For example, if the current sector that the view is in is in include mode, and the current sector has only flag 4 set, then only those brushes that have flag 4 set will be visible from it. If it is in exclude mode, then those that have flag 4 set will _not_ be visible. Usual usage is when you have some extra detailed scene, and you want to remove the overhead imposed by the surrounding geometry. Then you can use exclude to remove some of the extra geometry, or use include to remove all extra geometry by only allowing those in that scene to be rendered. Numeric, align, snap to plane and filter dialogs for vertices ------------------------------------------------------------- Numeric vertex dlg allows numerical/manual entering vertex coordinates. If more than one vertex is selected, edit controls of coordinate component that is not equal in all selected vertices remains empty/undefined. If you enter new value, it will be applied to all vertices (only edited coordinate). If you leave it undefined, it won't be changed after pressing dialong's 'ok' button. Numeric vertex (snap) dlg is invoked with key 'N' in vertex mode. Align vertex dlg allows you to allign two or more vertices along one coordinate. Target coordinate is taken from last vertex. If you select two vertices and allign them along x, second vertex's x coordinate value will be copied over vertex 1's x coordinate. Shortcut is 'Alt+A' Filter verex dialog is invoked via 'Ctrl+F' and allows you to enter size of axis aligned box. Box is defined using min and max values for each coordinate. All vertices that fall outside defined box will be deselected after you press dialog's ok button. Snap vertices to plane is used when you want to allign/snap/project vertices to a certain plane. Point mouse cursor over certain plane and press F. Ability to swap texture layers ------------------------------ If you want to swap 1st and 2nd or 2nd and 3rd layer's textures on certain polygon selection, you can do it with two commands available trough polygon mode's right mouse button popup menu. Polygon filter for angles and coordinates ----------------------------------------- Allows you to filter selection of polygons. I other words, you can remove certain polygons from selection due to its orientation/angle and position/coordinates. For example, you can deselect polygons that have pitch greater than 45, x coordinate greater than 100 and y less than 300. Filter dlg is available trough polygon mode's popup menu or can be invoked by F. Ability to paste as projected for all three texture layers ---------------------------------------------------------- Usefull when working with terrains. Usually you have helper brush high above terrain and use this brush as source to copy mapping that will be later pasted as projected over terrain's polygons. With this option you can copy and paste as projected all three layers at once instead having to copy/paste one layer at a time. Important entity interface for entity browser --------------------------------------------- You can mark certain entities as 'important' so they would only be displayed in select entity dlg. Often some uninteresting entities like model holders, markers, lights,... come in masses and they are not so interesting when working with main and rare entities (sun, fog, gravity, background, effect,....). So, to prevent them to appear in a select entity dlg, we introduced 'important' interface. From within the code, one can set certain entities to be important and they will be listed when invoking select entity dlg with 'important' check box on (Ctrl+Shift+I). Link tree browser ----------------- Great tool for tracing links in your level. If you select and entity and press 'L' or Shift+RMB, you will be able to explore tree of its target entities and their target entities...., recursivly advancing trough links. This dlg can also display tree of entities that target selected entity instead of its targets. Shortcut is Shift+Alt+RMB. Dlg allows you to explore entity classes and link properties. Update brush command -------------------- Sometimes when you use entity clonning, you don't want to clone all properties like markers or time, sound.... (i.e. for doors). You still want to clone geometry. This command does exactly this. Clones geometry but doesn't change entity properties. Show entity names option ------------------------ You can turn on displaying of floating entity names over entities. Shortcut is Ctrl+G.