There are currently 4 players online.
 
Warsow

 
 

Mapping

1. Installing GTKRadiant back to top


Notice: It is highly recommended to use NetRadiant instead of GTKRadiant for mapping for Warsow
GTKRadiant 1.5.0 Final has been released, with Warsow support out of the box. This means no more 5 page installation instructions.

1.1. Installing on Windows: back to top


Download the package here http://zerowing.idsoftware.com/files/radiant/GtkRadiant-1.5.0.msi and install it. Note that this is a .msi file and not an .exe, if you can't run the file for whatever reason, you need Windows Installer 2.0 for NT4/2000 or 9x/Me.

1.2. Installing on Linux: back to top


There are some precompiled GTKRadiant packages here http://kadaverjack.planetnexuiz.de/radiant/. These are NOT official builds provided by id software, and are not guaranteed to work. Give them a shot, and if they work, fantastic.
If they don't work, or if you want to ensure maximum computability between Radiant and your system, you can compile GTKRadiant yourself. I highly recommend using a distro of Linux with a package manager worth it's salt, though, because that makes installing things much easier.
Before you start, make sure and download the Warsow SDK and copy the file editortextures.pk3 to /basewsw (it can either be the 'real' warsow directory, or in ~/.warsow/basewsw if you're running it multiuser). Now you're ready to go.
First, you need subversion installed. If you don't know how to install it, consult your distro's documentation or ask on their forums. Once you have it installed, go to a console and type the following two commands to download the source to your computer:
svn checkout https://zerowing.idsoftware.com/svn/radiant/GtkRadiant/trunk/ ./GtkRadiant
svn checkout https://zerowing.idsoftware.com/svn/radiant.gamepacks/WarsowPack/trunk/ ./GtkRadiant/games/WarsowPack
Then, for further instructions, consult this document https://zerowing.idsoftware.com/svn/radiant/GtkRadiant/trunk/COMPILING, which can also be found where subversion put the files it downloaded. Download and install the libraries that it asks you for, making sure you're getting libraries that include development headers. For example, in Debian, dev librarys have a -dev suffix.
Once you've got what you need, go to the directory you extracted the source to and type:
scons SETUP=0
If you're missing a library, usually the error message that you get when compiling will give you a hint as to which development library you're missing. This is the stage where you wish you had a distro with a good package manager, because you probably will NOT get every last package right on your first try and will have to look around for the correct packages.
Once it compiles without error, type in:
python ./install.py
A working GTKRadiant should be in the ./install directory. Run it once from ./install, to set up new shaders list (the one that comes with it is for 0.21), and then you can copy it to /usr/local/share or /opt or wherever. Once you do that, however, you need to help radiant and q3map2 recognize the shaders themselves by creating a symbolic link to shaders.txt where radiant and the compiler can find it. If I have radiant installed to /opt/radiant and warsow installed to /usr/local/games/warsow, this is how I would do that:
cd /usr/local/games/warsow/basewsw
sudo mkdir scripts
sudo cd scripts
sudo ln -s /opt/radiant/warsow.game/basewsw/default_shaderlist.txt ./shaderlist.txt
This step is pretty important. Without it, your shaders will screw up and you'll run into all sorts of lovely anomalies like clip brushes blocking vis and the like.
You're done!
  • A note about mesa
  • There are actually a couple of GL libraries available to you. Make sure that you're using the ones that come with your graphics driver, and NOT mesa. Mesa will make radiant's 3D view very very slow. If you're using debian + nvidia, the package you're looking for is nvidia-glx-dev.
  • Another note
  • Under GNU/Linux, if your textures are placed in your local warsow directory(/home/user/.warsow/basewsw/textures) you will have problems with q3map/qfmap texture scaling and aligning since it can't find the textures.

1.3. Entities.def file back to top


You can find the latest version of the entities.def file in this link
https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/warsow.game/basewsw

2. Installing QuArK back to top


QuArK officially supports Warsow since version 6.6.0 beta 1. Visit QuArK homepagehttp://quark.sourceforge.net/ for downloading it
  • Quick note on setting up Quark for Warsow:
- In the "Games" menu, open the "Configuration" window and select "Warsow"

- In "Directory of Warsow" click on the small button at the right and find the directory where you installed Warsow.

- In "Default directory of build programs" click on the small button at the right and locate the directory where you installed q3map2.

- You are done
Big thanks to imhotep for creating the old tutorial which got outdated when QuArK added official Warsow support.

3. Q3Map2 compile settings and Warsow back to top


Notice: It is highly recommended to use NetRadiant's version of q3map2, which produces a highly improved deluxemapping. NetRadiant also comes with the proper settings in Warsow's game default build menu
These are the recommended compile settings for Warsow maps:

3.0.1. For test builds: back to top


The best and most update build commads can be found at https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/warsow.game

3.0.2. For final build: back to top


The best and most update build commads can be found at https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/warsow.game

3.0.3. GTKRadiant build menu download back to top


We've made a GTKRadiant build menu with these settings so you don't need to edit the menu yourself. This downloadable menu also adds options to export your map to ASE, recompile only the map entities, and more. You can download it here [The best and most update build commads can be found at https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/warsow.game

To install it do this:
go to %APPDATA%\RadiantSettings\1.5.0\warsow.game (GNU/Linux equivalent: /home/user/.radiant/1.5.0/warsow.game/) and replace the file build_menu.xml with the one inside the downloaded zip.

3.0.4. Information on q3map2 compile switches back to top


Q3map2 wiki http://en.wikibooks.org/wiki/Q3Map2

http://en.wikibooks.org/wiki/Q3Map2/BSP
http://en.wikibooks.org/wiki/Q3Map2/VIS
http://en.wikibooks.org/wiki/Q3Map2/Light
Q3map2 shader manual
http://q3map2.everyonelookbusy.net/shader_manual
Qfusion shader manual
http://www.warsow.net/wiki/index.php?title=Shader_manual

4. How to use FBSP extra features back to top


When compiling your map using q3map2 with the switch -game qfusion it exports in FBSP format, which adds 2 new features. One is simply higher quality lightmaps, which they are just there and there's nothing you need to do with it, and the second is lightstyles.

4.1. Using lightstyles back to top


Lightstyles are a set of different styles on how light entities can behave, allowing them
to pulse, flick, etc.
Setting up a light with a lightstyle is as simple as creating a new field inside any light entity called "style", and feed with a number between 1 and 11 (0 is standard lighting).
These are the actual effect names for them:
  1. FLICKER (first variety)
  2. SLOW STRONG PULSE
  3. CANDLE (first variety)
  4. FAST STROBE
  5. GENTLE PULSE 1
  6. FLICKER (second variety)
  7. CANDLE (second variety)
  8. CANDLE (third variety)
  9. SLOW STROBE (fourth variety)
  10. FLUORESCENT FLICKER
  11. SLOW PULSE NOT FADE TO BLACK

5. How to create models with Netradiant back to top


Guide step by step with screens
  1. Run your Netradiant and open new file. http://padpork.warsow-esport.net/files/anthy/1.jpg
  2. Create something nice at your Netradian. Here is an example of woodden box. http://padpork.warsow-esport.net/files/anthy/2.jpg
  3. Make a hollow box, texture it with "caulk", and make sure your model (wooden box) is inside of this box ( i changed a bit one wall to show u whats inside !). http://padpork.warsow-esport.net/files/anthy/3.jpg
  4. Put insie of the box "info_player_start". http://padpork.warsow-esport.net/files/anthy/4.jpg
  5. Take care of your position of your brushwork! Origin of the .ase model is always at x=0 y=0 z=0. Then compile it with Q3map2:(ToAse); After compile process, u can find your model file (.ase) at basewsw/maps. http://padpork.warsow-esport.net/files/anthy/5.jpg
  6. Now open your map project, click somewhere with right mouse button and choose misc -> misc_model. http://padpork.warsow-esport.net/files/anthy/6.jpg
  7. Find your model and click open :) (a wooden box !); Then open Entities: mark the forcemeta so they can use materials and cast light and for solid, so your box gonna be solid :D. [http://padpork.warsow-esport.net/files/anthy/8.jpg
  8. Now compile your map and run wsw ! http://padpork.warsow-esport.net/files/anthy/wsw00045.jpg

6. How to add models as solid static meshes back to top


Summing up: If you want the model to act as map brushes set misc_model entity spawnflags to 6. Q3map2 accepts md3, lwo, ase and 3ds formats as misc_models.
IMPORTANT: Models, even if solid, do not block visibility. Never use models to make your walls unless they have a good caulk wall behind.
Spawnflag 1
Toggles the model casting shadows on the map surfaces.
Spawnflag 2
Sets the autoclipping spawnflag, automatically assigning q3map_clipmodel to any shaders used by the model.
Use of Q3Map2 autoclipping for models is only recommended for large models with relatively few triangles in their mesh (i.e. terrain). The Q3Map2 autoclipping algorithm is a bit of a hack, and can hurt in-game performance (as well as produce erroneous clipping results) when used on small, dense models.
Spawnflag 4
Sets the forcemeta spawnflag, automatically adding q3map_forcemeta to any shaders used by the model (which, in turn, allows the model to become lightmapped).

This, effectively, is the "lightmapped model" spawnflag.
Spawnflag 6
Spawnflag math allows autoclipping and autolightmapping to be combined into one spawnflag.

7. How to create envshots and use cubemaps. back to top


In Warsow you can capture a envshot (a cubemap shot) of your map at any moment by loading up the map and typing at the console "envshot <name> <size>". Size is the size of the texture images to be generated, being it a power of 2 value (2, 4, 8, 16, 32, etc). Cubemaps can be used for quick reflections and sky boxes.
Cubemap reflections aren't perfect reflection matches, but they render at very hight speed, not like a real reflection does.
This simple map has examples of cubemaps used as skyshot and water reflection http://jal.quakedev.com/stuff/maptests/jd2q3test.pk3.
Here are a pair of examples of their use in a shader:
  • cubemapped skybox
  • textures/cubemaps/sky_cube03
    {
    surfaceparm noimpact
    surfaceparm nolightmap
    q3map_sun 1 1 0.5 85 220 40
    q3map_surfacelight 80
    q3map_lightimage env/cube03_py.tga
    qer_editorimage env/cube03_ny.tga
    skyparms env/cube03 512 -
    }
  • Cubemapped water
  • textures/wtest1/wtest1_water
    {
    qer_editorimage env/cube03_ny.tga
    q3map_globaltexture
    qer_trans .75
    surfaceparm trans
    surfaceparm nonsolid
    surfaceparm water
    surfaceparm nolightmap
    q3map_surfacelight 25
    cull none
    tesssize 64
    deformVertexes wave 64 sin 1 1 0.25 0.6
    //for 3d cards supporting cubemaps
    if textureCubeMap
    {
    cubemap env/wtest1water
    blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
    alphaGen constant 0.4 //alpha graduated blend
    tcMod turb 0.6 0.5 0.5 0.5 //texture 'waves'
    }
    endif
    //this is the first water pass from the wtest1_water shader
    {
    map textures/wtest1/water2.tga
    blendFunc GL_dst_color GL_one
    rgbgen identity
    tcmod scale .25 .25
    tcmod scroll .02 .01
    }
    //the second water pass from the old wtest1_water shader
    if ! textureCubeMap //for 3d cards not supporting cubemaps
    {
    map textures/wtest1/water1.tga
    blendFunc GL_dst_color GL_one
    tcmod scale -.25 -.25
    tcmod scroll .02 .02
    }
    endif
    //the last pass from wtest1_water shader
    {
    map $lightmap
    blendFunc GL_dst_color GL_zero
    rgbgen identity
    }
    }
    Note how the cubemap passes are made inside "if textureCubeMap" conditions, this is for very old cards, which don't support cubemaps. A good practice is to add a second option for those cards, like this: "if ! textureCubeMap". This means if *not* texture cubemap support.

8. How to create dynamic sky portals back to top


Warsow can display Q3map2 skyportals, but it also has support for dynamic skyportals by doing the following:
  • Create a room in your map to be the skyportal. This room must not be connected to any other part of the map.
  • Inside the "sky room" create an entity "misc_skyportal" or "props_skyportal" (they are the same) to be the position and angles where the skyportal camera will be.
  • Optional misc_skyportal parameters "fov": If you want to enforce a stronger or weaker fov than the player view, set it here. If not set, it will use the user fov and fit the rest of the map.
  • Optional misc_skyportal parameters "scale": If specified, defines the world/skyportal volume ratio. It is used to shift the skyportal entity in the direction opposite to the player to create a more realistic feel of the environment. One must use really high values for this parameter for the effect to look good. The shift is defined by formula:
  • shift = (player's_origin - map_centre) / scale
  • Optional misc_skyportal parameters "noents": If set to 1 the entities in the skyroom will be skept at drawing. It is faster, but you can't use them to create movement.
  • Notice that you can use entities in this skyportal (as long as you don't enable noents, of course), so you can put the whole thing into a func_rotating or add a giant pendulum on the sky.
    Note: On the parts of the map which will show the skyportal, keep using a normal sky shader to cast the light. It will be skept from drawing, so it doesn't matter how it looks, but it will be used for compiling the sun and surface lights. On the skyroom you can use any skyshader and it will be the one drawn ingame, and used to light the room where the skyportal entity is. It, of course, doesn't need to be the same sky shader at both, it doesn't either need to be a different one.

9. How to create Sun entity back to top


  • Create a light entity anywhere in the map
  • Create a target_position
  • Link the light to the target. It will determine the sun direction.
  • Select the light entity. Open the entities panel.
  • Add the key "_sun 1"
  • Set it a light intensity ("light" key) and color (menu entities->select color).
If the shadows produced seem too pixelated you can smooth them adding the key "_samples <value>" to the light entity. The higher value the smoother (8 is usually a good enough value). Maps can use multiple suns, be it by adding multiple suns in the shader, as entities or both.
If the sky shader has a sun defined and you want to disable it, select the worldspawn entity and add the key: "_noshadersun 1"
Sun light entities are incompatible with _minlight. If you use _minlight the sun entity will be ignored.

10. How to create per pixel lit materials. back to top


  • to do

11. How to create distortion materials. back to top


  • to do

12. Foliage back to top


This is the ability to automatically place detail models directly onto map surfaces (most likely terrain) in an algorithmic fashion. They are designed primarily for foliage, hence the name, but can be used for adding pebbles or rocks scattered randomly around terrain. Foliage is rendered instanced on the GPU, so the overall performance impact should be minimal.
When creating foliage, there are 3 things to set up: the foliage model, the foliage model's shader, and changes to any existing shader, i.e. the terrain texture blending shader, where foliage is desired on.

12.1. Adding foliage to existing shaders back to top


There is a new shader directive 'q3map_foliage' that specifies how q3map2 applies foliage to a surface. It takes this form:
  • Foliage shader
  • q3map_foliage <model> <scale> <density> <odds> <use inverse alpha>
    q3map_foliage models/foliage/grass_5.md3 1.0 16 0.025 0
model
models/foliage/grass_5.md3
scale: 1.0
This is normal size, 0.5 would be half size, 2.0 would be double
density: T16 units
This is the smallest chunk Q3Map will divide a surface up into before it tries to place a foliage instance.
odds: 0.025
This means that a random 2.5% of the potential spots for foliage will be placed. Typically you want to use small values for this; otherwise you will end up with ridiculously high polygon counts.
inverse alpha: 0
This means to use the straight vertex alpha as a scaling factor against the odds of appearing. This is so that terrain shaders with multiple blending layers can have different foliage on each style and have them fade/blend properly together.

If you have brush on terrain0 and grass on terrain1, then the blend shader would have two q3map_foliage directives like this:
  • blended terrain foliage shader
  • q3map_foliage models/foliage/brush.md3 1.0 16 0.025 1
    q3map_foliage models/foliage/grass_5.md3 1.0 16 0.025 0

Where the higher-numbered terrain layer/shader uses normal vertex alpha to modulate the odds-of-occurring and the lower-numbered layer uses inverse alpha.

12.2. Creating a foliage model back to top


Foliage models should be kept simple and small. Since they're entirely decorative and non-solid, you should avoid making a foliage model that looks as if it could block the player.
For best results, make your models in your modeling application as a single object (multiple objects will slow down rendering) with a single texture/shader, and try to keep the polygon count as low as possible.
This is how the foliage model shader should look like:
  • models/foliage/grass_5
  • {
    surfaceparm trans
    surfaceparm pointlight
    cull disable
    {
    map models/foliage/grass_tan.tga
    alphaFunc GE128
    rgbGen exactVertex
    alphaGen vertex
    }
    }

13. How to find texture/shader from map you have back to top


Since 0.5 there is a command "fs_search" that searches for files that match the given pattern in pak files. (Example: fs_search textures/*.jpg - that will show you all jpg textures)

14. How to create bot navigation files back to top


This mess needs to be cleaned!.

- Start : Load your map with devmap. Join and type in the console: "makenodes" to create a new file from scratch (will delete the current nav file at saving, if any) or "editnodes" to modify the currently loaded nodes.
- Walk around your map dropping nodes: As you walk, the game will be dropping navigation nodes. These nodes are used by the bots to move. Each time a node is dropped the code tries to determine what type of movement is required to move from the previous node to the new one, and it's guess is printed in the chat screen.
This only applies to 'normal' movements, other movements like func_plats, teleporters and jumpads aren't guessed, but directly created by the code, so when going through them it will always be print as LINK_INVALID.
Also, LINK_JUMP will never be print, they are found before saving by checking all the nodes together.
The only LINK_INVALID you have to worry about is when turning around a corner, if one node doesn't see the other, and there isn't a third node so the bot can use it as union, the bot will probably never choose that path. In this situation you can force a new node to be dropped by typing in the console "addnode". The node will be dropped right at your current position.
For midair maps, which doesn't use any item, we need to add goals so the bots find some place to go. We use misc_botroam entities for this purpose. They can also be dropped from the console by typing "addbotroam". NOTE: Our botroams don't act the same as Q3 bot roams. Items, even the less interesting one, will always have priority over a bot roam for us, so bot roams will be ignored as long as the bot finds any reachable item to go for.
- Save the nav file: Once you are done walking around and you don't see any more "Dropped node" prints, but only links prints, you can save the navigation file by typing in the console: "savenodes". The code will find any possible link between all the nodes, cathegorize it, and save it into a file.
- Review : With the saved navigation file, you can, if you want to review the links, type in the console "showplinks" (NOTE: see EDIT2). This will show lines from the closer node to you, to each node linked from it. If you go walking around you will see the possibilities to move from each place. Type "showplinks" again to disable it.
- You can callvote addbots now
P.S: Don't try to force the bots to follow a path by giving them few options. That was ok with some Q2 bots which used a similar system for dropping the nodes, but their pathing algorithms weren't even similar to Warsow's one. Just make sure all the map has nodes and let the bots do their own decissions.
EDIT
These are commands for bot debugging (to use after the nav file has been saved):
- botdebug : enables/disables debugging mode. It's a toggle command. Without it, the following commands don't work.
- bot_showlrgoal : it's a cvar. When set to 1, and botdebug enabled, if you are chasecamming a bot, it will print you his "Long Range" goal decissions (meaning, what item is going to search next).
- bot_showpath : a cvar. When set to 1, and botdebug enabled, if you are chasecamming a bot it will draw the path the bot is following.
- bot_showsrgoal and bot_showcombat are another two cvars, they served a purpose in a past, but they are quite useless now.
Since version 0.3 the command showplinks has been removed. The following commands were added:
- showclosestnode : shows closest node always, and if links are compiled (nav is saved) also the plinks for the closest node. The command can be enabled during dropping nodes mode.
- deleteclosestnode : deletes closest node
- botnotarget : bots don't attack you
These are more commands for bot debugging:
- botdebug : enables/disables debugging mode. It's a toggle command.
- bot_showlrgoal : it's a cvar. When set to 1, and sv botdebug enabled, if you are chasecamming a bot, it will print you his "Long Range" goal decissions (meaning, what item is going to search next).
- bot_showpath : a cvar. When set to 1, and sv botdebug enabled, if you are chasecamming a bot it will draw the path the bot is following.
- bot_showsrgoal and bot_showcombat are another two cvars, they served a purpose in a past, but they are quite useless now.

15. Terrains in Warsow using EasyGen back to top


This is a version of EasyGenhttp://jal.quakedev.com/stuff/EasygenQF_c142.zip including a QFusion preset so it generates the blending shaders with bumpmapped materials. To use it follow the instructions in the included EasyGen tutorials and select the QFusion preset when exporting. A small fix has to be done to the shader files when exporting. There's a 2 lines readme (by me. Warning: Must read or won't work) inside the zip explaining how. It's very simple.
Example of the output:
http://jal.quakedev.com/stuff/terra.jpg

16. Misc resource links back to top


If you have any problems with mapping for Warsow you can also visit #warsow.mapping at the quakenet irc, there are most of the time experienced mappers.

16.1. Editing guides & tutorials back to top


  • all kind of resources here
  • http://www.wemakemaps.com/editinglinks.htm
  • gtkRadiant video tutorials by 50u15pec7a70r
  • http://50u15pec7a70r.info/?page_id=124
  • TwoAM's q3 level editing guide
  • http://clankiller.com/games/quake/gtkradianttut/
  • build basics, compiling, pk3-making etc.
  • http://www.planetquake.com/bubba/mapping.html
  • Using Quake2 entities.
  • http://files.volved.com/qsr/qoole250_cd/rust/
  • very heavy mapping ressource list
  • http://www.quake3world.com/forum/viewtopic.php?t=290
  • Creating a map with Blender 3D
  • http://www.katsbits.com/htm/tutorials/blender_export_model_to_map.htm
  • gameplay
  • http://www.lunaran.com/stuff.php
    Swelt's CPMA level design guide
    In german
  • sehr ausführliches radiant tutorial
  • http://www.dangerzone.de.tf/ bzw.
  • http://home.arcor.de/q3michel/tutor/tutindex.html
  • deutsche übersetzung von lunarans gameplay tutorial
  • http://www.planetquake.com/acid/lunaran_german.zip

16.2. Textures back to top


  • Tutorial on creating normal/specular maps using photoshop (for UT3)
  • http://www.dregsld.com/tutorials/FloorTile/tiletut01.html
  • Duke nukem 3D re-texture, some very nice textures in there, GPL
  • http://hrp.duke4.net/index.php
  • Quake2 re-texture, unsure about licenses
  • http://www-personal.umich.edu/~jimw/q2/index.htm
  • Quake re-texture, some pretty good looking textures to use as a base, all free...
  • http://facelift.quakedev.com/retexture/
  • HFX's quake3 textures, unsure about licenses
  • http://hfx.planetquake.gamespy.com/textures1.html
  • http://wadfather.planethalflife.gamespy.com/new/
  • http://www.texturewarehouse.com/gallery/index.php
  • http://www.thinkfree.com/view.tfo?file=TgrdCip2MaU=tfo
  • http://www.scribd.com/doc/452806/The-world-most-comprehensive-list-of-free-texture-resources
  • http://www.mayang.com/textures/
  • http://www.mokara.de/portfolio/index.ph … ;Itemid=46
  • http://www.imageafter.com/

16.3. Map models back to top


  • http://oakshiro.planetquake.gamespy.com/

17. CrazyBump miniguide back to top


http://www.crazybump.com/
CrazyBump is a great tool to create non-techie normal maps from images, and extremely easy to use. It will be free while it remains being beta.
Set it up like this:
Invert normal Y-axis: Yes
Invert normal X-axis: No (You may need to switch this one for some textures after checking them ingame)
(..)
Save normalmap with displacement in alpha channel: Yes
(...)
Normal map prefix (nothing) sufix: _norm
(...)
Specularity map prefix (nothing) sufix: _gloss
You can also set the displacement map sufix to _height, but it's not needed since it's already set up to save the displacement map in the normal map alpha channel.
=Decompiling into a .map=
Q3Map2 can decompile a .bsp into a .map. This procedure is by no means perfect, and you should never take anything from others maps, but decompiling is map is good to "see how it's done".
  1. Put the .bsp that you want to decompile into the same directory as q3map2.exe
  2. Open the command prompt and browse to the folder which contains the .bsp and q3map2.exe
  3. Type
q3map2 -game [game abbreviation] -convert -format map [name of the bsp file].bsp
So if the .bsp is called testmap.bsp and you use Jedi Academy, you use this:
q3map2 -game ja -convert -format map testmap.bsp
You should then find a .map in the same folder as q3map2.exe and the .bsp.
Don't forget that for opening maps decompiled with netradiant's q3map2 you have to enable "Alternative textures projection" in netradiant preferences.

18. Links back to top






RSSRSSRSSRSS

Copyright © 2016 warsow.gg

Warsow in social media