CONTENT |
---|
Credits: | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
first of all i want to thank you for the interrest in my work, but it's not only one guy creating Nitro2 there are many people helping me doing this.
| ||||||||||||
What is Nitro2? |
all features of Nitro2 can be controlled using the Nitro2.ini, only activated features will allocate memory and use cpu resources Nitro2 is working totally with dynamic allocated memory and multithreaded, if you only need the Quake2 Proxy feature the rest will not be initialised. | ||||||||||||||||||||||||||||||||||
Files included: | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||
Installation: | ||||||||||||||||||||||||||||||||||
a detailed installation help in english and german can be found in the docs directory
docs/Install_ger.htm (deusche version) docs/Install_eng.htm (english version) | ||||||||||||||||||||||||||||||||||
Starting Nitro2: |
-cIP[:PORT] | : | initialisation of the autoconnect to server feature. this will autoconnect all new clients to the specified IP:PORT |
-g1 or -g2 | : | perform a GameSpy/QView startup -g1 will startup QuakeWorld -g2 will startup Quake2 QView users have to change the STARTER_CONFIG variable in the Nitro2.ini to QView.cfg (not for PingTool users!) |
-v | : | turn on verbose mode, in this mode Nitro2 will print additional informations about the Masterserver activities. |
-m | : | do not perform a menu startup |
-s1 or -s2 | : | perform a game startup using the game variables set in the Nitro2.ini -s1 will startup QuakeWorld -s2 will startup Quake2 this is not needed for GameSpy startups! |
-q | : | starts Nitro2 in quiet mode (no messages will be printed in the Nitro2 console!) |
-f | : | do not start the Nitro2 dos console, you will not be able to control/quit Nitro2 using the
Nitro2 console.
on win32 systems this will free the used console for other applications or it will close it. |
-iFILENAME | : | use FILENAME instead of the Nitro2.ini for the startup configuration |
-nIP | : | set a network device to use for nitro2 activities, this is useful if you have more than one network device in your system and you want Nitro2 just to hook on one of them or if you use the Masterservers and you register a localhost game to it, in this case the given device ip will be used instead of the localhost ip in serverlist request |
Quitting Nitro2: |
---|
1. | if you use Nitro2 to startup your Game you can set EXIT = Yes in the Nitro2.ini this will force Nitro2 to shutdown automatically when you quit the Game |
|
2. | you can set a timelimit using EXITAFTER in Nitro2.ini. if Nitro2 is idle for the given time it will exit automatically! |
|
3. | you can use the Nitro2 ConsoleCommand q to exit.
|
The Nitro2 Console: |
---|
|
on startup of Nitro2 the Nitro2 console will appear and the startup informations will be printed in it you can use this console to exit, gain informations or to config the forwarding proxy |
type h for help in it and you will get a list of commands |
Command list: |
s | : | display status informations about the Nitro2 services |
v | : | turn verbose mode on/off (like the Nitro2 commandline parameter -v) |
fwip[=ip[:port]] | : | set new forwarding ip - like FW_IPADDRESS in the Nitro2.ini all new connecting clients will be forwarded to the new address. currently connected clients remain untouched! do not use a space in the command! |
h | : | help |
q | : | quit Nitro2 |
MasterServer Setup: |
---|
|
A Masterserver can be used to hand GameSpy/PingTool Serverlists of running QuakeWorld/Quake2/Quake3Arena/Kingpin or Half-Life Servers
you can enable the Masterservers by editing the Nitro2.ini Masterservers are extremely useful on big lan sessions or if you want to provide a public Masterserver in the Internet! |
how to tell a Quake2/QuakeWorld/Half-Life/Kingpin Servers to register at the Masterserver: |
add to the startup configuration file of your Server (or type it in the console of it) setmaster ip:port (Half-Life requires a space instead of an ':' between ip and port!) where ip stands for the ip-address of Nitro2 and port for the Q2_MASTERPORT/QW_MASTERPORT/HL_MASTERPORT /KP_MASTERPORT set in the Nitro2.ini sometimes Quake2 Servers are sending the first info to the Master too fast so that the first heartbeat gets lost i think it's because Quake2 is not fully initialised when it tries to send, you can type 'heartbeat' in the serverconsole of Quake2/QuakeWorld/Half-Life/Kingpin to force it to send a heartbeat to the Masterserver. if setmaster is specified the Games sends one heartbeat every 5 minutes to the specified Masterserver. |
how to tell a Quake3Arena Servers to register at the Masterserver: |
add to the startup configuration file of your Server (or type it in the console of it) sv_master1 ip:port where ip stands for the ip-address of Nitro2 and port for the Q3_MASTERPORT set in the Nitro2.ini now you have to tell Quake3Arena that your server is an internet server (else it will not send heartbeats!) this can be done by using the quake3 server setup menu by setting dedicated to Internet ,by setting dedicated 2 in your config file/q3 console or setting it as startup parameter like: quake3.exe +set dedicated 2 +sv_master1 192.168.0.98:27950 +map q3test1 |
how to tell GameSpy where to find the Nitro2 QuakeWorld Masterserver: |
do a rightclick with your mouse over the left QuakeWorld Masterserver list and choose
'Add Master Server List...' type in a name (Nitro2 for example) the ip of your Nitro2 to add and the QW_MASTERPORT set in the Nitro2.ini - thats all! just use refresh to get the actual Serverlist from the QuakeWorld Masterserver! |
how to tell GameSpy where to find the Nitro2 Quake2/Quake3Arena/Half-Life/Kingpin Masterserver: |
do a rightclick with your mouse over the left Quake2/Quake3Arena/Half-Life Masterserver list and choose
'Add Master Server List...', do not use 'Add Server List...' !!! type in a name (Nitro2 for example) the ip of your Nitro2 to add and the Q2_MASTERPORT/Q3_MASTERPORT/HL_MASTERPORT /KP_MASTERPORT set in the Nitro2.ini - thats all! just use refresh to get the actual Serverlist from the Quake2/Quake3Arena/Half-Life/Kingpin Masterserver! |
how to tell PingTool where to find the Nitro2 QuakeWorld/Quake2/Quake3Arena/Half-Life/Kingpin Masterserver: |
do a rightclick with your mouse over the left Masterserver list and choose
'Add New Server Source' select the Game and click on 'Master Server' at description type in a name (Nitro2 for example) and at Server Source IP Address the ip of your Nitro2 and the QW_MASTERPORT/Q2_MASTERPORT/HL_MASTERPORT/Q3_MASTERPORT/KP_MASTERPORT set in the Nitro2.ini in ip:port style (192.168.0.98:27000 for example) - thats all just use refresh to get the actual Serverlist from the QuakeWorld/Quake2/Quake3Arena/Half-Life/Kingpin Masterserver! |
Forwarding Proxy: |
---|
|
The forwarding Proxy is a simple tool which just sends data received on the FW_LISTENPORT to
the FW_IPADDRESS. It can handle up to 32 Clients at the same time, if you want to limit the
maximal Clients of the forwarding Proxy just set FW_MAXCLIENTS to the number of Clients you
want to be forwarded. If the forwarding Client limit is hit all further Clients who try to
connect will be ignored. A Client will be removed if it is inactive for FW_TIMEOUT seconds.
The FW_IPADDRESS can also be changed using the fwip Nitro2 console command or using the Nitro2
Admin Menu, all new clients connecting to the forwarding Proxy will be forwarded to the new
forwarding IP address! |
Firewalling: |
|
If you don't want that anybody can connect your Proxy (especially when it's set to public) you have the possibility to define who may connect and who not. |
Nitro2 is using 2 ip lists, one where you can define who is banned (banip.ini) and one which tells Nitro2 who is allowed (allowip.ini) to connect. |
the lists can be edited manually with a simple text editor or using the Nitro2 Firewalling commands / Nitro2 Menu |
This technic is very easy and very powerful because you can setup very complex ban/allow combinations. |
this are the rules: |
-the firewalling is active for the QuakeWorld/Quake2 and for the Forwarding Proxy -you can use wildcards (* or 255) to ban/allow different ip classes |
example: | *.*.*.* | stands for all ip addresses available (d.o.d ip) |
192.168.0.* | stands for all ip addresses from 192.168.0.0 up to 192.168.0.254 (255 is broadcasting) |
-all ip values after a wildcard are ignored |
example: | 192.168.*.5 | will be converted to 192.168.*.* |
-every ip (including wildcards) can only be in the one or in the other list not in both at the same time! -if no one is banned, the allow list is not neccessary |
1.example - allow all to connect to Nitro2 but not connects coming from 192.168.0.5 the ban list has one entry: 192.168.0.5 the allow list is empty |
2.example - only allow connects coming from 127.0.0.1 (localhost) the ban list has the following entry: *.*.*.* the allow list has one entry: 127.0.0.1 |
3.example the ban list: *.*.*.* 192.168.0.* 193.25.16.10 192.168.*.* 192.168.0.99 192.168.0.100 193.25.16.* |
this will allow all connects coming | from 192.168.1.* | - 192.168.254.* (255 is broadcasting) |
and | from 192.168.0.99 | |
and | from 192.168.0.100 | |
and | from 193.25.16.0 | - 193.25.16.9 |
and | from 193.25.16.11 | - 193.25.16.254 (255 is broadcasting) |
Connecting Nitro2 / Getting started: |
---|
|
if you use the integrated GameSpy/PingTool starter QuakeWorld/Quake2 will automatically connect the Proxy. |
else: |
-startup Nitro2 (don't forget to enable the QW/Q2 Proxy by setting QW_Proxy/Q2_PROXY = Yes in the Nitro2.ini file) -startup QuakeWorld/Quake2 -if you have started QuakeWorld/Quake2 on the same computer type in the QuakeWorld/Quake2 Console: connect 127.0.0.1:port else type in the QuakeWorld/Quake2 Console: connect ip:port (use the ip of the computer on which you started the Nitro2!) else you have to use the port specified in the Nitro2.ini use this if you started Nitro2 on the same Computer like QuakeWorld/Quake2 without changing QW_PORT/Q2_PORT in Nitro2.ini |
Nitro2 initialisation phase: |
|
i want you to know what is happening on startup of Nitro2 to avoid misunderstandings or problems. |
1.Nitro2 main initialisation |
-parse commandline parameters -if commandline parameter -f is used shutdown the Nitro2 console -load the list of banned ips (banip.ini) -load the list of allowed ips (allowip.ini) -load the Nitro2.ini or another inititilisation file set with commandline parameter -i -check all parameters set -resolve all donaimnames -resolve the host name and ip -build the broadcasting ip (used for the local serverscanner) -if a game has to be started check the games executeable and launch the game -on gamespy/pingtool startup -load the pingtool/gamespy generated config files -read the destination ip+port -patch the proxy ip+port in the config -write the configuration file to the games configfile directory -change the process priority to the highest available -startup all masterserver enabled in the initialisation file with lowest thread priority -startup the forwarding proxy if enabled in the initialisation file with highest thread priority -startup the nitro2 console thread with the lowest thread priority you can use the commandlineparameter -f to not start the Nitro2 console -startup the timecontrol thread if a proxy is enabled in the initialisation file with lowest thread priority -jump to the initialisation of the Quake2 Proxy if enabled in the initialisation file -a memory or socket allocation problem -Nitro2 console command q -an idle timelimit has been reached (set in the initialisation file) -the started games exists and exit has been set to yes in the initialisation file |
2.Quake2 Proxy inititalisation |
-set highest thread priority available -read the model names from the q2models.ini -allocate the proxy port -wait for clients -on connect -check the maximum allowed clients: to low -> block the client -check the ban/allow ip list for access rights: not allowed -> block the client -if linked connect check the version of the connecting proxy: version less than 0.44 -> block the client -jump to the q2 client initialisation -on game shutdown quit Nitro2 if exit is set to yes in the initialisation file -if the idle timelimit has been reached quit Nitro2 |
3.Quake2 Client initialisation |
-allocate the clients workspace (memory/sockets) -initialise all client variables -send welcome message to the client -use easyfont on the clients name -if client is not already linked -send dummy aliases definitions to the proxy for p_mapstart,p_mapend,p_death,p_respawn and p_flaglost -execute the clients Nitro2.cfg which should call the Nitro2_alias.cfg -else -send informations to the linked Nitro2 -count all Nitro2's in the chain -autoconnect check (used from gamespy/pingtool starter or by commandline parameter -c) -if autoconnect is enabled try to connect the defined server -if it's not enabled and the auto menu startup is not disabled using commandline parameter -m startup the menu map -when connected to a server jump to Quake2 Game/Map initialisation |
4.Quake2 Game/Map initilisation |
-detect the game mod beeing used -rocketarena2 correct the name -battleground set the teamplay correctly -ctf init the internel ctf variables -location file handling -don't load if the location file for the map if it's already loaded (if another local client is already using it) -else try to load the location file for the map from the Nitro2 executeable directory or the directory defined in the initialisation file -call the p_mapstart alias -request the status of the server to check the serversettings like hostname and dmflags until we get them -on receive of the dmflags -disable blocked features -send info to the user what is blocked on the server -disable the request loop for the server infos |
i know this is just a very incomplete description of the initialisation phase but i hope this will help you out there! |
Nitro2 aliases: |
|
aliases can be used to automize communications with your teammates aliases for Nitro2 have to be defined in the Nitro2_alias.cfg which has to be in your quake/id1 or quake2/baseq2 directory! |
alias f_status | "say_team {%l}%?" | //will be called if someone in your team uses %s |
alias f_fullstatus | "say_team {%l} %h/%a/%w%=" | //will be called if someone in your team uses %S |
alias f_mapstart | wait | //will be called at every mapstart |
alias f_mapend | wait | //will be called at every mapend |
alias f_respawn | "say_team Respawned at {%l}" | //will be called if you respawn and the .respawntrigger is turned to on |
alias f_death | "say_team Died at {%d}" | //will be called if you die and the .deathtrigger is turned to on |
alias f_took | "say_team Took %I at {%l}" | //will be called if you take an item marked for tooktrigger in the qwmodels.ini and if the .tooktrigger is set to on |
alias f_team | "say_team have %p" | //will be called when taking a powerup like quad/pent/ring and if the .autoreport is set to on |
alias p_status | "say_team {%l}%?" | //will be called if someone in your team uses %s |
alias p_fullstatus | "say_team {%l} %h/%a/%w%=" | //will be called if someone in your team uses %S |
alias p_mapstart | wait | //will be called at every mapstart |
alias p_mapend | wait | //will be called at every mapend |
alias p_respawn | "say_team Respawned at {%l}" | //will be called if you respawn and the .respawntrigger is turned to on |
alias p_death | "say_team Died at {%d}" | //will be called if you die and the .deathtrigger is turned to on |
alias p_took | "say_team Took %I at {%l}" | //will be called if you take an item marked for tooktrigger in the q2models.ini and if the .tooktrigger is set to on |
IMPORTANT: don't use %? or %= in any other messages, they are needed to adress the last sender! |
you can test what aliases are defined using the QuakeWorld/Quake2 console command alias
|
use .intellitriggers if team aliases should only get called when a teammate is in the game!
|
Controlling the Menu: |
---|
|
Nitro2 can be configured using a menu system which can be controlled using Proxy Commands.
there are 3 different ways to do this: |
1. | use the command .bindmenu to bind the menu commands to the standard cursor keys |
1. | Quake2 players can use the command .bindmenu_kp to bind the menu commands to the keypad |
3. | edit the menu.cfg, copy it in your id1 or baseq2 directory and execute it using exec menu.cfg |
you can toggle the menu on/off using the .menu command. if .smartmenu is set to on (default) the menu will also be enabled when using any other menu command. |
Command | Meaning |
.bindmenu | bind menu commands to the standard cursorkeys |
.bindmenu_kp | bind menu commands to the keypad keys |
.menu | toggle menu on/off |
.menu_up | used to move in the menu up, |
.menu_down | down, |
.menu_left | left and |
.menu_right | right. |
.menu_select | change the menu or select/change an option |
.menu_back | go one menu back |
.menu_help | gives more infos on the selected menu item |
.menu_pgup | scroll one page up |
.menu_pgdown | or one page down |
.menu_home | jump to the beginning |
.menu_end | or to the end |
.menu_ins | add an item |
.menu_del | or delete it |
.menu_proxy+ | direction: from client to server |
.menu_proxy- | direction: from server to client |
in the bottom status line of the menu has the folowing style: host[x/y]:HOSTNAME hh:mm:ss |
x | : | stands for the current proxy the menu is generated for |
y | : | number of all linked Nitro2 |
HOSTNAME | : | is the hostname of the current active proxy the menu is generated for |
hh:mm:ss | : | is the system clock of the first connected Nitro2 |
Nitro2 provides 2 commands to bind the menu commands. the first .bindmenu
binds them to the standard cursor keys the second .bindmenu_kp to your keypad!
|
Nitro2 Proxy Commands: |
---|
|
Nitro2 can be configured by typing proxy commands in the QuakeWorld/Quake2 console. proxy commands need to be send as normal chats. normally you have to type say .command to execute a proxy command, but when connected to a server or the menu of Nitro2 is activated it's possible to type the comamnd without a say: .command have a look at the Linked Proxy Handling part of this documentation for informations on how to send commands to chained proxies. example: say .connect 192.168.0.98 if you call them without parameters they will show their current state. example: say .connect say .c 192.168.0.98 is the same like say .connect 192.168.0.98 |
cid | means the ClientID, every client who is connected to a Nitro2 gets an unique id from the proxy, it can be used to address other proxy clients, get a list of the clients with their id's by using the say .listclients command! |
text | a normal text |
char | a single character |
on | enable a feature |
off | disable a feature |
ip | a valid ip address |
ip:port | a valid ip with a port or a domain name with a port (port is only needed when not standard!) |
choice | this means you can chose between different values. you will get a list of
the values when using the command without a parameter. the values are all plain text |
if parameters are seperated using / only one of them will be accepted, this are choice parameters! |
Long | Short | Parameter | Meaning |
Help: | |||
.help | .h | print the base help information | |
.helpconnect | .hc | print all connect commands | |
.helpmark | .hm | print all mark commands | |
.helpmessage | .h% | print all message commands | |
.helpmisc | .hmi | print all misc commands | |
.helpadmin | .ha | print all commands available to admins only | |
.helpfont | .hf | print the help for the easyfont feature | |
.helplist | .hl | print all list commands | |
.helpmenu | .hme | print all menu commands | |
.helpquakeworld | .hqw | print all quakeworld specific commands | |
.helpquake2 | .hq2 | print all quake2 specific commands | |
Connecting: | |||
.connect | .c | ip:port | connect the server described by ip:port, if a domain name is given Nitro2 will try to resolve it. |
.disconnect | .dc | disconnect from the current server/proxy | |
.stopconnect | .sc | stop trying to connect to a not responding server | |
.reconnect | .rc | reconnect to the last server you have been connected to | |
.stopresolve | .sr | stop resolving a donaimname | |
only Quake2: | |||
.password | .pw | text/off | use to set/clear a password if one is required to connect a server WARNING: don't use the normal password command, the problem is that the q2 client will send the new/changed password only when connecting, but it has already a connection to the proxy! |
HUD Control: | |||
.clock | .cl | on/off | turn the Nitro2 hud clock on/off |
.clockpos | .clp | line,column | move the clock to line line and column column use numerical values between 0-100 for line and column standard clock pos is set for a resolution of 320*200 to: 22,32 (down right corner!) |
.clockcolor | .clc | white/colored | sets the color for the clock |
.cchat | .cc | on/off | use this to enable/disable the centerprint messages |
.cchatpos | .ccp | line | set the start line for the centerprint messages range: line 0-80 |
.cchatcentered | .ccc | on/off | when disabled centerprint messages will be printed left aligned else centerprinted. |
.cchatlines | .ccl | nr | set the number of lines to use for centerprint messages range: nr 1-8 |
.cchattime | .cct | nr | sets the time in seconds how long a centerprint message will be displayed |
.cchatall | .cca | on/off | if enabled all incomming chats will be treated as centerprint messages REMEMBER: .cchat need to be set to on |
.cchatwrap | .ccw | column | set the column for the line wrap standard value is defined for a resolution of 320*200 to column 40 |
.clearcenter | .clrc | clear all centerprinted messages, nice for making screenshots without disturbing messages! | |
.chattime | .ct | nr | sets the time in seconds how long a chat message will be displayed |
Teamplay: | |||
.groups | .g | text | this command initializes the messagegroup handling of Nitro2. message groups can be used to organize the team communication more intelligent. everyone can belong or send to one or more groups. messages without a destination group will be displayed in every team. example: say .group a this tells the proxy that you are part of group a example: say .group ad this tells the proxy that you are part of group a and d |
.soundtrigger | .st | on/off | enable/disable the Nitro2 soundtrigger feature. use the messagecommand %# to send soundtrigger messages |
.tooktrigger | .tt | on/off | if enabled it calls a p_took alias when you take a model marked for the tooktrigger in the q2models.ini |
.deathtrigger | .dtr | on/off | if enabled Nitro2 will call the alias p_death when you die read the Nitro2 aliases section for more infos |
.respawntrigger | .rtr | on/off | if enabled Nitro2 will call the alias p_respawn when you die read the Nitro2 aliases section for more infos |
.flagtrigger | .ftr | on/off | if enabled Nitro2 will call the alias p_flaglost when you die carrying the flag (ctf) if p_flaglost is called when dying no p_death will be called at the same time! read the Nitro2 aliases section for more infos |
.intellitriggers | .itr | on/off | if enabled all teamplay triggers will only get called if teamplay is enabled and a teammate is in the game |
.teamskin | .ts | text/off | set a model/skin to be used for teammembers, use parameter off to disble it. |
.enemyskin | .es | text/off | set a model/skin to be used for enemies, use parameter off to disble it. |
.chatflash | .cf | on/off | if someone in your vicinity is talking Nitro2 flashs the player to show you who is the talker. |
.removeping | .rp | on/off | this is filtering the message beep from your own messages. |
only QuakeWorld: | |||
.autoreport | .ar | on/off | autoreport calls the f_team alias every time you take a powerup. |
.teamcolor | .tc | tc bc/off | set topcolor and bottomcolor to be used for teammembers, use parameter off to disble it. |
.enemycolor | .ec | tc bc/off | set topcolor and bottomcolor to be used for enemies, use parameter off to disble it. |
Misc: | |||
.listclients | .lc | list all Nitro2 clients with their ClientId (cid) | |
.say | .s | cid text | talk to other clients who are connected to the same Nitro2, you can talk to all
by using the ClientID 0, get a list of all Users with their ClientIDs using .listclients |
.echo | .e | on/off | when set to off no standard message when executing commands with parameters will be printed, very nice for using Nitro2 proxy commands in config files or aliases! |
.follow | .f | cid | follow a Nitro2 client to the server he is connected to. |
.observe | .o | cid | observe a Nitro2 client who is playing on a server. |
.observerstop | .os | stop observing a player. | |
.scanlocal | .sl | scan the local subnet for QuakeWorld/Quake2 servers | |
.listlocal | .ll | list all found QuakeWorld/Quake2 servers | |
.proxystate | .ps | hmmmm - not up to date in the moment! | |
.modified | .mod | on/off | when disabled the proxy will not perform a f_modified/p_modified check look at the Nitro2 Proxy Queries section for infos on this! |
.messagecommands | .mc | on/off | you can disable the parsing of messagecommands, when disabled all messagecomamnds will be send directly to the server without getting interpreted by the proxy! |
.msgcmdtoken | .mct | char | change the messagecomamnd token (standard is %) to char this is the character used in messages to indicate that the next character has to be interpreted as a messagecommand. only change this if you know what you are doing!!! |
.record | .r | text | start recording a demo using Nitro2. the demo will be recorded to the directory of Nitro2 or to the path defined by RECDIR in the Nitro2.ini! the advantages are: 1.demos are smaller when recorded using Nitro2 2.no filtereffects will be recorded 3.you can record demos on another computer than you are playing -> no disk write lag! admin status is required to record a demo! |
.easyrecord | .er | like .record but no name is needed, Nitro2 will generate a name
automatically! it is generated using the gamedir, and a number. Nitro2 will not overwrite a existing demo by accident. the second difference is that if Nitro2 is already recording a demo it will first stop recording it and than start a new one. admin status is required to record a demo! |
|
.stop | .stp | stop recording a demo admin status is required to stop a demo recording! |
|
.smartmenu | .sme | on/off | if enabled all menu keys will activate the menu else only the key bound to say .menu will |
.flooprotection | .fp | on/off | this protectes you from getting the 10 seconds penalty time for talking too much in too short time! |
.statistics | .sta | on/off | enable this to let Nitro2 analyse all deathmessages to gain frag statistics. Nitro2 is using the messages defined in the qxstats.ini file for it. this feature can cause lag effects on slow systems! use .listfrags or .autolistfrags to see the statistics results |
.listfrags | .lf | list all in the actual map gained statistics. set .statistics to on to activate Nitro2's statistic system. |
|
.listfragshelp | .lfh | show informations for all columns of the statistics. | |
.autolistfrags | .alf | if enbled Nitro2 will automatically print all statistics to the console at mapend | |
Quake2: | |||
.grenadetrail | .gt | on/off | turn the grenade smoke trail on/off |
.rockettrail | .rt | on/off | turn the rocket smoke trail on/off |
.blastertrail | .bt | on/off | turn the blaster smoke trail on/off |
.rocket2grenade | .r2g | on/off | change the rocket trail to the grenade trail this is only active when the rockettrail is not disabled with .rockettrail off |
.bloodfilter | .bf | on/off | turn the blood on/off |
.gibfilter | .gf | on/off | remove all gibs of dead players. only new gibs will be removed! |
.deadbodyfilter | .dbf | on/off | remove all bodies of dead players. only new bodies will be removed! THIS IS STILL BETA!!! |
.fovfilter | .ff | on/off | filter the fov value sent by the server this lets you use the fov value you desire! |
.blendfilter | .blf | on/off | remove all blendings. |
.kickfilter | .kf | on/off | don't get kicked back when other players hit you |
.setexplosion | .se | choice | change the normal explosions used by quake2 you can set: normal blood teleport |
.modulate | .mo | nr,nr | this is an easier version of the gl_modulate q2 console command, gl_modulate is controlling the
objects/players/maps lumination, many players are using it to see the objects/enemies easier. the trick is to set a low value before a map starts and to increase it after the map has been loaded, this way you get a better contrast between the map and the objects/players. the first nr is the modulate value to be set before the map starts, the second is the one to be set after the map has started. range: nr 0-255 |
.setneed | .sn | health,armor | set health/armor limits for %[a],%[A],%[h],%[H] and %z the defaults are : Health 50 Armor 30 |
.vidrestart | .vr | perform a vid_restart with correct setting of the gl_modulate values use this instead of vid_restart when .modulate is enabled. |
|
.wavesfilter | .wf | filter disturbing servermessage when using waves. | |
QuakeWorld: | |||
.blendfilter | .bf | on/off | filter all item/weapon pickup blend effects. |
.damagefilter | .df | on/off | filter all damage redflash effects. |
.gibfilter | .gf | on/off | remove all gibs of dead players. only new gibs will be removed! |
.deadbodyfilter | .dbf | on/off | use this to increase your frames per second, it filters all dead bodies and body parts out! if it's enabled and you see a head or a dead body - it's a dead player which has not respawned yet! |
.fovfilter | .ff | on/off | if enabled the proxy filters all fov commands coming from the server, so no mod can change your fov setting! this is useful for teamfortress! |
.polyblendfilter | .pbf | on/off | filter all polyblend effects caused by taken powerups. |
.cdtracks | .cdt | on/off | suppress CD Track change on map change. |
.weaponmodelfilter | .wmf | on/off | this filters all r_drawviewmodel settings coming from the server, if you like to play without your weapon on the screen (set r_drawviewmodel 0) and you don't want to let the server change this - try this one! its useful for playing rocketarena in gl without the weapon on screen ... |
.rocket2grenade | .r2g | on/off | this changes the Rocket Model to the Grenade Model. the Grenade Model is easier to see, faster to render and causing less trail effects. |
.setexplosion | .se | style | sets the style of rockets/grenades explosions. valid styles: normal, nail, tarbaby, wizard, knight, lava, teleport, blood, bigblood |
.filterswitches | .fs | on/off | if enabled the proxy filters the info variables w_switch and b_switch, if you get sometimes the message infostring length exceeds or if you get kicked by TeamFortress for skin change (without changing the skin) try this one! if you are using my bestweapon feature you don't need them and i don't think that TeamFortress uses them! the problem is that qw just accepts userinfo strings less than 64 bytes. some mods are using userinfo strings to store their infos there and so the proxy does, this way 64 bytes are quickly overrun. |
.muzzleflash | .mf | on/off | enables/disables the light effect when other players are shooting. |
.staticsound | .ss | on/off | this will enable/disable the static sounds of qw (ambient sounds)! if you change this setting the changes are applied after the next mapchange! (there is no other possibility!) |
.gllego | .gll | number/off | switch to 'gl lego' mode. this downscales the gl_max_size for maps but not for skins! changing this will only appear after mapchange/reconnect or sometimes after restart. (use it in Nitro2.cfg!) this depends on how much models are already cached by the glqwcl client. it will only change objects that are not already loaded. valid values for number are 2 4 8 16 32 ... the standard value of glqwcl is 256, all values less will downgrade the textures. a not valid value may force glqwcl to disable all textures! |
.bestweapon | .bw | slot imp. w1/off | this command gives you the possibilty to let the Proxy automatically choose the best weapon for you! you can use up to 5 different best weapon slots, each slot is enabled by using a impulse, which you have to assign to a slot first. when using the impulse of a slot the proxy tests the weapons assigned to the slot till it finds a weapon with enought ammo and activates it! to disable a weapon slot assign impulse 0 to it! to disable the whole best weapon feature use parameter off! be sure to use impulses that are not used in the mod you are playing!!! you can assign normal weapon impulses to slots, so there is no danger of conflicts with other impulses [w1 ...] are the weapons, they will be used in this order! they can have values between 1 (axe) and 8 (lightning bold) for example: .bw 1 7 7 5 4 3 2 1 this will assign slot 1 to impulse 7 and the weapons : rocketlauncher supernailgun nailgun supershotgun shotgun and axe when using impulse 7 the proxy will test what weapon is available and switch to it! to disable best weapon use: .bw off my preferred settings are: .bw 1 6 6 5 4 3 2 1 .bw 2 7 7 5 4 3 2 1 .bw 3 8 8 3 2 1 (i use 3 keys for attacking) |
.setweaponpriority | .swp | impulses | sets the weapon priority for the %b message command, which is reporting the best weapon you have. the default value is .swp 7 8 6 5 4 3 2 1 which will report Rocket before Shaft! if you like to report Shaft before Rocket use: .swp 8 7 6 5 4 3 2 1 |
.setneed | .sn | health,armor | set health and armor limits for %[a],%[A],%[h],%[H] and %z and cells, rockets, nails and shells limits for %b, %w and %z the defaults are : Health 50 Armor 30 Cells 10 Rockets 5 Nails 25 Shells 10 |
Administration: following commands require admin status! |
|||
.admin | .a | text | gain admin status, text has to be the Admin Password
defined in the Nitro2.ini! if no password is defined all users are automatically treated as admins. the standard admin password defined in Nitro2 is Nitro2 |
.adminpwd | .ap | text,text | change the current Nitro2 admin password, insert 2 times the same password seperated by a comma. |
.forwardingip | .fwip | ip:port | change the destination ip/port of the Nitro2 forwarding proxy, read the Forwarding Proxy section for further infos |
.public | .p | on/off | when set to on other QuakeWOrld/Quake2 users will be able to find the
proxy using the Quake2 serverscanner or the Nitro2 .scanlocal command. the proxy will also send heartbeats to the defined masterservers. |
.qwheartbeat | .qwhb | nr ip:port | change the QuakeWorld heartbeat IP:Port of number nr to ip:port. the heartbeats are used to register at a QuakeWorld masterserver edit the Nitro2.ini to set the default values for them! range: nr 1-3 |
.q2heartbeat | .q2hb | nr ip:port | like .qwheartbeat just for Quake2 |
.sendheartbeat | .shb | force Nitro2 to send heartbeats, normally heartbeats will be sent automatically all 5 minutes, or when a heartbeat ip will be changed. | |
.kick | .k | cid | kick the client with the ClientID cid |
.ban | .b | cid | ban the client with the ClientID cid, the client's ip will be added to the banip.ini and kicked! |
.saveconfig | .sc | save the current configuration to a new Nitro2.cfg an existing old Nitro2.cfg will be backuped to Nitro2.bak this feature requires that the client is local and that the Quake client has been started by the proxy! |
|
Location Marking: | |||
.mark | .m | text | mark your current location and give the mark the
name text. all marks will be automatically saved in
a location file called mapname.loc. you can tell Nitro2 what directory to use for location files by editing the Nitro2.ini! |
.showmark | .sm | show the nearest mark to you by spawning a PLASMA_EXPLOSION at the marks location. | |
.delmark | .dm | delete the nearest mark. | |
Firewalling: |
head on to the the Firewalling part in this documentation for infos! | ||
.firewall | .fw | on/off | turn the firewalling system on/off |
.listips | .lip | list all IP's in the BanIP and the AllowIP list | |
.allowip | .aip | ip | add a ip to the AllowIP list |
.banip | .bip | ip | add a ip to the BanIP list |
.deleteip | .dip | ip | remove a IP from the BanIP/AllowIP list |
.clearips | .cip | clear the BanIP and the AllowIP list Nitro2 makes a backup of the banip.ini called banip.bak and of the allowip.ini called allowip.bak |
Nitro2 - Easyfont: |
---|
|
QuakeWorld/Quake2 has various graphical characters that can be used to style your name or the messages you send to others. The problem is that the use of this characters is not as simple as it should be! At this point Nitro2 gives you simple font commands to make it easier for you. You can use this font commands in your name, in locationnames (see .mark), in self-defined names for weapons/powerups/armors (in qxmodels.ini) and finally in all say/say_team messages! |
#character | this will colour the character (only useful for names because messages are colored by default in QuakeWorld/Quake2 example: name #Niew#i (typed in the console this will set the name Niewi with a colored 'N' and 'i'! this feature is automatically disabled in Quake2-RocketArena2 because it causes troubles if you create a new team! |
@xyy | add a hex code to your chat messages, yy must be a hexadezimal value in 2 digits and lowercase example: @x7e this following values will not be accepted because of protocol problems: @x00, @x0d, 0x7f, @xff |
@( | the left end of the regulators used in the quake options |
@= | the middle of the regulators used in the quake options |
@) | the right end of the regulators used in the quake options |
@a | the controller of the regulator |
@< | the left end of the underline |
@- | the middle of the underline |
@> | the left end of the underline |
@. | a colored middle dot |
@, | a white middle dot (only in names!) |
@[ | a big colored [ |
@] | a big colored ] |
@_ | a space sign, use it instead of the normal space between graphical characters |
@b | a filled colored block |
@c | a filled colored arrow (pointing to the right!) |
@\ | this can be used to hide your name in messages! all in the message before the @\ will be deleted! the effect will be there even when clients don't use a proxy! THIS IS ONLY WORKING IN SAY_TEAM MESSAGES BECAUSE IT CAN BE USED TO SEND MESSAGES WITH FAKE NAMES |
@R @G @Y @B | insert a colored L.E.D. you have to use a gfx.wad with defined Ocrana L.E.D.s |
name @[#N#F@]@,#Nie#wi@, gives you my normal Quake2 nick name! |
Nitro2 - Message Commands: |
---|
|
Message Commands can be used in say or in say_team commands to tell your teammates
what your current state is, all message commands can be mixed in any way!
|
%% | this will pass a % to the server. this is useful if you want to use serverside messagecommands |
%[a] | reports armor in A:XX (qxmodels.ini short name) style and will add braces when it's lower than the limit set with .setneed |
%[A] | reports armor in A:XX (qxmodels.ini long name) style and will add braces when it's lower than the limit set with .setneed |
%a | your current Armorvalue |
%A | your current Armortype |
%d | last dying Location |
%e | the number of enemies in your vicinity (can be silenced by server) |
%E | the number of enemies in your vicinity at last dying time |
%f | the name of the location you are pointing to, can be used for messages like attacking ra from hall |
%[h] | reports health in H:XX style and will add braces when it's lower than the limit set with .setneed |
%[H] | reports health in Health:XX style and will add braces when it's lower than the limit set with .setneed |
%h | your current Healthvalue |
%i | reports the Item name set in the qxmodels.ini for the last took item (short name) |
%I | reports the Item name set in the qxmodels.ini for the last took item (long name) |
%j | reports the last took Item that triggered the tooktrigger |
%J | reports the name of the last joined player |
%l | your current Location |
%L | report your last dying locations up to 5 seconds after dying else your current Location |
%o | the number of teammates in your vicinity |
%O | the number of teammates in your vicinity at last dying time |
%p | the powerups you currently have (quad/pent/ring/flag) |
%q | the powerups of the last seen enemies (quad/pent/ring/flag) |
%t | reports the short name of the object you are pointing to (like %x at %y) |
%T | reports the long name of the object you are pointing to (like %X at %y) |
%w | the current active Weapon/Mun using the short name defined in qxmodels.ini |
%W | the current active Weapon/Mun using the long name defined in qxmodels.ini |
%x | the short name of the object you are pointing to you can edit the qxmodel.ini to define which objects are pointable and which not! players are always pointable in this release, with powerups and in teamfortress with class |
%X | the long name of the object you are pointing to |
%y | the name of the place of the object you are pointing to |
%Y | this prints the Quake internal model name of the object you are pointing to, you can use this to add models to your qxmodels.ini |
%u | the following text will be printed in a new line. using this
you can create messages that can use up to 4 lines of text with one say. your name will be printed before every new line. |
%z | reports the things you need (limits set with .setneed) if you have low health and low armor it will response with Health/Armor if you dont need anything it will response with Nothing this feature will be advanced (with weapons) in the next releases... |
only QuakeWorld: | |
%b | inserts your best weapon + ammo |
%c | inserts the name of your current teamfortress class |
only Quake2: | |
%% | this will pass a % to the server. this is useful if you want to use serverside messagecommands |
%c | inserts the name of your current CTF tech if you don't have a tech nothong will be inserted |
%C | inserts the name of the CTF tech you had when dying if you didn't had a tech when dying nothing will be inserted |
%P | current active powerup with remaintime (this is no poweruptimer!) |
%U | acts like %u but in say_team messages no name will be printed before the new line! |
%@ | this command indicates that the message is only sent to one or more groups use the .group command to tell the proxy what group(s) you belong to groups are defined by single characters, you can belong to more than one group at the same time it's always the best way to place groups at the end of messages! |
%# | this is the soundtrigger message command, you can use it to play other sounds for
messages instead of the normal message beep or to play only a sound without a message! soundtrigger can be mixed with all kinds of messagecommands like groups or vicinity (%n) they can also be used with the centerprint message system (%.) it's always the best way to place soundtriggers at the end of messages! own created sounds must be stored in the quake/id1/sound or quake2/baseq2/sound directory they can than be played using %#soundname add quotes to play sounds with spaces in them %#"soundname", all spaces will be changed to underlines _ i recommend you to use QuakeWorld/Quake2 sounds from monsters for example, because anyone has them! say_team %need help at %l %#misc/menu3.wav %@d this soundtrigger will only be send to teammembers belonging to group d example: say_team %#%llost.wav |
%. | send a centerprint message, have a look at the .cchat commands on how to change the way centerprint messages will be displayed on your screen |
%n | only send this message to team members in your vicinity |
%N | this will hide your own message (it will not be printed on your screen) |
%s | ask your teammates for their current status, all teammates using Nitro2
will answer this request by executing an alias called p_status. you can define this alias yourself in the Nitro2_alias.cfg! |
%S | like %s but it calls the p_fullstatus alias |
Linked Proxy Handling: |
---|
|
you can easily link Nitro2 Proxies by connecting from one to the other using the Nitro2 connect command .connect ip[:port] on connection both Proxies will detect the other one and tell you that a link has been established between both Proxies. |
1. | you can hand commands to the second proxy by adding '.' for every Proxy to bypass a Nitro2 command,
you have linked 3 nitros and want to tell the second proxy to disconnect from the third use ..disconnect the first Proxy bypasses the command and the second will execute it you have linked 3 nitros and want to tell the third proxy to connect to a server or proxy use ...connect ip[:port] the first two Proxies bypasses the command and the third will execute it |
|
2. | you can always address the last connected proxy by using a ',' instead of a '.' as command indicator example1: you have linked 10 nitros and want to tell the last proxy to connect to a server or proxy use ,connect ip[:port] the first nine Proxies bypass the command and the last executes it |
Disable Nitro2 features from Quake Servers: |
---|
|
Nitro2 is offering features which may be considered as cheating by a few guys out there. to protect Nitro2 from being banned i have added a possibility to disable features by the server admin. like all other Proxies Nitro2 is using the fpd serverinfo variable to let you tell Nitro2 what features should be blocked! |
Value | Disables |
4 | if set Nitro2 will only play soundtrigger sounds less than 15 seconds (powerup timers cheat) |
32 | silence %e in teammessages |
128 | disables the pointing features of Nitro2 (%x %X %y %Y %t %T) |
Value | Disables |
16777216 | disable the FPS boosting features gib/body/blood filter |
33554432 | disable weapon modifications like other explosions or removement of the rockets/grenades/blaster trails |
67108864 | silence the message commands %x %X %y %Y %t %T %e |
134217728 | disable skin overriding (.enemyskin & .teamskin) |
268435456 | disable filters like fov/kick/blend |
536870912 | enable the secure modified mode (look at the Nitro2 Proxy Queries for info's on p_modified) when set the first p_modified on the server will cause a vid_restart to be sure you are playing with the models which are getting checked. the next p_modified commands (in the actual map) will not do a vid_restart again! After the first p_modified command Nitro2 is checking the client for new vid_restarts, if someone is doing it Nitro2 will tell all on the server. i've added a dmflag for this because a vid_restart in a running game is not very funny! this way it will only be done on servers with the dmflag set, and it only happens 1 time per map! |
you can disable a feature by adding it's numerical value to the server dmflags if you dmflags are set to 16 and you want to disable all this features set your dmflags to 520093712 |
Nitro2 Proxy Queries: |
---|
|
to execute a query type it into the console when connected to a server! |
f_modified | check all modells/waves that can be used for cheating modells which fail the crc check or can't be found by the proxy are listed (up to 3!) with a remark (crc) or (not found)! you have to start QuakeWorld using the proxy else f_modified will not calculate any crc's! the proxy checks the executed QuakeWorld.exe, if the exe is unknown, no crc will be generated! have a look at the docs/qwmodified.txt to see what files are getting checked by Nitro2. you can disable f_modified using the command .modified off (the proxy will answere with 'modified disabled') if you call f_modified a standard check will be started, which checks all models/sounds but no maps. if more than 1 Nitro2 user is on the server both have to print the same crc independent from the used operating system! the crc is always the same for the same server with the same hostname and the same fpd! the value is not simply added, it's a complex formula which is used by Nitro2. this protects for people who try to fake the f_modified answere! the answere will be marked with and + sign to show that it's changed. f_modified +1 |
f_modified map | like f_modified but only checks the current map because i can not download all maps and add their crc to the proxy there are 2 possibilities: 1. the map is known to the proxy (standard qw maps) 2. the map is unknown to the proxy if the map is known to the proxy and it failes the crc check Nitro2 will print : map failed crc check it's only possible to control if someone is cheating when more than one Nitro2 user is on the server and all crc's are the same! |
f_modified all | like f_modified, check all standard modells/sounds + actual map |
f_way | force all Nitro2 to respond with their connection information in "ClientIP:ClientPort -> localClientPort -> localServerPort -> ServerIP:ServerPort" style. where ClientIP:ClientPort is the ip+port of the connected client localClientPort is the Proxy port on which the clients connects localServerPort is the Proxy Port used to send the data to the server ServerIP:ServerPort is the ip+port of the connected server/proxy the last SeverIP:ServerPort displayed has to be the server the game is running on! started the QuakeWorld Client on 192.168.0.98 started Nitro2 on 192.168.0.98:27500 started the QuakeWorld Server on 192.168.0.98:27501 Niewi: 127.0.0.1:27001 -> 27500 -> 1156 -> 127.0.0.1:27501 [ok] started the QuakeWorld Client on 192.168.0.98 started the 1. Nitro2 on 192.168.0.98:27500 started the 2. Nitro2 on 192.168.0.99:27500 started the QuakeWorld Server on 192.168.0.99:27501 Niewi: 127.0.0.1:27001 -> 27500 -> 1086 -> 192.168.0.99:27500 [ok] Niewi: 192.168.0.98:1086 -> 27500 -> 1155 -> 192.168.0.99:27501 if not the client is using another proxy/bot/fpd-filter. |
f_version | all Nitro2 will answere this query with their version number, the operating system and a crc calculated over the whole proxy, the crc has to be identic on same operating systems excluding linux libc5/libc6 because the proxy don't shows the lib being used ... |
p_modified | check all modells/waves/skins that can be used for cheating modells which fail the crc check or can't be found by the proxy are listed (up to 3!) with a remark (crc) or (not found)! you have to start Quake2 using the proxy else p_modified will not calculate any crc's! the proxy checks the executed Quake2.exe, if the exe is unknown, no crc will be generated! have a look at the q2modified.txt to see what files are checked by Nitro2. you can disable p_modified using the command .modified off (the proxy will answere with 'modified disabled') if you call p_modified a standard check will be started, which checks all models/sounds but no maps or skins. if someone change this settings you have to restart the map because Nitro2 only requests them on mapstart if more than 1 Nitro2 user is on the server both have to print the same crc independent from the used operating system! the crc is always the same for the same server with the same hostname and the same dmflags! the value is not simply added, it's a complex formula which is used by Nitro2. this protects for people who try to fake the p_modified answere! the answere will be marked with and + sign to show that it's changed. p_modified +1 |
p_modified ctf | like p_modified (standard check) but adds ctf models to the check, look in the q2modified.txt to see what ctf files are getting checked |
p_modified ra2 | like p_modified (standard check) but adds ra2 models to the check, look in the q2modified.txt to see what ra2 files are getting checked |
p_modified map | like p_modified but only checks the current map
because i can not download all maps and add their crc to the proxy there are 2 possibilities: 1. the map is known to the proxy (standard q2, rocketarena2 or ctf map) 2. the map is unknown to the proxy if the map is known to the proxy and it failes the crc check Nitro2 will print : map failed crc check |
p_modified skins | like p_modified but only checks the standard skins |
p_modified all | like p_modified, check all standard modells/sounds + aktual map + standard skins |
p_way | force all Nitro2 to respond with their connection information in "ClientIP:ClientPort -> localClientPort -> localServerPort -> ServerIP:ServerPort" style. where ClientIP:ClientPort is the ip+port of the connected client localClientPort is the Proxy port on which the clients connects localServerPort is the Proxy Port used to send the data to the server ServerIP:ServerPort is the ip+port of the connected server/proxy the last SeverIP:ServerPort displayed has to be the server the game is running on! started the Quake2 Client on 192.168.0.98 started Nitro2 on 192.168.0.98:27910 started the Quake2 Server on 192.168.0.98:27911 Niewi: 127.0.0.1:27901 -> 27910 -> 1156 -> 127.0.0.1:27911 [ok] started the Quake2 Client on 192.168.0.98 started the 1. Nitro2 on 192.168.0.98:27910 started the 2. Nitro2 on 192.168.0.99:27910 started the Quake2 Server on 192.168.0.99:27911 Niewi: 127.0.0.1:27901 -> 27910 -> 1086 -> 192.168.0.99:27910 [ok] Niewi: 192.168.0.98:1086 -> 27910 -> 1155 -> 192.168.0.99:27911 if not the client is using another proxy/bot/dmflags-filter. |
p_version | all Nitro2 will answere this query with their version number, the operating system and a crc calculated over the whole proxy, the crc has to be identic on same operating systems excluding linux libc5/libc6 because the proxy don't shows the lib being used ... |
p_dmflags | this forces all Nitro2 to reponse with the dmflags settings it is working with and a crc
which is calculated over server specific setting. all Nitro2 have to report the same dmflags and the same crc if not someone is using an dmflags filter! the crc calculation changed with version 0.47, the result can not be compared to older Nitro2 versions! |
REMEMBER: only one query in 10 seconds will be answered (floodprotection)!
|
How to add new Model names to Nitro2: |
---|
|
You can teach Nitro2 new models, that means if you play a mod with other weapons/armors than the normal ones used in Quake you can tell Nitro2 the names of the models and what names Nitro2 should use for them. You can define a long and a short name for the Models. have a look at the Nitro2 message commands section for further details which message commands use long/short names. open the qxmodels.ini file and add a new line to it, up to 255 own models can be defined. the qxmodels.ini files have a documentation in them! |
Disclaimer: |
|
I assume no responsibility for anything of any sort in any way, shape,
or form, now, then, henceforeward, in this life (or the next several) for any screw-ups or even minor inconveniences this Proxy causes you, your family, your relatives, friends, ancestors, associates, employers, pets, neighbors, lovers, deities (major AND minor), nor any other person - living, dead, or undead - that you have or will ever have any contact with in even the slightest form. This Proxy has been tested and tested ad infinitum, so it shouldn't mess with your computer or anything else remotely associated with it. But if it DOES, then too damn bad. Don't come cryin' to me. It must be something YOU did! |
Copyright / Permissions: |
|
Nitro2 is Copyright 1999 Ralf Niebecker. You MAY distribute Nitro2, provided you include this file with no modifications, on the internet without charging money for it. If you wish to publish it you have to ask me first! |