[Download] New Mapping Client
#1
What is this?

I keep putting this off to play Minecraft or MW3 but today's date seems like a cool date to release this.

This client is based on the 1.1.0.4 client; you run it in the same place as the old client and could even replace it if you wanted it to (This is the client I use).

Initially an effort to assimilate all SVN's mapping features into a 1.1.0.4 client, I started coding my own features as I needed them in my own mapping.

Main Features

Multiple selections, like in SVN (hold LCTRL when making new selection -- may have to rebind LCTRL as I think default bind is to jump with it)

Selections can now be filtered based on cube properties (filter_sel command)

/flyspeed which is a value adjusting the speed in which you fly (only in edit mode)

/paste_half (singleplayer only) pastes the floor/ceiling only of previously copied cubes, leaving the other half unmodified.

/togglecleanedit hides all editing effects and scales the closest entity information so you can make edits while seeing what they look like in regular gameplay.

/togglelockselent makes the closest entity to you "selected" so you can edit it from any distance away from it. Good in conjunction with /togglecleanedit.

Editing/deleting sound entities now updates the played sound so you can more intelligently edit them without restarting the map. Changes made from other clients in coop will not update unless they have this client though.

Changes to entities with the 1-4 number keys + scroll method is now synced.

Typing commands in the prompt will now show the in game documentation for adjacent/nested commands. Command complete now works in nested adjacent/nested commands.

Experimental features

These features will only work when all players use this client. Control the audience of these maps or test them in single player only.

mmnz -- (mapmodel negative z) allows for mapmodels to be placed with negative z offsets. The 128 - 255 range is used as the negative range.

mmzs -- (mapmodel z scale) scales the interpreted z offset of mapmodels by this value, allowing for mapmodels to be placed in half/quarter cube increments. Because of this, the possible range is scaled as well, so @camper maps should not use this.

czs -- (clip z scale) same as above, but with clips.

Screenshots

These screenshots use jiba's maps cause they're so pretty.

Selecting an area

[Image: 20121216_21_51_04_ac_arabian_TDM_50.jpg]

then using the selection filter...

[Image: 20121216_21_51_31_ac_arabian_TDM_50.jpg]

Geometry unchanged -- the mapmodels are placed with negative z offsets.

[Image: 20121216_21_45_30_ac_venganza1_1_TDM_50.jpg]

Download
Client built in Windows 7 and source code: Download (1.3 MB)
If you have problems with the source please let me know -- I didn't include some files (.o and .gch) as I understand they are related to the actual build and not the source. The .gch files were larger than I think you'd want to download :)

Documentation

You're gonna want these if you plan on using any new commands. Add the following code in your config/docs.cfg file somewhere.

//----------------------------------------------------------------------------

docsection [New]

//----------------------------------------------------------------------------

docident [mmnz] [Enables/disables negative mapmodel z values.];

docargument [V] [1 (On), 0 (Off)] [] [0];

//----------------------------------------------------------------------------

docident [mmzs] [Sets the global scale for mapmodel z value inteperetation];

docargument [S] [Scale value] [0.25, 0.50, 1] [0];

//----------------------------------------------------------------------------

docident [czs] [Sets the global scale for clip z value inteperetation];

docargument [S] [Scale value] [0.25, 0.50, 1] [0];

//----------------------------------------------------------------------------
docident [scalelight] [Scales nearest/selected light];

docargument [S] [Size change (percentage)] [] [0];

docargument [I] [Intensity change (percentage)] [] [0];

//----------------------------------------------------------------------------

docident [minbright] [Scales dark areas of the map to a minimum brightness]

docargument [B] [Minimum brightness level]

docremark [Will be reset when you issue a 'recalc'. Only works in edit mode.];

//----------------------------------------------------------------------------

docident [togglelockselent] [toggles isolated selection of an entity, where the entity is selected as the closest entity regardless of any closer entities.];

docremark [The desired entity must be the closest entity when making selection.];

//----------------------------------------------------------------------------


docident [filter_sel] [filters selections(s) to cubes matching at least one of the provided values];

docargument [T] [Type of filter applied to selection(s)] [] [0];

docargument [V] [Up to seven values to match, depending on the filter] [] [1];

docremark [The following filters are supported:];
docremark [];
docremark [Textures:]
docremark [FLOOR_T, WALL_T, UPWALL_T, CEIL_T, where V is the slot number];
docremark [];
docremark [Heights:]
docremark [FLOOR_H, CEIL_H, where V is the height];
docremark [];
docremark [Types:]
docremark [SOLID, HEIGHTFIELD, CORNER, SPACE, where (V > 0) is matching the type, and (V <= 0) excluding the type];
docremark [];
docremark [Functions:]
docremark [DISSOLVE, where V is the percent of cubes to randomly remove from the selection(s)];
docremark [SUBTRACT, where V is the number of selections to subtract from the selection(s)];
docremark [];

docexample [filter_sel CEIL_T 0] [selects only cubes in the current selection(s) with the skymap as the ceiling texture];
docexample [] [];
docexample [filter_sel DISSOLVE 80] [removes 80% of the selection(s) randomly];

//----------------------------------------------------------------------------

docident [filter_sel FLOOR_T] [filters selections(s) to cubes using one of the provided floor textures];

docargument [T] [Up to seven texture slots to match] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel WALL_T] [filters selections(s) to cubes using one of the provided wall textures];

docargument [T] [Up to seven texture slots to match] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel UPWALL_T] [filters selections(s) to cubes using one of the provided upper wall textures];

docargument [T] [Up to seven texture slots to match] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel CEIL_T] [filters selections(s) to cubes using one of the provided ceiling textures];

docargument [T] [Up to seven texture slots to match] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel FLOOR_H] [filters selections(s) to cubes with one of the provided floor heights];

docargument [H] [Up to seven heights to match] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel CEIL_H] [filters selections(s) to cubes with one of the provided ceiling heights];

docargument [H] [Up to seven heights to match] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel SOLID] [filters selections(s) to cubes that are/aren't solid];

docargument [V] [valid integer] [] [0];
docremark [V > 0 searches for solids, removing non-solids]
docremark [V <= 0 searches for non-solids, removing solids]

//----------------------------------------------------------------------------

docident [filter_sel HEIGHTFIELD] [filters selections(s) to cubes that are/aren't heightfields];

docargument [V] [valid integer] [] [0];
docremark [V > 0 searches for heightfields, removing non-heightfields]
docremark [V <= 0 searches for non-heightfields, removing heightfields]

//----------------------------------------------------------------------------

docident [filter_sel CORNER] [filters selections(s) to cubes that are/aren't corners];

docargument [V] [valid integer] [] [0];
docremark [V > 0 searches for corners, removing non-corners]
docremark [V <= 0 searches for non-corners, removing corners]

//----------------------------------------------------------------------------

docident [filter_sel SPACE] [filters selections(s) to cubes that are/aren't spaces];

docargument [V] [valid integer] [] [0];
docremark [V > 0 searches for spaces, removing non-spaces]
docremark [V <= 0 searches for non-spaces, removing spaces]
docremark []
docremark ["Space" cubes are cubes not matching any other unique type, e.g. heightfields]

//----------------------------------------------------------------------------

docident [filter_sel DISSOLVE] [Removes P percent of selection(s) randomly];

docargument [P] [percentage of cubes to remove from selections(s)] [] [0];

//----------------------------------------------------------------------------

docident [filter_sel SUBTRACT] [Subtracts the last N selections from all other selections];

docargument [N] [Number of selections to subtract] [] [0];

//----------------------------------------------------------------------------

docident [curtex] [Prints texture slot information of the selected cube, or the cube at X / Y];
docargument [P] [Position of texture to check] [FLOOR, WALL, UPWALL, CEIL, ALL] [0];
docargument [X] [X coordinate of cube to check] [optional] [0];
docargument [Y] [Y coordinate of cube to check] [optional] [0];
docremark [If no coordinate arguments are provided, curtex will list textures(s) for the currently selected cube];
docremark [];
docremark [Note: Without x/y input, curtex works with the top-left cube of the most recent selection]
docexample [curtex WALL] [prints the texture slot used for the wall of the selected cube];

//--------------------------------------------

docident [texname] [returns the filename of the selected cube's texture at position P]
docargument [P] [Position of texture to return] [FLOOR, WALL, UPWALL, CEIL] [0];
docexample [echo texname FLOOR] [prints the filename of the selected cube's floor texture]

//--------------------------------------------

docident [getcurtex] [returns texture slot number of the selected cube, or the cube at X / Y];
docargument [P] [Position of texture to return] [FLOOR, WALL, UPWALL, CEIL, ALL] [0];
docargument [X] [X coordinate of cube to check] [optional] [0];
docargument [Y] [Y coordinate of cube to check] [optional] [0];
docremark [If no coordinate arguments are provided, getcurtex will list textures(s) for the currently selected cube];
docremark [];
docremark [Note: Without x/y input, getcurtex works with the top-left cube of the most recent selection]
docremark [];
docremark [Returns -1 on error];
docexample [getcurtex FLOOR 100 75] [returns the texture slot used for the floor at position 100/75];

//--------------------------------------------

docident [curheight] [Prints height information of the selected cube, or the cube at X / Y];
docargument [P] [Position of height to check] [FLOOR, CEIL, BOTH] [0];
docargument [X] [X coordinate of cube to check] [optional] [0];
docargument [Y] [Y coordinate of cube to check] [optional] [0];
docremark [If no coordinate arguments are provided, curheight will list height(s) for the currently selected cube];
docremark [];
docremark [Note: Without x/y input, curheight works with the top-left cube of the most recent selection]
docexample [curheight CEIL] [prints the ceiling height of the selected cube];

//--------------------------------------------

docident [getcurheight] [returns the height of the selected cube, or the cube at X / Y];
docargument [P] [Position of height to check] [FLOOR, CEIL] [0];
docargument [X] [X coordinate of cube to check] [optional] [0];
docargument [Y] [Y coordinate of cube to check] [optional] [0];
docremark [If no coordinate arguments are provided, getcurheight will return the height of the currently selected cube];
docremark [];
docremark [Note: Without x/y input, getcurheight works with the top-left cube of the most recent selection]
docremark [];
docremark [Returns -255 on error];
docexample [getcurheight FLOOR 100 75] [returns the floor height at position 100/75];

//----------------------------------------------------------------------------

docident [undo_sel] [removes last N selection(s) from the list of selections];
docargument [N] [Number of selections to remove] [If no argument provided, a value of 1 is used] [0];
docexample [undo_sel 2] [removes the last two selections made from the list of selections.];

//----------------------------------------------------------------------------

docident [select_all] [removes all current selections and selects entire map area, including bounding walls];

//----------------------------------------------------------------------------

docident [equalize_sels] [levels the floor/ceiling of all selections, with the min/max height gathered from all of them];

docargument [T] [an integer denoting the type] [0 (floor), 2 (ceiling)] [0];

docremark [This differs from /equalize in that /equalize_sels levels all selections at once, rather than each selection having it's own min/max height]

//----------------------------------------------------------------------------

docident [entset_z] [sets the closest entity's z position (where the entity sparkles are drawn) to Z];
docargument [Z] [New z position] [If no argument provided, the local player's z position is used] [0];
docexample [entset_z 4] [sets the closest ent's z position to 5];
docexample [entset_z] [sets the closest ent's z position to the local player's z position];

//-------------------------------------------------------------------

docident [clearrecenttex] [clears the history of recent textures used in the current map];

//-------------------------------------------------------------------

docident [cleanedit] [turns on/off clean edit mode];
docargument [V] [0(off)...1(on)] [] [0];
docremark [While editing in clean edit mode, objects/guides not normally visible remain unvisible]
docremark [i.e. The grid guidlines, selection borders, entity sparkles, clips, playerstart arrows, and closest entity information are hidden]

//-------------------------------------------------------------------

docident [gridalpha] [Sets the alpha level for editing guides.] [0...255, default is 255];

docargument [A] [The new alpha level];

//-------------------------------------------------------------------

docident [togglecleanedit] [inverses the on/off state of cleanedit];

//-------------------------------------------------------------------

docident [savesel] [Stores the list of current selections to later be recalled by /reselect];

//-------------------------------------------------------------------

docident [reselect] [Removes all current selections and selects the list of cubes previously stored with /savesel];

//-------------------------------------------------------------------

docident [alwaysdrawwp] [Modifies the bot way-point visibility setting];
docargument [V] [0...1] [default 0] [0];
docremark [0: draw waypoints in close proximity of crosshairs]
docremark [1: draw waypoints everywhere regardless of proximity]

//-------------------------------------------------------------------

docident [sel_addwp] [Adds waypoints from the currently selected cube(s)];
docargument [A] [An integer denoting whether or not to use an autoconnecting waypoint] [0...1] [0];

//-------------------------------------------------------------------

docident [tex2front] [Brings the selected cube's texture slot used in position P to the front of its recent textures list];
docargument [P] [The position of the cube's texture to bring to front] [FLOOR, WALL, UPWALL, CEIL] [0];
docremark [tex2front works with the top-left cube of the most recent selection]

//-------------------------------------------------------------------

docident [botstargetme] [Modifies the hostility of bots toward the player];
docargument [N] [0...1] [default 1] [0];
docremark [If N is 0, bots will ignore the player but continue to target other bots]
docremark [If N is 1, bots will play normally, targetting the player as well as other bots]

//-------------------------------------------------------------------

docident [paste_half] [Pastes the floor/ceiling of a previously copied selection, leaving the opposite half unmodified];
docremark [The choice of floor or ceiling is derived from which the player is looking at]

//-------------------------------------------------------------------

This also allows you to use the in game reference to access all these commands from a menu (main menu -> help -> assaultcube reference -> new) It looks like this:

[Image: sdfsf.png]

Don't forget to scroll down the list to see more.

I highly recommend using these binds. I manually edited resetbinds.cfg for these:

bind F3 [ if $editing [ togglecleanedit ] [ showmenu "search player" ] ]
bind F4 [ if $editing [ togglelockselent ] [  ] ]

How to use experimental features
Those three commands can be typed in edit mode to test, but you will need to place them in your map cfg file to make permanent changes (just like skymaps, etc)

However to allow them to actually be used in the cfg files you need to manually update the config/scontext.cfg file. Add the commands to line 11. Will look like this:
alias mapcfgidents [ loadnotexture loadsky mapmodelreset mapmodel texturereset texture fog fogcolour mapsoundreset mapsound watercolour shadowyaw mmnz mmzs czs]
If a client loads a map with those settings without setting this up they will get an error. Additionally older clients will not behave correctly so control the audience of your maps using these three features.

What I would like from you

Go nuts with this but please report any bugs you find related to the new functions. If any of you have some good ideas for mapping functions like these I will probably work on those too.
Thanks given by:
#2
filter sounds nice , thank you
Thanks given by:
#3
Oh.
My.
God.

This looks really cool. Very nice job. It's nice to see people getting creative with mapping :D. I personally might re-venture into the AC mapping scene just to tinker with this, so thank you!

My only comment...
(02 Jan 13, 02:27AM)Felix-The-Ghost Wrote: I keep putting this off to play Minecraft or MW3
Not BO2? \:D
Thanks given by:
#4
Epic stuff, z-offsets for mapmodels = <3
Thanks given by:
#5
A W E S O M E !

Great job Felix-The-Ghost. Is it just me or did you also fix the deleted sound entitiy bug?
Thanks given by:
#6
Alll I have to say...

Pure epicness. :D

Great job with the client! I love using it, and it is such a time saver! Hopefully this'll make it into the official package. :3
Thanks given by:
#7
Just a reminder to those who have not posted but have used this client: I am seeking feedback and ideas for future features (though my efforts will go to the 1.2 client)
Thanks given by: