http://cubeengine.com/w/index.php?title=Special:NewPages&feed=atom&hidebots=1&hideredirs=1&limit=20&offset=&namespace=0&username=&tagfilter=Cube Wiki - New pages [en]2024-03-29T10:50:24ZFrom Cube WikiMediaWiki 1.31.7http://cubeengine.com/wiki/AuthAuth2016-08-27T16:47:53Z<p>Admin: /* Rules */</p>
<hr />
<div><br />
== Rules ==<br />
<br />
# no sharing the authkey with anyone, ever<br />
# only use the authkey to kick cheaters and griefers, not for personal disputes, grudges, clan stuff, etc.<br />
# don't get into disputes with other authkey holders, instead report them to eihrul<br />
# auth is a privilege, and if you behave in a way that is not respectful to the community for any reason (regardless of whether you are using auth at the time), that privilege can be taken away</div>Adminhttp://cubeengine.com/wiki/Wiki_RefactorWiki Refactor2014-12-12T15:59:35Z<p>Admin: </p>
<hr />
<div>Unfortunately, for too long everyone has been going around and doing their own thing their own way on this wiki, which has resulted in an unprofessional finish to the documentation and guides within. I am currently in the progress of moving pages around and cleaning up their content, and everyone's help would be greatly appreciated here.<br />
<br />
=What you can do= <br />
There are many things you can do to help in this goal, most of which is keeping a watchful eye. Be on the lookout for [[broken links]] which appear red like this one.<br />
<br />
==Contributors== <br />
If you see broken links, please correct them. While I can clean up this wiki, I can only do so much. Your help is required to help make this wiki prosper, for without you, there is no wiki. Also take a look at the [[Wiki Guidelines|guidelines]] which will help us maintain some continuity.<br />
<br />
==Readers== <br />
If you notice any broken links as mentioned, please leave a note in the page's discussion.<br />
<br />
=Working Together= <br />
If we all work together we can make this wiki a great alternative to the static documentation already included with the game, I look forward to seeing some great content.</div>Adminhttp://cubeengine.com/wiki/Wiki_GuidelinesWiki Guidelines2014-12-12T15:59:35Z<p>Admin: </p>
<hr />
<div>=Wiki Guidelines= <br />
<br />
From Aardappel's [http://cubeengine.com/forum.php?action=display_thread&thread_id=939&start=20 post] on the forum:<br />
<br />
''Do not be afraid to re-factor things. So far it seems people just add to the wiki, and leave what is there in place. One of the ideas behind a wiki is that it's easy to reorganize the soup of data. If you add something that makes the structure of the document less than ideal, do not be afraid to restructure other people's text into a different set of pages and links. Do not be afraid to even delete other people's text, once you conclude it has become redundant. The original structure was just me making some example pages, it may not be ideal for the current content anymore.<br />
<br />
Feel free to post to this page's discussion board if you have major changes in mind, or certain conventions.<br />
<br />
Don't let pages grow to huge amounts of text, wikis are best when they are small sections of text per page, but heavily linked.<br />
<br />
In that same way, one of the goals of the wiki is to function as a FAQ, so if we get the thousandth post on the "your server did not reply to ping" message we can point people to exactly one wiki page that has all the firewall tutorials you could ever wish for.<br />
<br />
Some stuff on the wiki is straight out of the main documentation. Duplication is not good: it means if I update the main documentation the wiki instantly contains outdated information. Since the wiki is more for FAQs and tutorials, and the docs more for hardcore factual reference, it is good to have each section of the wiki refer to pages in the docs where the exact command reference related to the topic can be found.<br />
<br />
If you know of topics that have been discussed on this forum before, it is really helpful to find these threads, and make a wiki page out of the most explanatory posts. In fact, maybe I should be typing this post in the wiki rather than on the forum, it is getting rather long...<br />
<br />
If additional people want editing access, apply for it at the bottom of this wiki page.''<br />
<br />
=Formatting= <br />
To ensure readability, editors of this wiki should follow the basic rules outlined here.<br />
<br />
==Italics== <br />
* Directory paths and file names should be ''<nowiki>//``italicized``//</nowiki>''.<br />
* Large block quotes should be in ''<nowiki>//italics//</nowiki>''. If possible, link to the original source.<br />
<br />
==Code== <br />
* Code/script listings but also one-liners in a reference should be [[www:wikitext code|formatted]] as <span style="font-family: monospace,helvetica,sans-serif;"><nowiki>{{``Code``}}</nowiki></span>.<br />
* In-text code like variables should be in <span style="font-family: monospace,helvetica,sans-serif;"><nowiki>{{``Code``}}</nowiki></span>.<br />
* Sauerbraten shell output should be formatted in <tt><nowiki>{{``Code``}}</nowiki></tt>.<br />
* Code should be without quotes or a slash, so instead of "/getmap", <tt>getmap</tt> would be appropriate.<br />
==Other== <br />
* Create page names properly. They are the page title, and should be written like one. For example: ''multiplayer+guide'' should be written as a proper title: ''Multiplayer Guide''.<br />
* Use headings properly, in large blocks of text, these help with the [[<tt>toc</tt>]] tag. The page name is the title, write a short introduction if need be, then use the first level heading =''Like So''=. Then subheadings, ==''Two''== and ===''Three''===.<br />
* Try to keep spacing through the article consistent with the layout for easy reading when, for instances where people are skimming.<br />
* Do not use horizontal lines to separate text, use headings.<br />
* Use the '''<nowiki>**``bold``**``** and __``__``underlined``__</nowiki>__ stuff only to highlight extremely important information.<br />
* Dashes should be shown as two hyphens: -- not — (em dash), – (en dash), or - (hyphen).<br />
* Spelling and grammar should be kept to AmE (American English) or BrE (British English) when possible.<br />
* Quotes should be straight -- not curved or "smart".<br />
* Ellipses should be the three simple dots: ... without spaces or a fourth dot.<br />
* Ctrl+C is the Windows and Linux key style for key commands, but on a Mac, the equivalent combination should be written Command-C.<br />
* Windows should be referred to as Windows, not Win32 or Windoze. Mac OS X should be Mac OS X (or OS X), not MacOS or OSX. Linux is tricky.<br />
=Special Considerations= <br />
==FAQ Page== <br />
Unlike the other pages on the wiki, the [[FAQ|Frequently Asked Questions]] page is intended to be a quick stop for commonly asked questions with quick simple answers. If you need more than one or two paragraphs to explain an answer, consider using a separate page and linking to it from the FAQ. This keeps the page concise, and reduces the loading time for the page regulars, especially useful if they don't want to read a large block of text.</div>Adminhttp://cubeengine.com/wiki/VideosVideos2014-12-12T15:59:34Z<p>Admin: </p>
<hr />
<div><span style="font-size: 18px; line-height: 27px;">'''Editing'''</span><br />
<br />
Tutorials by Dr. Penny de Byl, Senior Lecturer (Computer Games and Graphics Programming), University of Southern Queensland, Toowoomba, Australia.<br />
<br />
# [http://www.youtube.com/watch?v=S8e96rE0ae8 Getting Started]<br />
# [http://www.youtube.com/watch?v=ToWQ5j21-j0 Extending Walls & Adding Textures]<br />
# [http://www.youtube.com/watch?v=oezgLy4fpzA Skyboxes]<br />
# [http://www.youtube.com/watch?v=n1gjbGlYpPo Height Maps]<br />
# [http://www.youtube.com/watch?v=SPrJhhBoHrU Grid Sizes & Cube Deformations]<br />
# [http://www.youtube.com/watch?v=owvUezhj7u8 Materials: Air, Water, Lava...]<br />
# [http://www.youtube.com/watch?v=LFYkU7vWqps Adding Lighting & Shadows]<br />
# [http://www.youtube.com/watch?v=krE8PU-_vIA Adding Static Models]<br />
# [http://www.youtube.com/watch?v=khyjiT2W6Cg Saving & Loading]<br />
# [http://www.youtube.com/watch?v=y93g5GBFU50 Adding Monsters]<br />
<br />
flow(tron) has started posting videos on [http://cubvid.com CubeVid]<br />
<br />
# [http://cubevid.com/video/30/Editing+101 Editing 101] Copy and paste and moving the selection box (about a minute).<br />
<br />
=Other= <br />
<br />
A [http://www.youtube.com/results?search_query=sauerbraten&search_type=&search=Search YouTube search for sauerbraten] videos.</div>Adminhttp://cubeengine.com/wiki/Using_the_ConsoleUsing the Console2014-12-12T15:59:34Z<p>Admin: </p>
<hr />
<div>==Using commands on the console== <br />
From your local documentation (''README.html'') you can always find out which commands the engine will react to!<br />
<br />
Single commands you enter into your console.<br />
Open your console with the / key. Or use a short script that is bound to the BACKQUOTE key:<br />
<pre><br />
bind BACKQUOTE [saycommand /]<br />
// for some language layouts, this is unusable, so bind your own:<br />
bind CARET [saycommand /]<br />
</pre><br />
While entering the first word on the console and you're to lazy to type in a full command, say <tt>thirdpersondistance</tt>, you can auto-complete it with the TAB key. This also works for the map names in the <tt>map</tt> command, by the way.<br />
<br />
Everything following a command we call parameters or arguments. Some commands take parameters, some don't, some even behave differently depending on which way you call them. For example the <tt>fov</tt> command will -- by itself -- output the current FOV value, called with an integer parameter it will try to set your current field of view. If you passed an illegal value here, so something outside the allowed range, it will also output which values it accepts. Other commands like this include <tt>particlesize</tt>, <tt>crosshairsize</tt> and <tt>skill</tt> (among others).<br />
<br />
Most commands will not output anything if they are called correctly. A noteable exception is the <tt>fullscreenshader</tt> command. This will output the succesfully activated shader -- but conversely nothing if it fails. Since some shading FX are subtle to spot and still some graphics cards can't display them. So it's probably for the best this way around.<br />
<br />
Another important feature of the console is the command history; by pressing the up arrow you can jump back to previous commands.<br />
<br />
==Tired of typing?== <br />
So, you got the hang of the console? Now you find yourself typing the same stuff again and again -- and you're tired of it? Then it's a good time for a script!<br />
<br />
For example: Say as an editor you've repeatedly had to tune your light entities to get the ambience of your map ''just right''. Well, you could of course execute three seperate <tt>entproperty</tt> commands -- which can be done pretty quickly with the help of the command history -- but that's not the end of your laziness, right? Right!<br />
<br />
So you want to have that yellow light entity with properties 64 256 256 192 be about half as bright?<br />
<pre><br />
loop i 3 [entproperty (+ $i 1) -128]<br />
</pre><br />
and you're done.<br />
<br />
The <tt>loop</tt> will evaluate the body (the stuff inside <tt>[</tt> <tt>]</tt>) 3 times. Each iteration runs with an incremented value of <tt>i</tt>. In the first loop it is <tt>0</tt>, but since we want to modify <tt>entproperty 1</tt> to <tt>entproperty 3</tt> we need to increment it still further -- this is done inside the <tt>(</tt> and <tt>)</tt> where we use the <tt>+</tt> operator to result in the sum of <tt>i</tt> and <tt>1</tt>. So. the above line is the same as typing<br />
<br />
<pre><br />
entproperty 1 -128<br />
entproperty 2 -128<br />
entproperty 3 -128<br />
</pre><br />
<br />
In our above example the light entity would end up having the attributes <tt>64 128 128 64</tt>.</div>Adminhttp://cubeengine.com/wiki/The_ReadmeThe Readme2014-12-12T15:59:34Z<p>Admin: </p>
<hr />
<div>=Cube 2: Sauerbraten= <br />
==Links== <br />
First of all, welcome to Cube 2: Sauerbraten! To start off, if you are looking for help with the game itself, refer to the Documentation below. Here are some places of interest on the internet, which are related to Sauerbraten.<br />
* Cube and Cube 2 Engines: Start Page for the Cube Engine series.<br />
* Cube 2: Sauerbraten: The Sauerbraten FPS (First Person Shooter) Homepage.<br />
* Quadropolis: Online Cube Engine community, with user made maps, mods, and scripts.<br />
* Sauerbraten IRC Channel: Online public chat with Cube developers, supporters and fans, via the QuakeNet IRC Network.<br />
* Cube Forums: If after reading the documentation and wiki you still have any questions, you can try searching the forums. If your question isn't answered there, you can try posting to a relevant thread, or creating your own, being sure to supply a good description of your problem, and your operating system/hardware/software setup, while refraining from wild accusations.<br />
==Documentation== <br />
Cube 2: Sauerbraten is multiplayer/singleplayer FPS freeware game project, and soon an RPG game project. The sourcecode for the engine used in these games is Open Source (ZLIB licence, read the "License" section below carefully before starting ANY kind of project based on this engine).You will want to read (in roughly this order):<br />
* Game: Information on gameplay.<br />
* Config: How to run the game, configure it for your machine, and extend it with scripts.<br />
* Editing Tutorial: A guide to making maps.<br />
* Editing Reference: Map making reference.<br />
* Models: How to put models into the game.<br />
* History: For seeing latest changes.<br />
<br />
==Credits== <br />
===Programming=== <br />
* Wouter "Aardappel" van Oortmerssen: A lot of the general code, and the original concept and design. (website)<br />
* Lee "Eihrul" Salzman: ENet networking library, *nix ports, and a lot of the general code, especially rendering/lightmaps/physics related. (website).<br />
* Mike "Gilt" Dysart: General programming, especially editing/physics related.<br />
* Robert "a-baby-rabbit" Pointon: GUI and particle rendering code, MacOSX porting. (website)<br />
===Additional Code=== <br />
* Julian Mayer: Mac OS X ports.<br />
* Adrian "driAn" Henke: MD3 code.<br />
* Jerry Siebe: Geometry rendering optimisations.<br />
===Level Design=== <br />
* Kurt "kdoom" Kessler: A bunch of DM/capture maps, k_rpg1.<br />
* Shane Nieb: demomap, nmp* maps.<br />
* John "metlslime" fitzgibbons: metl* maps.<br />
* MitaMan: singleplayer episodes<br />
* With additional maps by: Aardappel, driAn, Gilt, voot, Bryan "KillHour" Shalke, staffy, sparr, JCDPC, ZappaZ, RatBoy, Fanatic, rocknrol, KaiserTodretter, BlikjeBier, wurfel, aftasardem, Lazy [HUN], Gregor Koch, Junebug, Gabriele "Blindabuser" Magurno, MeatROme, TUX, Mayhem, mIscreant, schmutzwurst, Kal, DairyKing, Hero, WahnFred, and others.<br />
===Art and Content=== <br />
* John "Geartrooper" Siar: Mr. Fixit, Ironsnout, RPG characters, monsters, new hudguns and vweps.<br />
* MakkE: Mapmodels, old hudguns, items.<br />
* Dietmar "dcp" Pier: Mapmodels, old hudguns.<br />
* DarthVim: Old hudguns.<br />
* Shane Nieb: Old hudguns, skyboxes.<br />
* Sock: The egyptian & tech texture sets (website).<br />
* Iikka "Fingers" Keranen: The ikbase ik2k texture sets (website).<br />
* Lunaran, Gibbie, Gregor Koch, Jésus "aftasardem" Maia, MitaMan, and philipk: Normalmapped texture sets.<br />
* Additional art by: metlslime (textures), Than (textures), Remedy Entertainment Ltd (textures), Seth & Ulrich Galbraith (GPL models), Brian "EvilBastard" Collins, Conrad, Magarnigal, Psionic, James Green, Andreas Möller, Ryan Butts & Jeramy Cooke (md2 models), KaiserTodretter (items), Tentus (mapmodels), Kurt Kessler (mapmodels), Philip Klevestav (textures), leileilol/OpenArena (GPL bullet hole decal).<br />
===Sounds and Music=== <br />
* Marc "Fanatic" A. Pullen: Soundtrack.<br />
===Other=== <br />
* Kristian "sleepwalkr" Duske: website / messageboard, hosting, master server.<br />
* Quinton "quin" Reeves: Community, documentation, wiki, and development help. (website).<br />
* Pushplay: Documentation help.<br />
* The SDL team: For their libraries.</div>Adminhttp://cubeengine.com/wiki/Suggested_Modelling_ToolsSuggested Modelling Tools2014-12-12T15:59:33Z<p>Admin: </p>
<hr />
<div>[http://www.blender.org Blender]<br />
A free, powerful, cross platform open source modeling suite.<br />
To export md3´s you will need Python 2.4 installed and [http://www.planetgargoyle.com/openarena/tools/blendermd3.zip these python scripts] (if link remains broken mirrored by geartrooper : [http://johnny3d.promail.ca/blendermd3.zip blendermd3.zip]).<br />
Blender´s md2 script is a bit broken unfortunately, you will need to export your md2 as an .obj from blender, import it into Misfit, export as md2,<br />
import it to q2modeller, then export it as md2 once again from there.<br />
<br />
[http://http://www.swissquake.ch/chumbalum-soft/ Milkshape3D]<br />
A low cost, simple low polygon modeller for Windows, exports md2 and md3 fine. Does not support vertex weights. Fine for everything exept characters (due to no vertex weighting animation might be hard to do).<br />
<br />
[http://makke.snieb.com/q2mdlr9b.zip Q2Modeller]<br />
Native tool to model md2s for windows. Can be emulated easily on Linux too. A bit aged by now, but can be handy to make custom vweaps from existing vweaps.<br />
Also used as a "clean up" for incorrect md2s you might encounter using other programs.<br />
<br />
[http://www.misfitcode.com/misfitmodel3d/ Misfit Model 3D]<br />
A free cross platform 3D modeling program that imports md2 and animations. Misfit supports bone animation and conversion to vertex animations. After exporting the md2 load it up and export as md2 again in q2modeller to have the proper headers for your file.</div>Adminhttp://cubeengine.com/wiki/Singleplayer_GuideSingleplayer Guide2014-12-12T15:59:33Z<p>Admin: </p>
<hr />
<div>until then look at [[Beginners Guide#introSP]] or try the [http://www.quadropolis.us/node/418 bots by quin], to play some easy DM offline.<br />
<br />
You can try finding some SinglePlayer maps (for Sauerbraten and others) in [http://quadropolis.us/taxonomy/term/12+80 this listing].<br />
<br />
The Singleplayer mode of Cube2 (Sauerbraten) has been even put up for a discussion about [http://cubeengine.com/forum.php?action=display_thread&thread_id=1965 No More SP?] .. but (for now) .. we will still have the SP modes; but further development/enrichment of it's features is not a priority, or even planned.<br />
<br />
A lot of development ''has been going on'' inside the [http://www.bloodfrontier.com/ BloodFrontier] project though.</div>Adminhttp://cubeengine.com/wiki/Sharing_ContentSharing Content2014-12-12T15:59:33Z<p>Admin: </p>
<hr />
<div>If you have created any sort of content for Sauerbraten, chances are you will want to distribute it. There are standards for this and certain procedures can help ensure your creation works well. This text covers basic cross-platform caveats and general structure of the form in which your content is best presented to your audience. Not following such guidelines can get your content flagged or even deleted, so paying attention pays off.<br />
<br />
On Quadropolis.us, you should follow [[@http://www.quadropolis.us/node/226|their packaging guide]], which shares a common root with this document.<br />
<br />
==Quick Info== <br />
As always, this is phrased in Sauerbraten terms. Your specific copy might have slightly different foldernames and/or requirements; where appropriate we will mention some of these in detail.<br />
<br />
Place your own content and the below into a ZIP-file. ZIP is essentially universal.<br />
Make sure it can be extracted directly into the player's home folder -- ''not'' their installation folder! Read up on [[FAQ#sauerbraten_home|FAQ: homeDIR]]: game-HOME-dir VS game-INSTALL-dir on the [[FAQ]].<br />
* ''./packages/base''/ = base package: folder_a_single_map.ogz<br />
# ''mapname.ogz'' (or mapname.cgz, mapname.bgz -- depending on the game)<br />
# ''mapname.cfg''<br />
# ''mapname.txt''<br />
# ''[[Map Screenshot|mapname.jpg]]'' -- this should be 256 by 256 -- which will be displayed in the GUI menu, assuming it's made menu selectable by the user or some of your own scripting.<br />
* '''''.''/'''''packages/yourname''/ = personal package folder<br />
# map/pack/misc. CFG files<br />
# texture image files<br />
# skybox-folder with appropriate images<br />
<br />
==Creating a ZIP== <br />
You should always package your content into a ZIP file. Don't just use your favorite file compressor! ZIP is the most widely available file compression and packing format, and is easily (de-)compressed on all target platforms. Even with popularity aside, ZIP often gives better compression on the already well compressed data used with Sauerbraten. Maps, for example, are already saved with ZIP compression, therefore other packers (e.g. RAR) will go to lengths to try compress the files even further, often resulting in overhead (making the file larger than the ZIP).<br />
<br />
You could ask, "Why ZIP a map at all?" But the beauty of packing your files up like this is that you can include a read-me with your file(s). Including a read-me is seen as good practice, and allows you to include licensing information (Creative Commons etc), contact information, detailed map description/information and maybe even something about yourself.<br />
<br />
But the true benefit is that users simply go to their game-HOME and unpack right into that folder -- again, this way of unpacking a ZIP is most widely available on the target platforms -- if you put (as people still often do) your installation-files into an extra subdirectory inside your ZIP people will have to go into that subfolder and move the files from there one up and then delete your subfolder... spare them this and anything like it; you'd like them all to work simple and all the same yourself!<br />
<br />
Therefore, a minimalistic distribution file would be a ZIP containing a OGZ map file and a CFG map config inside ''packages/base'' and a ''README_mapname.txt'' either inside ''packages/yourname'' or on the top-level. Be sure to have something of your own and unique in the filename, not that "someone careless" simply overwrites your ''readme.txt'' file, call it ''readme_myProject_2020apr01.txt''.<br />
<br />
You could also use *.html, but not *.pdf, *.rtf and ''especially'' not *.doc. To [http://www.catb.org/%7Eesr/faqs/smart-questions.html#asking quote] Eric Raymond: "Never, ever expect hackers to be able to read closed proprietary document formats like Microsoft Word or Excel. Most hackers react to these about as well as you would to having a pile of steaming pig manure dumped on your doorstep. Even when they can cope, they resent having to do so.")<br />
<br />
More importantly however, always package what is required, not everything used (i.e. repackaging core Sauerbraten textures used in your map is wrong, not to mention a violation their license).<br />
<br />
==Creating a Read-Me== <br />
Many people make the mistake of calling their READMEs README.txt. This results in people overwriting other people's READMEs, and the whole thing gets confusing fast. Therefore, an easy solution is to call it README_mapname.txt, where mapname should be replaced with an identifying name.<br />
<br />
===Information your README should include:=== <br />
* '''Your identification''': Self explanatory but it's up to you if you want to include your real life information or just your pseudonym in the Sauerbraten community (or both).<br />
* '''Description of content''': A title or short sentence giving (at least an indication) of what to expect. If your release is "beta" (i.e. not final) you should say so here!<br />
* '''Date or Version''': Often forgotten and always sorely missed, the date can give an indication as to which release of Sauerbraten was the design target, saving users troubleshooting time. For example even some maps in the 2006-04-26 release gave "old map format" errors, and things like this can happen in the future.<br />
<br />
===Optional information your README could include:=== <br />
* '''Background information''': Tell the story behind the map, talk about the usage of the script, give location of further documentation and/or explain your intentions/reasoning if required for your package.<br />
* '''Credits''': You should note everybody and anybody who has in some way contributed to your package enough to earn a mention here, and it is considered proper etiquette within any collaborative community. Include the source of any packages you used (include a URL) and of course don't forget all those that gave you critique on the way to finishing your package.<br />
* '''Known issues''': A list of any issues or caveats users may encounter that you are aware of (for example platform independencies).<br />
* '''Contact information''': Methods to contact you will make it possible for feedback and bug information to reach you, however this might also lead to more spam reaching your inbox.<br />
<br />
==Frequently Asked Questions== <br />
===What goes into the ZIP and what does not?=== <br />
Your ZIP should include a subdirectory structure so it can be unpacked into the main Sauerbraten directory. A simple checklist would be:<br />
* Map file (OGZ) in "packages/base/file.ogz" inside the ZIP<br />
* Map config file (CFG) in "packages/base/file.cfg"<br />
* Your package data in "packages/mydata/" (mydata usually being your pseudonym within the Sauerbraten community)<br />
* Scripts can be placed inside the root directory, the data folder or your package folder.<br />
<br />
Using third-party package data (like a skybox from Quadropolis) should only be included if:<br />
# You have written permission from the original author<br />
# You really need to be independent from possible changes on the original data<br />
<br />
If both apply, create a folder in "/packages" for holding your package data but be sure to adapt all paths (in your CFG's) to this new folder. If you don't have the author's permission, the best way to do it is to provide a download link to the required third-party package and put it into the node-description on quadropolis and inside your README. Creating two versions of your package is also a viable solution, one including the whole data set (requires author's permission!) and another with just the additions you have created (since some people might already have or even have a newer version of that third-party package!).<br />
<br />
In some cases, you will not need the author's permission, depending on the license they have used for their package, however if you do use their package, send them an email to let them know anyway. This can be useful in situations where the author is no longer active in the Sauerbraten community and is hard to get in touch with.<br />
If you do not know the license or can't contact the author you have to assume it's copyrighted and you may not use in your package!<br />
<br />
===How do I get my package into the next release of Sauerbraten?=== <br />
If your work is of a high standard and useful in the development of Sauerbraten, it will. Shouting at the developers in all capital letters will make you seem immature, and repeated requests will make you somewhat of an annoyance, reducing your chances of ever getting something into Sauerbraten. Maturity is extremely important. For more information, read eihrul's [[Map Inclusion Standards and Quadropolis|here]].<br />
<br />
===How can I ensure everybody will enjoy my work?=== <br />
Well, actually you can't, but that's just aesthetics for you! More seriously though, there are some known issues with platform dependencies with Sauerbraten. Safest bet is to package all data in (preferably) PNG for images, OGG for music and WAV for sounds.<br />
<br />
Also ensure that all filenames are lower-case! Some operating systems are case sensitive, meaning that Texture.JPG is different to texture.jpg, causing all sorts of problems with your package. This applies to all files included with the package. Don't forget to make sure that your map does not begin with a capital letter so that TAB completion works!<br />
<br />
Windows, by default, doesn't show file extensions. This can cause problems with other operating systems (as mentioned above). You can fix this by following these instructions:<br />
* Open Windows Explorer/My Computer<br />
* Click on the Tools menu<br />
* Select Folder Options<br />
* Click on the View tab<br />
* Make sure "Hide extensions for known file types" is not checked<br />
* Press OK<br />
<br />
Don't forget to rename all your package files with lowercase letters (including the extension) after changing the setting!<br />
<br />
Remove all the _DS_store stuff when zipping on a Mac, the Thumbs.db files if coming from Windows, linux usually has no such files.<br />
They can often double the size of the file since they contain un-delete data and/or imagery - they can also give attackers insight into your system - removing them is really worth finding out how.<br />
**This paragraph could be enhanced by descriptions of what to do on each system - community members: please post something on pastebin and then link to it on the talk:-page here : Thank You!'''<br />
<br />
==Common Mistakes== <br />
Many people make the same mistakes when packaging their files, over and over again. To prevent this happening to you, make sure you don't make any of the same mistakes here:<br />
* '''Including garbage with your package''': Other than including content already distributed with Sauerbraten, many users include rubbish such as thumbs.db (created by Windows when Thumbnail view is used) and CVS folders. Windows users in particular should make sure hidden and system files are set to visible so this doesn't happen (thumbs.db is invisible otherwise).<br />
* '''Giving maps extremely common names/existing names''': There are probably more than ten maps titled 'castle' on Quadropolis (for example), and this becomes a problem when they start overwriting each other. Also, don't name your new map 'metl4'.<br />
* '''Copyright violations''': Including other user's content without permission is wrong (unless of course they provide it under a license which allows that). Expanding on this, modifying existing maps and then republishing them on Quadropolis is also a copyright violation, unless you have the author's permission (highly unlikely).<br />
== == <br />
==When You're Done== <br />
If you've gotten to this point and covered all the bases above, then congratulations, but how do you go about distributing your content, you ask? The most common method is to post it on [http://www.quadropolis.us/ Quadropolis], which is the semi official site for Cube Engine related maps, mods, and other content. Be sure to register a username and read their user's guide and packaging guide before posting.<br />
<br />
Good luck creating!</div>Adminhttp://cubeengine.com/wiki/Scripting_TutorialScripting Tutorial2014-12-12T15:59:33Z<p>Admin: </p>
<hr />
<div>=Basics= <br />
<br />
==Configuration== <br />
You are already writing CubeScript when you edit your <tt>autoexec.cfg</tt>.<br />
<br />
<pre><br />
name "my name"<br />
</pre><br />
<br />
This is a primitive CubeScript block. Its parts are a ''command'' and and a ''parameter'', or an ''argument''.<br />
<br />
<tt>name</tt> will take one argument. It will then try to set your player's name to the value of the argument; restraints of the current engine build apply (such as the maximum length).<br />
<br />
==Ingame== <br />
When you've found out about more commands, via the documentation, even just having glanced at their names, will be helpful to you with coming up with some on-the-fly scripting.<br />
<br />
Learn to use the console. Try out combining calls on-the-fly. One of the first CubeScript structures useful for this can be<br />
<br />
<pre><br />
loop I N BODY<br />
<br />
// for example as in<br />
loop a 3 [ entproperty (+ $a 1) +42 ]<br />
</pre><br />
<br />
Stuff gets saved to <tt>config.cfg</tt>, you can copy snippets of useful CubeScript to some file for later use.<br />
<br />
==After a session== <br />
Regularly paste your personal scripting -- stuff you aliased on the fly that was saved to ''config.cfg'' -- into your autoexec.cfg -- that way they'll always be up-to-date once the engine fires up!<br />
<br />
And don't forget to be quick about moving ''config.cfg'' to something like ''my_config.cfg''; to compare to working backups and/or salvage scores and scripting/values from it!<br />
<br />
=Keybindings= <br />
Remember: <tt>editbind</tt> will override a <tt>bind</tt> when in edit mode.<br />
<br />
Beware of binding keys that are already bound by the default configuration -- unless you're sure you know what you're doing. Check ''data/defaults.cfg'' for this.<br />
<br />
=Aliases= <br />
You define blocks of actions by defining an alias for them.<br />
<br />
<pre><br />
//old style:<br />
alias aNAME $aVALUE<br />
//new style:<br />
aNAME = $aVALUE<br />
</pre><br />
<br />
==The modifier alias== <br />
if you look at the [[Scripting Tutorial#modifier-demo|modifier demo]] you'll see some powerful ways to control your setup. Before you do look at it you might like to understand the way it works, from the bottom up. The details of ''where'' exactly something occurs have been omitted, as this is trivial to reconstruct.<br />
<br />
<pre><br />
bind MOUSE4 [ universaldelta +1 ]<br />
bind MOUSE5 [ universaldelta -1 ]<br />
</pre><br />
<br />
<tt>universaldelta</tt> is now our handle on the scrollwheel of our mouse. This in turn gets bound to an internal <tt>modifier</tt> alias, you change this modifier by binding keys to certain settings, these in turn need to be defined as special aliases to be parsed.<br />
<br />
<pre><br />
// echo 5 or 1, depending on _RCTRL, our flag<br />
bind "O" [ if ( = $_RCTRL 1) [ echo 5 ] [ echo 1 ] ]<br />
<br />
// set the _RCTRL flag while key "right control" is being pressed, off when released.<br />
bind "RCTRL" [ _RCTRL = 1; onrelease [ _RCTRL = 0 ] ]<br />
<br />
// initialize the _RCTRL flag before ever parsing $_RCTRL<br />
// the CubeScript block for bind "O" hasn't been parsed at this point yet...<br />
// ...someone would need to press that key first<br />
"_RCTRL" = [0]<br />
</pre><br />
<br />
This code will make your right control key be a sort of x1 / x5 switch,<br />
for the 'O'-key just a simple echo,<br />
<br />
<pre><br />
bind "M" [ domodifier 128 ]<br />
<br />
delta_game_128 = [<br />
echo (concat "DG_128:" (if (= $_RCTRL 1) [echo (* 5 @arg1) ] [echo (* 1 @arg1)]))<br />
]<br />
</pre><br />
<br />
try pressing M and turning your wheel, now RCTRL+M and MW -- are you getting the hang of it?<br />
<br />
Now look at the [[Scripting Tutorial#modifier-demo|modifier demo]] and find out, why your x1 / x5 doesn't work in editmode and how you can quickly make it work.<br />
<br />
==Common errors== <br />
A common cause for errors is forgetting spaces around the equals sign in CubeScript's mathematical operations' style! In both variants the <tt>$aVALUE</tt> represents any valid CubeScript block. Examples:<br />
<br />
Want to handle a script with a simple parameter toggle?<br />
<br />
<pre><br />
my_value = 1<br />
bind N [ my_value = 5; onrelease [ my_value = 1 ] ]<br />
my_script = [ if (= $my_value 1) [ echo regular ] [ echo modified ] ]<br />
bind M [ my_script ]<br />
</pre><br />
<br />
<span id="modifier-demo"></span><br />
==Modifier demo== <br />
Want to handle a script with +X/-X input via mousewheel?<br />
<br />
<pre><br />
delta_game_42 = [echo we got $arg1 as param "(game)"]<br />
delta_edit_42 = [echo we got $arg1 as param "(edit)"]<br />
bind KP_5 = [domodifier 42]<br />
editbind KP_5 = [domodifier 42]<br />
</pre><br />
<br />
<span id="parameter-demo"></span><br />
==Parameter demo==<br />
To clarify parameter passing -- usage of a zero value or no value at all shouldn't confuse your scripts!<br />
<br />
<pre><br />
param_script = [<br />
info = ""<br />
loop p 4 [<br />
cax = (+ $p 1)<br />
can = (concatword "arg" $cax)<br />
cav = (getalias $can)<br />
if (= $cav 0) [ cav = "(null)" ]<br />
info = (concat $info " " (concatword $cax ":") $cav)<br />
]<br />
// echo "1:" $arg1 "2:" $arg2 "3:" $arg3<br />
if (= $arg1 1) [<br />
echo "yes :" $info<br />
] [<br />
echo "no :" $info<br />
]<br />
]<br />
<br />
param_script 0 1 2 3<br />
param_script 1<br />
param_script 4 3 2 1<br />
param_script<br />
</pre><br />
<br />
<br />
=Triggering Action= <br />
<br />
For SP maps you can have trigger entities do scripting commands whenever the player touches the entity.<br />
<br />
The basic concept is to create aliases like<br />
<br />
<pre><br />
level_trigger_123 = [ echo "You triggered #123" ]<br />
</pre><br />
<br />
This would be executed when the player crosses the space of any trigger-entity with first param 123.<br />
<br />
<span id="trigger101"></span><br />
==Triggers== <br />
Sauerbraten can trigger special [[Scripting Guide|scripting]] for you, when an SP player crosses the space of one of your trigger entities. Note that triggers only work in SP mode!<br />
<br />
Historical development associates a carrot model with triggers, but any mapmodel can be used (or none at all).<br />
<br />
Each trigger has it's index -- <tt>entproperty 0</tt>. You may have multiple entities with the same index though.<br />
<br />
Triggering another trigger will ''not'' always do exactly what you want ATM, development toward that angle is under way!<br />
<br />
See this: [http://cubeengine.com/w/files/MapTriggerTest.zip MapTriggerTest.zip] [6.7K] '' A map and its CFG.'' to learn how to implement a basic secret's counter. There is also a secret's counter in "Episode 1" and other maps contain other scripting that you might like to use. You should also check out stuff you liked in somebody else's map and in their CFG to work out how they did it. To see how to trigger doors look at the map "door_demo" included with sauerbraten.</div>Adminhttp://cubeengine.com/wiki/Scripting_SyntaxScripting Syntax2014-12-12T15:59:32Z<p>Admin: </p>
<hr />
<div>==The basic command structure== <br />
Commands consist of the command itself, followed by any number of arguments separated by white space. You can use <tt>""</tt> to quote strings with white space in them (such as the actions in bind/alias), and wherever a command is required you can also use <tt>;</tt> to sequence multiple commands in one.<br />
<br />
You can evaluate aliases and expressions. You can substitute the value of an alias as an argument by prefixing it with a "<tt>$</tt>" sign, i.e.:<br />
<pre><br />
echo "The current value of x is $x"<br />
</pre><br />
You can even substitute the values of console variables this way, i.e <tt>$fov</tt> gives the current FOV value. Some values though will not be returned in this way, noteably <tt>name</tt> and <tt>team</tt>. A solution for this is to work with buffer aliases to later access the value when needed. Some aliases are set automatically, for example $arg1 to $argN are set if you supply arguments when you execute an alias. But beware, these should not be tested for emptiness since they may contain values of preceding calls of other aliases!<br />
<br />
There are two alternatives to <tt>""</tt> for quoting a string: <tt>()</tt> and <tt>[]</tt>. They work in the same way as <tt>""</tt>, with the difference that they can be nested infinitely, and that they may contain line feeds (useful for larger scripts). <tt>()</tt> is different from <tt>[]</tt> in that it evaluates the commands contained in it ''before'' it evaluates the surrounding command, and substitutes the results. <tt>()</tt> bracketed strings are called expressions, and <tt>[]</tt> bracketed strings may be thought of as blocks.<br />
<br />
An alternative to <tt>$x</tt> is <tt>@x</tt>, which uses an alias as a macro. The difference is that <tt>@x</tt> can be subtituted inside <tt>[]</tt> or <tt>()</tt> forms before they have ever been evaluated (at parse time), which makes them useful for composing strings or creating code on the fly. The <tt>@x</tt> form will be substituted using the value of <tt>x</tt> at the time the enclosing <tt>[]</tt> is evaluated. You can add more <tt>@</tt> prefixes to move up more levels of <tt>[]s</tt>, so <tt>@@x</tt> will move up two levels of <tt>[]s</tt> and so on. Example:<br />
<pre><br />
x = 0; if $cond [x = 1; [x = 2; echo @@x]]<br />
</pre><br />
will echo 0, since it uses the value of <tt>x</tt> at two levels up.<br />
<br />
The form <tt>@(body)</tt> is similar to <tt>@x</tt>, except that body contains commands executed at parse time. The result value after body executes is substituted in for <tt>@(body)</tt>. You may use multiple <tt>@</tt> prefixes as with the <tt>@x</tt> form. Example:<br />
<pre><br />
@(result "Hello, World!")<br />
</pre><br />
will substitute itself with ''Hello, World!''<br />
<br />
An overview of especially useful commands can be found on the [[Scripting Commands]] page.<br />
The possibilities of flow control for CubeScript are listed on the [[Scripting Flow Control]] page.</div>Adminhttp://cubeengine.com/wiki/Scripting_MenusScripting Menus2014-12-12T15:59:32Z<p>Admin: </p>
<hr />
<div>==Menu configuration and personalization==<br />
The games menus are completely organized in data/menus.cfg.<br />
Providing yourself with a backup of a working copy - you can edit it to fit your needs.<br />
<br />
If you think that is too much of a hassle, <br />
then there are several menu translations and ScriptPAKs that further modify your menu on [http://www.quadropolis.us/flexinode/list/2 quadropolis scripts].<br />
<br />
Caution : The water-edition (2006-09-12) is the last to use the ''2D style menus'',<br />
the gui-edition (2006-12-04) is the first to use the ''3D style menus''.<br />
Be sure to check your local documentation ... code here is for the new GUI-style only!<br />
<br />
----<br />
<br />
The respective commands for menu construction are:<br />
<br />
<pre><br />
newgui S<br />
</pre><br />
Creates a new menu with name N. All following menuitem/gui* commands will apply to this menu<br />
<br />
<pre><br />
// for 3D style check documentation - multiple types available : radio, button, slider, image, text, ...<br />
// as an example of a simple menu :<br />
newgui about [<br />
guitext "Sauerbraten engine"<br />
guitext "by Wouter van Oortmerssen"<br />
guitext "with contributions from Eihrul, Gilt and others"<br />
guitext "(for a full list of contributors see the readme)"<br />
guitext "http://sauerbraten.org/"<br />
]<br />
</pre><br />
See data/menus.cfg for further examples. If the block starts with the special character "^", then this will be evaluated as a command when being displayed. This allows you to create menu items that depend on changing gamestate. Also usable for dynamic stuff (as seen in menus.cfg) is the <tt>getalias</tt> command. For a really dynamic usage of the GUI menus check-out [http://www.quadropolis.us/node/435 QCSP - the 'Q' CubeScript PAK].<br />
<br />
<pre><br />
// 3D style<br />
showgui N<br />
// error in documentation :<br />
showgui servers<br />
// not "showservermenu" as the docs still say from 2D times :-P<br />
</pre><br />
Displays the menu with name N previously defined, and allows the user to pick an item with the mouse cursor. Upon clicking the highlighted item, the associated action will be executed. Pressing ESC will cancel the menu.<br />
<br />
----<br />
<br />
To show you how easy things can be done : some examples<br />
<br />
* [[Script Demo - Map Menu|how-to add my own favourite maps to the menu]]<br />
<br />
* sure you can switch your team by menu,<br />
but what about more options? What about switching between complete identities?<br />
[[Script Demo - Persona Menu|a persona switcher via menu]]<br />
<br />
* An even less elaborate example,<br />
If you're annoyed at "e" toggling editmode just about every time you get hectic during a game ...<br />
... then try out something like this :<br />
[[Script Demo - Keyboard Switch|keyboard layout switcher]]</div>Adminhttp://cubeengine.com/wiki/Scripting_GuideScripting Guide2014-12-12T15:59:32Z<p>Admin: </p>
<hr />
<div>=Introduction= <br />
Your local documentation (''README.html'') holds all the commands you can use. It is probably the best reference for the release you're using.<br />
<br />
With scripting you can achieve a more personalized Sauerbraten experience. In most cases some simple copy/paste will do the trick. But this guide aims at showing some easy techniques to empower gamers and mappers alike.<br />
<br />
Any files you find in your game directory (and sub-directories) ending in .cfg contain CubeScript. Check them out to see what the engine already does via scripting... and how!<br />
<br />
=CubeScript Topics= <br />
==Documentation Revisited== <br />
The basic command structures of CubeScript are explained on the [[Scripting Syntax]] page. Some introductory words on selected commands can be found on this [[Scripting Commands]] summary. For programming you should be aware of the [[Scripting Flow Control|flow control possibilities]].<br />
<br />
==Getting Started== <br />
Do your first steps with:<br />
* [[Using the Console]]<br />
* [[Scripting Tutorial]]<br />
* [[CubeScript Tutorial]]<br />
* [http://rknigh21.110mb.com/cubescript_1.html rknigh21's CubeScript Tutorial]<br />
<br />
==Map Configuration== <br />
Scripting for maps is explained on the [[Map Config and Scripting]].<br />
<br />
==Menu Personalization== <br />
Scripting for menus is explained on the [[Scripting Menus]].<br />
<br />
=CubeScript 101= <br />
==What happens at startup== <br />
Following files get executed:<br />
<pre><br />
if config.cfg doesn't exist:<br />
only then do we execute data/defaults.cfg<br />
this will - at regular quit of engine -<br />
be written into config.cfg<br />
<br />
if config.cfg exists:<br />
execute it<br />
<br />
execute data/menus.cfg<br />
<br />
if autoexec.cfg exists:<br />
execute it<br />
</pre><br />
<br />
==What happens on map load== <br />
<pre><br />
data/default_map_settings.cfg is executed<br />
if they exist<br />
packages/ ..PATH-to-package.cfg is executed<br />
packages/ ..PATH-to-Map.cfg is executed<br />
</pre><br />
<br />
==What can I do with scripting myself?== <br />
Whatever you can describe as a combination of CubeScript blocks.<br />
<br />
==<tt>autoexec.cfg</tt> and <tt>config.cfg</tt>== <br />
The engine automatically saves your [[configuration]] in <tt>config.cfg</tt>. To automatically run scripting on engine start you need only place them in <tt>autoexec.cfg</tt>.<br />
<br />
==The scripting newbie== <br />
To find out about what you can do, you'll need to know your way around the documentation at least; anything you can break down into single CubeScript commands can be made into a CubeScript Block and thus speed up your everyday use of the engine.<br />
<br />
Without being a programmer you might find a lot of this stuff too complicated for your taste, but do not despair! There are some examples on these pages to help you achieve a lot of goals and there are also quite a few scripts ready for download on [http://www.quadropolis.us quadropolis].<br />
<br />
But if you really want to get the most out of the engine it is suggested that you at least try getting familiar with some basics of the scripting capabilities! Try reading the page on [[Scripting Tutorial]] to see what fundamental know-how this is and how easy it is. Always referr to your local documentation to find basic CubeScript commands and how to use them, anything you want to be executed in sequence can be put inside a CubeScript block - like so:<br />
<pre><br />
// The fullscreen command only works on Linux, OS X, and other UNIX systems.<br />
doARecalc = [<br />
fullbright 0<br />
fullscreen 0<br />
calclight 2<br />
savemap<br />
fullscreen 1<br />
]<br />
</pre><br />
You can then execute this block simply by calling <tt>doARecalc</tt> ... for example via the console, or from other CubeScript blocks. Another example of a minimal CubeScript to handle a repetitive task: [[Scripting Commands#prettyscreenshot]] or from Quadropolis: [http://www.quadropolis.us/node/276 Pretty Screenshot]</div>Adminhttp://cubeengine.com/wiki/Scripting_Flow_ControlScripting Flow Control2014-12-12T15:59:31Z<p>Admin: </p>
<hr />
<div>=CubeScript control flow=<br />
<br />
Any more complex scripting than simply binding static commands to keys or defining the most simple of menus will require your script to change it's runtime behaviour in response to the state of the game. This is called ''control flow'', the classic possibilities available in most languages also exist in CubeScript.<br />
<br />
==mathematical operations==<br />
<pre><br />
+ A B<br />
- A B<br />
* A B<br />
div A B<br />
mod A B<br />
</pre><br />
(add, substract, multiply, divide, modulo): these all work like the integer operators from other languages. Example:<br />
<pre><br />
echo x squared is (* $x $x)<br />
</pre><br />
<br />
==value comparison==<br />
<pre><br />
= A B<br />
< A B<br />
> A B<br />
strcmp A B<br />
</pre><br />
(equals, lessthan, greaterthan, stringcompare): comparison operators that return 1 for true and 0 for false.<br />
<br />
==value passing==<br />
<pre><br />
result V<br />
</pre><br />
Normally the result of a [] block is the result of the last command in the block. If you want the result to be a particular variable or value, you can use e.g. "result $i" etc.<br />
<br />
==forks in execution==<br />
<pre><br />
if cond true false<br />
</pre><br />
executes the true or false part depending on wether cond is "0" or something else. Example:<br />
<pre><br />
if (< $x 10) [ echo "x is" $x ] [ echo "x is too big" ]<br />
</pre><br />
==repetition==<br />
<pre><br />
loop I N body<br />
</pre><br />
evaluates body N times, and sets the alias I from 0 to N-1 for every iteration. Example:<br />
<pre><br />
loop i 10 [ echo $i ]<br />
</pre><br />
<br />
<pre><br />
while cond body<br />
</pre><br />
evaluates body while cond evaluates to true. Note that cond here has to have [], otherwise it would only be evaluated once.<br />
Example (same result as the "loop" example):<br />
<pre><br />
i = 0; while [ (< $i 10) ] [ echo $i; i = (+ $i 1) ]<br />
</pre><br />
==string manipulation==<br />
<pre><br />
concat S...<br />
</pre><br />
concatenates all the arguments and returns the result<br />
<br />
<pre><br />
concatword S...<br />
</pre><br />
same as concat but without spaces between the elements.<br />
<br />
<pre><br />
format F V1..Vn<br />
</pre><br />
substitutes the V values into the format string F and returns the result. The format strings %1 through %9 are substituted with V1 through V9, respectively, and may be used multiple times. %% will generate a single % character. Example:<br />
<pre><br />
format "%1 bottles of %2 on the %3, %1 bottles of %2!" 99 beer wall<br />
</pre><br />
<br />
<pre><br />
at S N<br />
</pre><br />
grabs the Nth word out of string S and returns the result<br />
<br />
<pre><br />
listlen L<br />
</pre><br />
returns the number of items in the list L<br />
<br />
==game state specifics==<br />
<pre><br />
onrelease A<br />
</pre><br />
only executes A if the command is executed on the release of a key/button (must be in an action in a bind or an alias in a bind).<br />
<br />
<pre><br />
paused B<br />
</pre><br />
wether the game is paused or not (default 0, default key F1 toggles).<br />
<br />
<pre><br />
$editing<br />
</pre><br />
true when in edit mode</div>Adminhttp://cubeengine.com/wiki/Scripting_CommandsScripting Commands2014-12-12T15:59:31Z<p>Admin: </p>
<hr />
<div>=Command Reference= <br />
<br />
The following is an excerpt of commands available to you for scripting,<br />
refer to your local documentation to find out all commands available.<br />
On this page you will find commands and examples of usage to help get you into CubeScript.<br />
Almost all commands can be used in scripting, although a map-cfg cannot override persitent values - including among others <tt>watersubdiv</tt>, <tt>waterlod</tt>, <tt>maxparticledistance</tt> and <tt>fov</tt> among others.<br />
You can't override them in a map-cfg - a message will be output to your console in such cases -<br />
you can only set them manually. It counts as a manual setting if used via the menu!<br />
<br />
<pre><br />
exec C<br />
</pre><br />
Executes all commands in config file C.<br />
<br />
<pre><br />
history N<br />
</pre><br />
Executes the Nth command in the command line history. For example, binding "history 0" to a key allows you to quickly repeat the last command typed in (useful for placing many identical entities etc.)<br />
<br />
<pre><br />
saycommand P...<br />
</pre><br />
This puts a prompt on screen where you can type stuff into, which will capture all keystrokes until you press return (or esc to cancel). You may press tab to autocomplete commands/aliases/variables, and up/down keys to browse the command history. If what you typed started with a "/", the rest of it will be executed as a command, otherwise its something you "say" to all players. default key = T for talk, ` for commands. If P is prefix to insert to the buffer, (default key ` inserts a /).<br />
<br />
The following example will prepare one of three messages to be output via <tt>say</tt>, but don't be fooled, you can execute anything else besides <tt>say</tt> with this too.<br />
It binds the key '''K''' to prepare the command onto the console upon release of the key.<br />
You will only see a beautified display - for example : ''GREET #2''<br />
But if you confirm the command, it will execute the prepared '''saycommand'''.<br />
<pre><br />
// ----------------<br />
// greetings :<br />
// ----------------<br />
<br />
GMSG0 = "Hi! Let's Get It On!"<br />
GMSG1 = "Hello! Get Ready To Be Cubed"<br />
GMSG2 = "Hi There! Let's Fight Some..."<br />
<br />
// change MAXC if you add/remove greetings above<br />
GMSG_MAXC = 2<br />
// the first index to use (default : 0)<br />
GMSGCOUNT = 0<br />
<br />
// ----------------<br />
// beautification :<br />
// ----------------<br />
<br />
CCOL = ":^L0"<br />
// JAT : sic! ::<br />
JAT = " "<br />
// :: JAT : sic!<br />
J4U = (concatword $JAT ";")<br />
<br />
// ----------------<br />
// functionality :<br />
// ----------------<br />
<br />
// bogus alias, to allow for pretty command call<br />
GREET = []<br />
<br />
greeting = [<br />
GMSGCOUNT = (+ $GMSGCOUNT 1)<br />
if (> $GMSGCOUNT $GMSG_MAXC) [GMSGCOUNT = 0]<br />
CIN = (concatword "#" $GMSGCOUNT)<br />
CVN = (concatword "$" GMSG $GMSGCOUNT)<br />
// this is what to output - it will look pretty<br />
// and even ignores any surplus hitting of keys by the user ;)<br />
CSC = (concat GREET $CCOL $CIN $J4U say @$CVN ";foo = bar")<br />
onrelease [saycommand [/@@CSC]]<br />
]<br />
<br />
bind K [greeting]<br />
</pre><br />
<br />
<pre><br />
weapon a b c<br />
</pre><br />
Tries to select weapons a, b & c, in that order, if they have ammo ( 0 <nowiki>=`` fist, 1 ``=`` sg, 2 ``=`` cg, 3 ``=`` rl, 4 ``=`` rifle, 5 ``=</nowiki> gl ). If none of the 3 indicated have any ammo, it will try the remaining weapons for one with ammo (in order 3/2/1/4/0) (the fist needs no ammo). You can use the weapon command with 0 to 3 arguments. examples:<br />
<br />
<pre><br />
// close up selection :<br />
weapon 2 1 0<br />
<br />
// far away selection :<br />
weapon 4 3 2<br />
<br />
// medium distance selection :<br />
weapon 3 2 1<br />
<br />
// humiliate selection :)<br />
weapon 0<br />
<br />
// just switch to anything with ammo :<br />
weapon<br />
</pre><br />
<br />
In any selection, it will skip whichever weapon you have currently selected, so executing a weapon command repeatedly toggles between the two best weapons with ammo within a given selection. default keys 0 to 4 select the corresponding weapons, with sensible default alternatives, middle mouse button is a simple weapon switch.<br />
<br />
<pre><br />
alias N A<br />
N = A<br />
</pre><br />
Binds name N to commands A, after which you can use N as a shortcut for A. You may re-bind N as often as you like, call it recursively etc. You may use N = A as a shortcut for alias.<br />
<br />
<pre><br />
forward<br />
backward<br />
left<br />
right<br />
</pre><br />
Move you in said direction (defaults to cursor keys).<br />
<br />
<pre><br />
attack<br />
</pre><br />
Fires the current weapon. default = left mouse<br />
<br />
<pre><br />
jump<br />
</pre><br />
Triggers a jump. default key space & right mouse.<br />
<br />
<pre><br />
fov N<br />
</pre><br />
Sets your FOV to 10..150.<br />
<br />
<pre><br />
setfullscreenshader Name<br />
</pre><br />
Sets your favourite fullscreen shader. Active permanently once set. Use without name argument to turn it off. Current example shaders: invert, gbr, sobel, bloom<br />
<br />
<pre><br />
screenshot<br />
</pre><br />
Writes out "screenshotN.bmp", where N is the number of milliseconds since cube was launched (default key = F12).<br />
A little modified example :<br />
<span id="prettyscreenshot"></span><br />
<pre><br />
// do a pretty screenshot (hiding HUD and all)<br />
MPscreenshot = [<br />
phh = $hidehud<br />
phs = $hidestats<br />
phg = $hudgun<br />
hudgun 0<br />
hidestats 1<br />
hidehud 1<br />
sleep 2 screenshot<br />
sleep 3 [hudgun $phg; hidestats $phs; hidehud $phh;echo SCREENSHOT made]<br />
]<br />
</pre><br />
<br />
<br />
<pre><br />
hidehud b<br />
</pre><br />
Turns on/off the entire hud display, which includes rendering stats, ammo, and echoed text. (default = 0)<br />
<br />
<pre><br />
crosshairsize n<br />
</pre><br />
Sets the size of your crosshair, 0 being off (default = 3)<br />
<br />
<pre><br />
keymap K N A<br />
<br />
// for players using a german keyboard the following keymappings can be added to data/keymap.cfg<br />
keymap 223 SZ<br />
keymap 252 UE<br />
keymap 246 OE<br />
keymap 228 AE<br />
</pre><br />
<br />
Sets up the keymap for key code K with name N and default action A. You should never have to use this command manually, use "bind" instead. But in case you do need it (to make use of previously un-bind-able keys (like above)) take a look at [[Configuration Hints#toc4|Internationalization]]<br />
<br />
<pre><br />
// for people uncomfortable with using "BACKQUOTE":<br />
bind CARET [saycommand /]<br />
</pre></div>Adminhttp://cubeengine.com/wiki/Script_Demo_-_Persona_MenuScript Demo - Persona Menu2014-12-12T15:59:31Z<p>Admin: </p>
<hr />
<div>open menus.cfg and look for a line reading<br />
<pre><br />
newgui main<br />
</pre><br />
<br />
this is where it all begins!<br />
<br />
Then locate the line defining the quit menuitem<br />
<pre><br />
guibutton "quit"<br />
</pre><br />
and place a new line above it :<br />
<pre><br />
guibutton "Persona" "showmgui mypersona"<br />
</pre><br />
<br />
then move to the end of the file and enter some lines to define this menu to be shown :<br />
<pre><br />
bteam = "GWAR"<br />
pnlist = "Mutilator _ Anihalator _ InH4L3 BRTH ExH4L3 BRTH Frodo RING Mithrandir RING Batou PP#9 Ichikawa PP#9 Morgoth _ Spawn634 _"<br />
<br />
genpersonas = [<br />
loop i (div (listlen $arg1) 2) [<br />
j = (* $i 2)<br />
k = (+ $j 1)<br />
pn = (at $arg1 $j)<br />
pt = (at $arg1 $k)<br />
ct = $bteam<br />
if (strcmp $pt "_") [] [ct = $pt]<br />
mi = (concat "name" (concatword $pn ";team") $ct)<br />
guibutton $pn $mi<br />
]<br />
<br />
newgui mypersona [<br />
genpersonas $pnlist<br />
]<br />
</pre><br />
<br />
The whole thing works by taking always two elements from the list, the second being interpreted as team, if it isn't an underscore. The first will be your new name, this is displayed in the menu. The team will default (in case of an underscore) to what bteam is set to.</div>Adminhttp://cubeengine.com/wiki/Script_Demo_-_Map_MenuScript Demo - Map Menu2014-12-12T15:59:30Z<p>Admin: </p>
<hr />
<div>When using the <tt>complete</tt> function of the <br />
* <tt>map</tt>, <br />
* <tt>sp</tt>, <br />
* <tt>dmsp</tt>, <br />
* <tt>ffa</tt>, <br />
* <tt>insta</tt> and <br />
* <tt>capture</tt> <br />
aliases you always use an up-to-date list of maps (=*.ogz files).<br />
This means they will auto-complete even your ''just saved'' mapname.<br />
The console uses TAB-completion for all commands and aliases, the <tt>complete</tt> command gives you TAB-completion on the first argument as files of the configured extension - ogz's in packages/base for the aforementioned aliases.<br />
<br />
The menus ''do not auto-update'' themselves;<br />
these lists are editorial only - meaning they are a selection made by a human.<br />
You can easily add your favourite creations, downloads and coop-edit maps by adding them to the map name lists in <tt>data/menus.cfg</tt>.<br />
<br />
Look for the line reading<br />
<pre><br />
newgui maps<br />
</pre><br />
<br />
insert after the line with <tt>rpgmaps = "</tt> (line 49 in 2006-12-04 release)<br />
<pre><br />
personalmaps = "my_personal_favourite_map_nr_1 my_personal_favourite_map_nr_2 my_personal_favourite_map_nr_3"<br />
</pre><br />
and inside the <tt>newgui maps</tt> block<br />
<pre><br />
guitab personal<br />
guilist [<br />
guilist [ genmapitems $personalmaps ]<br />
showmapshot<br />
]<br />
</pre><br />
<br />
The whole block should look (something) like this<br />
<pre><br />
newgui maps [<br />
guilist [<br />
guilist [<br />
genmapitems $mainmaps<br />
guibutton "thor" "map thor" "map"<br />
]<br />
showmapshot<br />
]<br />
guitab more<br />
guilist [<br />
guilist [ genmapitems $moremaps1 ]<br />
guilist [ genmapitems $moremaps2 ]<br />
showmapshot<br />
]<br />
// my personal maps here ::<br />
guitab personal<br />
guilist [<br />
guilist [ genmapitems $personalmaps ]<br />
showmapshot<br />
]<br />
// :: my personal maps here<br />
guitab old<br />
guilist [<br />
guilist [ genmapitems $oldmaps ]<br />
showmapshot<br />
]<br />
guitab capture<br />
guilist [<br />
guilist [ genmapitems $capturemaps ]<br />
showmapshot<br />
]<br />
guitab rpg_test<br />
guilist [<br />
guilist [ genmapitems $rpgmaps ]<br />
showmapshot<br />
]<br />
]<br />
</pre><br />
<br />
Assuming the maps you entered truely exist in packages/base your menu modification will work.</div>Adminhttp://cubeengine.com/wiki/Script_Demo_-_Keyboard_SwitchScript Demo - Keyboard Switch2014-12-12T15:59:30Z<p>Admin: </p>
<hr />
<div>in autoexec.cfg (create in base game dir if it doesn't exist):<br />
<pre><br />
bind e []<br />
</pre><br />
to disable edittoggle at game engine start.<br />
then modify data/menus.cfg:<br />
<pre><br />
newgui keyswitcher [<br />
guibutton "normal" [exec gamekeys.cfg]<br />
guibutton "editor" [exec editkeys.cfg]<br />
]<br />
</pre><br />
Do not forget to add a "showgui"-line for your new menu too (in data/menus.cfg, e.g. in the main menu).<br />
Then all you have to do is copy data/defaults.cfg to gamekeys.cfg and editkeys.cfg (in base folder), remove all non-keybind lines<br />
and then edit them to match your needs.<br />
Remember to keep the edittoggle bind for editkeys.cfg and in gamekeys.cfg to bind to an empty string (like in autoexec.cfg above).</div>Adminhttp://cubeengine.com/wiki/Performance_GuidePerformance Guide2014-12-12T15:59:30Z<p>Admin: </p>
<hr />
<div>A key part of a good gaming experience is performance. You want the most framerates you get out of a game. It can improve it's quality by several magnitudes<br />
<br />
=Steps to Increasing Performance= <br />
Things you can change that either affect your performance or your visual quality, in order of importance:<br />
<br />
==Player Models== <br />
If you are using an Intel GMA chipset, then certain player models will be much faster to render than others. Use the "Ogro" player model, which can be selected in the ''options'' menu, or you may choose him from the Sauerbraten console by typing <tt>/playermodel 2</tt>.<br />
<br />
Also, if you are using an Intel GMA chipset, turn off stencil shadows by going to the ''options'' menu, then under the ''gfx'' tab make sure the ''stencil shadows'' option is off. You may alternatively shut these off from the Sauerbraten console by typing ''/dynshadow 0''.<br />
<br />
==Resolution== <br />
Your resolution has the largest effect on performance. Change it in the ''options'' menu under the ''res'' tab, or force it explicitly on the command-line with ''sauerbraten.bat'' (Windows) or ''sauerbraten_unix'' (Linux/BSD/etc) in the base game folder (the <tt>-w</tt> and <tt>-h</tt> options, try <tt>-w640 -h480</tt> for example). If you have an extremely low framerate, lowering the resolution will have immediate effects.<br />
<br />
==Video RAM== <br />
If you are using an older video card with 64 MB or less of video RAM (skip this section if you have more), then before you do anything else, first try enabling S3 texture compression (if your 3D card supports it) with the console command <tt>/texcompress 128</tt>. However, if your card does not support S3 texture compression, then add the following line to your ''autoexec.cfg'' file: <tt>maxtexsize 128</tt><br />
<br />
Texture compression should be tried first. However, if that fails, the <tt>maxtexsize</tt> variable will limit the size of textures to be no larger than 128 by 128, scaling them down if necessary. Either one will use much less video RAM. If a map uses more textures space than you have available video RAM, then you will notice huge slowdowns.<br />
<br />
==Shaders== <br />
Unless you have the latest and greatest card, shaders will hurt your framerate. Turn them off either by going to the ''options'' menu and under the ''gfx'' tab ensuring the ''shaders'' checkbox is off, or by adding the flag ''-f0'' to your command line.<br />
<br />
Note that if your card doesn't support them, they will be turned off automatically already. You can also selectively turn off some shaders by making sure the ''low detail'' option is checked next to the ''shaders'' option in the menus described above, or by setting the ''shaderdetail'' console variable with values 0 through 3 (i.e. ''/shaderdetail 1''), with lower values meaning fewer fancy visual effects. Using a low ''shaderdetail'' value can make shaders perform quite well on low end cards.<br />
<br />
==Antialiasing== <br />
While <tt>-a4</tt> (on the command line, may also be modified by graphics drivers) will look fantastic, especially at the lower resolutions, for max performance it should be left at the default (<tt>-a0</tt>).<br />
<br />
==Fullscreen Shaders== <br />
Do not turn full screen shaders like bloom on (in the menu) unless you have one of the latest cards.<br />
<br />
==VSync== <br />
Turn off vertical sync (in your graphics driver options) for slightly less hiccup in framerate (at the cost of potential visual tearing).<br />
<br />
==Color Depth== <br />
Changing to <tt>-b16</tt> (16 bits per pixel) can give you quite a performance boost (but mainly only on older hardware). If you use ''-b16'', be sure to use ''-z24'' too (a 24 bit depth buffer won't hurt your performance, but setting it to 16 will lead to bad visuals, flickering lines, sparks, and possibly even compromised depth perception which is noticable when trying to shoot). Most graphics card automatically change to 16 bit depth buffering when using 16 bit colour depth, so make sure you use ''-z24'' to prevent this.<br />
<br />
==Water== <br />
If water shaders are slowing you down, go to the ''options'' menu and then under the ''gfx'' tab try turning off the ''reflection'' and ''refraction'' checkboxes in the ''water'' options. You may also toggle these off from the console with <tt>/waterreflect 0</tt> and <tt>/waterrefract 0</tt>.</div>Adminhttp://cubeengine.com/wiki/Multiplayer_GuideMultiplayer Guide2014-12-12T15:59:29Z<p>Admin: </p>
<hr />
<div>=Introduction= <br />
Before you start to play online you should have taken some time to setup your game.<br />
<br />
==Settings== <br />
Apart from having appropriate graphics settings for your computer -- to maximize the games speed while balancing visuals -- refer to the [[Performance Guide]] for this -- you should also have a unique name so that others can recognize you.<br />
<br />
<span id="OER"></span><span id="etiquette"></span><br />
==Ogros' Etiquette Reference== <br />
The ogros have an evolutionary history, a society -- hence some etiquette:<br />
* End-of-match: the traditional shorthand gg can mean anything from good game to gross gore. Say it, it's traditional!<br />
* Team killing: When joined up into teams, it's considered polite to mumble "tk" after TKing as soon as the situation permits.<br />
* Voting: if a vote was called, but you prefer playing as is, say so too! If you are master talk to players about which maps they'd like to play!<br />
* Kick/ban/locked/mastermode: masters shouldn't abuse their powers, players shouldn't nag masters -- just accept it if a master allows you as a spectator only!<br />
* Join/disconnect: it would be polite to annouce yourself on join with at least saying "hi", and "bye" before leaving.<br />
<br />
==Finding a Game== <br />
Go to the multiplayer menu, and ''update from the master server''. You will then see the current online games.<br />
<br />
The server browser displays enough basic information about a respective game to help you choose the right server for yourself. Take note of indicators for private and locked mastermodes (where it shows "P" or "L" next to number of players).<br />
<br />
=Game Modes= <br />
The game runs in a range of different modes. Internally they are mapped to the indexes [-2 .. 0 .. 13], with modes less than zero being the [[Singleplayer Guide|Singleplayer]] modes. The modes all have their own little special flavor, so you have -- in theory -- 16 different games instead of just one -- though technically, 15 games and a cooperative editing mode. The Trooper Edition (March 5, 2009) has brought some new ones.<br />
<br />
The current multiplayer modes are 0-13, with the special <tt>mode 1</tt> - for coop-edit.<br />
Singleplayer modes all have a negative index - also don't forget your aliases (like <tt>sp</tt>, <tt>ffa</tt>, <tt>insta</tt>, ...)<br />
<br />
<br />
For completeness we'll list the SinglePlayer modes here too, which of course aren't available during a multiplayer game.<br />
{| style="border: 1px solid #c6c9ff; border-collapse: collapse;" cellspacing="0" cellpadding="10" border="1"<br />
|-<br />
| <br />
| name <br />
| description <br />
|-<br />
| -5 <br />
| SlowMo-SP <br />
| slow-motion singleplayer -- speed changes according to your health <br />
|-<br />
| -4 <br />
| SlowMo-DMSP <br />
| slow-motion singleplayer deathmatch -- speed changes according to your health <br />
|-<br />
| -3 <br />
| DemoPlayback <br />
| this mode is used to playback demos -- see [[Demo Recording]] <br />
|-<br />
| -2 <br />
| SP <br />
| basic singleplayer <br />
|-<br />
| -1 <br />
| DMSP <br />
| singleplayer deathmatch <br />
|}<br />
<br />
Of course all (legal) modes are available via the voting menu.<br />
<br />
{| style="border: 1px solid #c6c9ff; border-collapse: collapse;" cellspacing="0" cellpadding="10" border="1"<br />
|-<br />
| <br />
| name <br />
| description <br />
|-<br />
| 0 <br />
| ffa <br />
| Your basic FPS-game mode. With items spawning, respawning, and players just fragging away. FFA stands for free-for-all. <br />
|-<br />
| 1 <br />
| coopedit <br />
| Cooperative editing in-game, for more information on this mode, refer to the [[Cooperative Editing]] <br />
|-<br />
| 2 <br />
| ffa/duel <br />
| same as ffa/default <br />
|-<br />
| 3 <br />
| teamplay <br />
| basic teamplay mode <br />
|-<br />
| 4 <br />
| instagib <br />
| Your classic 1-shot-1-kill type of game, no items spawn in this mode - it's just movement and aiming that can keep you alive longer than your enemy. Players respawn right away after being fragged. Your only weapons are a rifle with 100 shots, and your fist - which does for quick frags when up close to your enemy, since it's "rate of fire" is more rapid. <br />
|-<br />
| 5 <br />
| instagib-team <br />
| teamplay instagib. <br />
|-<br />
| 6 <br />
| efficiency <br />
| You spawn with a random subset of ammunition, thus giving you a temporary assignment (especially in team mode) or simply forcing a certain tactical approach on you. Players respawn right away after being fragged. <br />
|-<br />
| 7 <br />
| efficiency team <br />
| teamplay efficiency. <br />
|-<br />
| 8 <br />
| capture <br />
| This is a completely different approach to your regular capture: For starters, frags are not counted at all. The goal is to keep certain bases under your control for as long as possible. Your team is continously awarded points for each base it has currently captured - the more bases you hold for a longer time the more your teams score will increase. If your team manages to capture all bases on the map the match is ended, otherwise it ends after the 15 minute timelimit. When you have been fragged you will stay in limbo for 10 seconds before attempting to spawn next to one of your teams bases, preferrably the one closest to your enemies. This mode is akin to the Domination mode found in Unreal Tournament. <br />
|-<br />
| 9 <br />
| instacapture <br />
| capture with instagib <br />
|-<br />
| 10 <br />
| regencapture <br />
| like capture but without a respawn timer and the bases you own regenerate your health, armour and ammo when you stand close <br />
|-<br />
| 11 <br />
| tactics <br />
| tactics <br />
|-<br />
| 12 <br />
| tactics-team <br />
| <br />
| teamplay tactics <br />
|}<br />
<br />
<span id="vote"></span><br />
==Changing Modes and Maps== <br />
When playing online you can change the current mode and current map being played by voting for a new game. This is done either via the menu or by simply typing the command to the console (which is easier to show here).<br />
<br />
<pre><br />
/insta curvedm<br />
</pre><br />
Or in full..<br />
<pre><br />
/mode 4; map curvedm<br />
</pre><br />
<br />
This will vote for an ''instagib'' match on the map ''curvedm'' ("Curves That Kill").<br />
<br />
The predefined aliases of release 2006-12-04 are:<br />
<pre><br />
sp = [ mode -2; map $arg1 ]<br />
dmsp = [ mode -1; map $arg1 ]<br />
ffa = [ mode 0; map $arg1 ]<br />
coop = [ mode 1; map $arg1 ]<br />
insta = [ mode 4; map $arg1 ]<br />
capture = [ mode 12; map $arg1 ]<br />
</pre><br />
<br />
<span id="master"></span><br />
==Master Mode== <br />
The MASTER is in control of the game.<br />
<br />
MasterMode can be set to :<br />
* 0 : OPEN - no special features<br />
* 1 : VETO - if the MASTER votes, the vote is automatically accepted<br />
* 2 : LOCKED - future connects go into SPECTATOR<br />
* 3 : PRIVATE - future connects are disabled<br />
<br />
Only the MASTER is able to move SPECTATORS back into the game or KICK people.<br />
A kicked player will not be allowed to reconnect until the server goes empty thus emptying the ban-list or until the master issues the command <tt>clearbans</tt> manually.<br />
<br />
The master has a range of commands at his disposal :<br />
* <tt>setmaster 1|0</tt> : claim or relinquish MASTER<br />
* <tt>mastermode 0|1|2|3</tt> : set the mastermode (see above)<br />
* <tt>spectator B N</tt> : with 1 for on, 0 for off will set/unset SPECTATOR for player N.<br />
* <tt>setteam N T</tt> : forcibly sets player N on team T<br />
* <tt>kick N</tt> : kick a player by name or client-id (visible for MASTER on score-table)<br />
<br />
If you are MASTER you will see the clients ID behind their names on the scoreboard,<br />
other players will see your name in green so they know who is MASTER.<br />
<br />
The MASTER should use his powers wisely.<br />
Don't kick people randomly and don't switch map/mode without a good reason - especially if the other players are busy enjoying the current game. Even though you can use your VETO power to overrule everybody else. If you abuse your powers, chances are the players will change to another server to free themselves from your oppressive rule.<br />
<br />
==Team Modes== <br />
All multiplayer ogros/ironsnouts are either enemies or teammates.<br />
The red ones are enemies,<br />
the blue ones are on your team.<br />
In ''capture'' mode this is also true for the radar blips.<br />
Team names are just that, even if you are on ''team red'' your team-mates show up in blue!<br />
<br />
Currently the two default teams are ''good'' and ''evil''.<br />
<br />
[[File:ogros.jpg]]<br />
<br />
In certain cases you will be auto-assigned to a team,<br />
so be sure not to be too fixed on certain playernames ... shoot the red guys!<br />
<br />
<tt>SP:SinglePlayer .. you'll never '''fight''' one of these in a multiplayer match</tt><br />
<br />
Note : the ogro will be replaced by ironsnout in the release after 2007-05-13 ("spring").<br />
<br />
<span id="hosting"></span><br />
=Server Hosting= <br />
<br />
==Setup== <br />
If you want to host your own server you should be sure to have setup your network accordingly.<br />
To enable access from a WAN (read internet) your routing needs to forward the games ports (see below); for LAN gaming see the following section about [[Multiplayer Guide#LAN|local network gaming]].<br />
<br />
==Player VS. Speed== <br />
A home DSL connection upstream is rumoured to be sufficient to host a 6-player-server, this is currently standard for a server without stating another number in the passed parameters ("-cX" for X players), it used to be 4 before we got a good overhaul on the network code, which slimmed down the packets nicely. Another feat brought to you by the dilligent team of developers behind your favourite multiplayer fps game!<br />
<br />
<span id="config"></span><br />
==Configuration== <br />
For a complete list of parameters always check the documentation: [http://sauerbraten.org/docs/config.html docs/config.html] under section ''command line options'',<br />
also read up on stuff you can do in [http://sauerbraten.org/docs/game.html docs/game.html] (bottom).<br />
<br />
Take note of the possibility to set a master-password, which will give you MASTER even though somebody else already is. Because you know the servers master-password. Use comand line param ''-pS'' for this, where "''S''" is your password, this is never sent to any clients.<br />
<br />
If you are unsure as how to setup your network &amp; firewall correctly, there are some useful hints in the following paragraphs. We can't explain every little detail about this complex subject and encourage you to use the rest of the documentation for additional help!<br />
<br />
<span id="registration"></span><br />
==Public or Private?== <br />
If you do not want your server to be registered on the masterserver then simply point it to a non-working masterserver, most common would be ''-mlocalhost''. By default the official masterserver is contacted and will, if traffic is found possible, then add your server for everbody updating their serverbrowser menu.<br />
<br />
<span id="router"></span><br />
==Router and Ping Response== <br />
If you get a message like "''server did not respond to ping''" your ports aren't being forwarded correctly yet. On the forum a lot of router issues were resolved by pointing to portforward.com. Unfortunately a number of ISPs seem to hand out routers that are incapable of forwarding ports, if you have been given such a device you will, sadly, not be able to host a server.<br />
<br />
The UDP ports you need to forward (or DNAT) to your local box (running the server) are ''28785'' and ''28786''.<br />
<br />
<span id="LAN"></span><br />
==LAN Play== <br />
On your LAN the limit of players will probably only depend on the processing power of the hosting server. Use the "-cX" parameter to enable a maximum of X players, the default assumes a WAN setup, so is far lower than you'd like. The clients can use:<br />
<br />
<pre><br />
/lanconnect<br />
</pre><br />
<br />
To connect to this server easily.<br />
<br />
If you are preparing for a LAN-party you might want to take some time to distribute common keybindings and/or integrate this into the menu for all players.<br />
<br />
<span id="WAN"></span><br />
==Internet Play== <br />
If you are playing on the internet you should be aware that sometimes players might be cheating.<br />
This is a problem that arises with every game to some degree, open source makes this issue maybe even more relevant.<br />
<br />
The way to protect from cheaters, or simply keeping "your" game under control - is using a MASTER.<br />
The MASTER player will be colourized in the SCORE table, so you can contact this player in case you have any issues with the current game.<br />
<br />
Voting can be forced by the MASTER (requires mastermode 1 (VETO)), the MASTER can also set the game to be LOCKED (future connects go directly into SPECTATOR) or even set the game to PRIVATE mode, which bans all future connects. See the [[Multiplayer Guide#master|MASTER description]] for details.<br />
Regular voting works by somebody calling a mode and map - which will be output on every players console.<br />
<br />
<br />
If you agree you should simply call the same mode/map combination (e.g. via the multiplayer menu or by typing in manually). As soon as more than 50% of the players have agreed the game will switch to the desired mode/map combination.</div>Adminhttp://cubeengine.com/wiki/Mr_FixitMr Fixit2014-12-12T15:59:29Z<p>Admin: </p>
<hr />
<div>=Mr. Fixit= <br />
<br />
This is the Mr. Fixit *.blend file released upon request for learning purposes. Download it here; [http://cubeengine.com/w/files/mr_fixit.zip mr_fixit.zip]. Any questions please direct them to<br />
geartrooper on irc.quakenet.org #sauerbraten or on the Sauerbraten forums, or at ironantknight [at] gmail [dot] com.</div>Admin