Tools grid
![]() |
![]() |
![]() |
![]() |
Tidy Tile Mapper is an easy-to-use, intuitive and powerful tile-based game creator for Unity, perfect for creating both 2D and 3D tile-based games. More Information |
Tidy Maze Maker is a plugin for Tidy Tile Mapper that allows you to generate mazes with which to amaze your friends and perplex your enemies. More Information |
A handy little mesh-modifying script - perfect for creating water or fire in your favorite Tile-Mapping tool... Tidy Tile Mapper! More Information |
Tidy Text Adventures - the zero-code-required, text-based-adventure creation tool of your dreams! More Information   |
Monday, April 23, 2012
Tidy TileMapper: Your First "5" Minutes
A quick tutorial video that should introduce you nicely to the "philosophy" behind the use of Tidy TileMapper.
Watch, digest, enjoy!
-Joshua McGrath
Tuesday, April 3, 2012
Tidy TileMapper: Character Controllers - Coming soon!
Yes yes. I've had a vision.
A vision of the future of "Tidy Tile Mapper" - and by proxy, the future of the human race itself.
I'll summarise it in a quasi-"vision statement" right here, for your entertainment:
"One click: Map
Two clicks: World
Three clicks: Player
Four clicks: Play!"
I think that conveys what I want to do here. I want to extend the "have fun and paint" philosophy that I try to have "Tidy Tile Mapper" bring to level-painting, and bring it to the entire game-creation process.
So over the next few weeks, I'll be releasing paint-able game components - character controllers, event triggers, and so forth.
So look forward to that! I certainly am.
-Joshua McGrath
Wednesday, March 21, 2012
Tidy Tile Mapper: A Very Big World
A short demo utilizing the Tidy Tile Mapper Runtime API.
Something to wet your appetite for massive procedural worlds.
Enjoy!
-Joshua McGrath
Monday, March 19, 2012
Tidy TileMapper: Runtime API
NOTE: This ad-hoc documentation has been replaced by a super-smooth API site, accessible via the sidebar on the left (Technical Documentation) or by clicking this link.
All API functions are held within the BlockUtilities class.
Example: To create a new block map with a standard tilesize you would call:
BlockUtilities.CreateBlockMap("NewMap",new Vector3(1.0f,1.0f,1.0f),5,5,BlockMap.GrowthAxis.Up);
Functions:
public static BlockMap CreateBlockMap(string mapName, Vector3 tileScale, int chunkWidth, int chunkHeight, BlockMap.GrowthAxis growthAxis);
Create a new Block Map
Parameters:
mapName: The name of your new block map
tileScale: The scale of the tiles within your new blockmap
chunkWidth: The width of the chunks within your new blockmap (Recommend: 5)
chunkHeight: The height of the chunks within your new blockmap (Recommend: 5)
growthAxis: The direction in which your new blockmap will grow when blocks are added to it
Returns BlockMap:Your shiny, new blockmap
public static Block GetEmptyBlock(BlockMap map);
Returns an empty block (useful for deleting blocks but retaining trigger functionality)
Parameters:
map: The map to which this block will be added (required in order to correctly size the trigger of the block)
Returns Returns an empty block
public static void RemoveBlockFromMap(BlockMap map, int x, int y, int depth);
Remove a block from the map (replacing it with an Empty Block)
Parameters:
map: The map from which you wish to remove the block
x: The x coordinate of the block
y: The y coordinate of the block
depth: The depth of the block
public static void RefreshMap(BlockMap map, bool randomise);
Refresh the map - correcting orientations on all blocks
Parameters:
map: The map that you wish to refresh
randomise: Randomise the block variations within the map?
public static void CleanMap(BlockMap map);
Cleans the blockmap - removing all unused variations and orientations
Parameters:
map: The map that you wish to clean
public static Block GetBlockAt(BlockMap map, int x, int y, int depth);
Get the block located at the given coordinates
Parameters:
map: The map from which you wish to retrieve a block
x: The x coordinate of the block
y: The y coordinate of the block
depth: The depth of the block
Returns The block, if one exists, null if not.
public static int GetMapUpperDepth(BlockMap map);
Returns the lowest depth that is populated within the given map
Parameters:
map: The map from which you wish to retrieve the depth
Returns The lowest depth recorded in the map
public static int GetMapLowerDepth(BlockMap map);
Returns the highest depth that is populated within the given map
Parameters:
map: The map from which you wish to retrieve the depth
Returns The highest depth recorded in the map
public static int GetMapHeight(BlockMap map);
Returns the height (in tiles) of the map
Parameters:
map: The map from which you wish to retrieve the height
Returns The height of the map
public static int GetMapWidth(BlockMap map);
Returns the width (in tiles) of the map
Parameters:
map: The map from which you wish to retrieve the width
Returns The width of the map
public static void AddBlockToMap(BlockMap map, Block b, bool randomise, bool refreshUponAddition, int x, int y, int depth);
Add a block to the desired map
Parameters:
map: The map to which you wish to add a block
b: The instantiated Block object that you wish to add to the map (if null, will add an EmptyBlock object)
randomise: Randomise the variant of this Block upon addition to the map?
refreshUponAddition: Refresh the surrounding blocks upon addition to the map?
x: The target x coordinate
y: The target y coordinate
depth: The depth to which to add the block
public static void RefreshBlock(BlockMap map, int x, int y, int depth);
Refresh the target block - correcting the orientation of the block and the surrounding blocks
Parameters:
map: The map housing the block that you wish to refresh
x: The x coordinate of the block to be refreshed
y: The y coordinate of the block to be refreshed
depth: The depth of the block to be refreshed
public static void CleanBlock(BlockMap map, int x, int y, int depth);
Cleans a single block
Parameters:
map: The map containing the target block
x: The x coordinate of the target block
y: The y coordinate of the target block
depth: The depth coordinate of the target block
public static MapChunk GetChunkAtCoordinates(BlockMap map, int x, int y, int depth);
Returns the chunk at the given block coordinates
Parameters:
map: The map from which to retrieve the chunk
x: The block x coordinate
y: The block y coordinate
depth: The depth coordinate
Returns The chunk (if one exists) - null if not
public static Vector3 GetMathematicalPosition(BlockMap map, int x, int y, int depth);
Returns the local position of the given coordinate (useful for character movement
Parameters:
map: The map from which you wish to retrieve the position
x: The block x coordinate
y: The block y coordinate
depth: The block depth coordinate
Returns The local position that is central to this block coordinate
public static Vector3 GetMathematicalCoordinates(BlockMap map, Vector3 localPosition);
Mathematically divine the coordinates of the localPosition provided within the blockmap
Parameters:
map: The map within which you wish to divine your coordinates
localPosition: The local position of the transform (parented to the map)
Returns The x,y,z coordinates of the transform, gathered mathematically. NOTE: This is not of use on a map that involves arbitrarily-placed blocks (e.g soft selection)
Enjoy!
-Joshua McGrath
All API functions are held within the BlockUtilities class.
Example: To create a new block map with a standard tilesize you would call:
BlockUtilities.CreateBlockMap("NewMap",new Vector3(1.0f,1.0f,1.0f),5,5,BlockMap.GrowthAxis.Up);
Functions:
public static BlockMap CreateBlockMap(string mapName, Vector3 tileScale, int chunkWidth, int chunkHeight, BlockMap.GrowthAxis growthAxis);
Create a new Block Map
Parameters:
mapName: The name of your new block map
tileScale: The scale of the tiles within your new blockmap
chunkWidth: The width of the chunks within your new blockmap (Recommend: 5)
chunkHeight: The height of the chunks within your new blockmap (Recommend: 5)
growthAxis: The direction in which your new blockmap will grow when blocks are added to it
Returns BlockMap:Your shiny, new blockmap
public static Block GetEmptyBlock(BlockMap map);
Returns an empty block (useful for deleting blocks but retaining trigger functionality)
Parameters:
map: The map to which this block will be added (required in order to correctly size the trigger of the block)
Returns Returns an empty block
public static void RemoveBlockFromMap(BlockMap map, int x, int y, int depth);
Remove a block from the map (replacing it with an Empty Block)
Parameters:
map: The map from which you wish to remove the block
x: The x coordinate of the block
y: The y coordinate of the block
depth: The depth of the block
public static void RefreshMap(BlockMap map, bool randomise);
Refresh the map - correcting orientations on all blocks
Parameters:
map: The map that you wish to refresh
randomise: Randomise the block variations within the map?
public static void CleanMap(BlockMap map);
Cleans the blockmap - removing all unused variations and orientations
Parameters:
map: The map that you wish to clean
public static Block GetBlockAt(BlockMap map, int x, int y, int depth);
Get the block located at the given coordinates
Parameters:
map: The map from which you wish to retrieve a block
x: The x coordinate of the block
y: The y coordinate of the block
depth: The depth of the block
Returns The block, if one exists, null if not.
public static int GetMapUpperDepth(BlockMap map);
Returns the lowest depth that is populated within the given map
Parameters:
map: The map from which you wish to retrieve the depth
Returns The lowest depth recorded in the map
public static int GetMapLowerDepth(BlockMap map);
Returns the highest depth that is populated within the given map
Parameters:
map: The map from which you wish to retrieve the depth
Returns The highest depth recorded in the map
public static int GetMapHeight(BlockMap map);
Returns the height (in tiles) of the map
Parameters:
map: The map from which you wish to retrieve the height
Returns The height of the map
public static int GetMapWidth(BlockMap map);
Returns the width (in tiles) of the map
Parameters:
map: The map from which you wish to retrieve the width
Returns The width of the map
public static void AddBlockToMap(BlockMap map, Block b, bool randomise, bool refreshUponAddition, int x, int y, int depth);
Add a block to the desired map
Parameters:
map: The map to which you wish to add a block
b: The instantiated Block object that you wish to add to the map (if null, will add an EmptyBlock object)
randomise: Randomise the variant of this Block upon addition to the map?
refreshUponAddition: Refresh the surrounding blocks upon addition to the map?
x: The target x coordinate
y: The target y coordinate
depth: The depth to which to add the block
public static void RefreshBlock(BlockMap map, int x, int y, int depth);
Refresh the target block - correcting the orientation of the block and the surrounding blocks
Parameters:
map: The map housing the block that you wish to refresh
x: The x coordinate of the block to be refreshed
y: The y coordinate of the block to be refreshed
depth: The depth of the block to be refreshed
public static void CleanBlock(BlockMap map, int x, int y, int depth);
Cleans a single block
Parameters:
map: The map containing the target block
x: The x coordinate of the target block
y: The y coordinate of the target block
depth: The depth coordinate of the target block
public static MapChunk GetChunkAtCoordinates(BlockMap map, int x, int y, int depth);
Returns the chunk at the given block coordinates
Parameters:
map: The map from which to retrieve the chunk
x: The block x coordinate
y: The block y coordinate
depth: The depth coordinate
Returns The chunk (if one exists) - null if not
public static Vector3 GetMathematicalPosition(BlockMap map, int x, int y, int depth);
Returns the local position of the given coordinate (useful for character movement
Parameters:
map: The map from which you wish to retrieve the position
x: The block x coordinate
y: The block y coordinate
depth: The block depth coordinate
Returns The local position that is central to this block coordinate
public static Vector3 GetMathematicalCoordinates(BlockMap map, Vector3 localPosition);
Mathematically divine the coordinates of the localPosition provided within the blockmap
Parameters:
map: The map within which you wish to divine your coordinates
localPosition: The local position of the transform (parented to the map)
Returns The x,y,z coordinates of the transform, gathered mathematically. NOTE: This is not of use on a map that involves arbitrarily-placed blocks (e.g soft selection)
Enjoy!
-Joshua McGrath
Tidy TileMapper: Runtime API Demonstration
Hello friends,
The first release of the Tidy TileMapper Runtime API has been released and is now live on the Asset Store.
Take a gander at the video above, which gives you a nice taste of the functions achievable using the library.
Stand by for API documentation and example code - should wet your procedural-generation appetite.
-Joshua McGrath
Sunday, February 26, 2012
Feature Requests and In-Development
The purpose of this post is to keep track of feature requests, bugs and other features in-development.
Please feel free to leave a comment if you want to elaborate on a feature, or request something new, and I'll add it, track it, and send it home to momma.
In-Development
Feature Requests
Please feel free to leave a comment if you want to elaborate on a feature, or request something new, and I'll add it, track it, and send it home to momma.
In-Development
- 27/02/2012: Tidy Gameplay
- Summary: A set of "functional blocks" for paint-and-play game design.
- Includes: Character controllers, AI controllers and other functional blocks (e.g: Level end zone)
- 27/02/2012: Block-set texture packs
- Summary: More texture packs for blocks.
- 09/04/2012: Allow arbitrary layer-visibility
- Summary: Allow the user to preview a range of layers (extended beyond the all-or-one function)
Feature Requests
- 27/02/2012: "Act Empty" modification to support negative tilesets
- Completed.
- Summary: Modify "Act Empty" feature to tile with other "Act Empty" blocks, to allow negative tilesets.
- 27/02/2012: More orientations
- Summary: Add more block orientations to allow more fine-tuned painting of maps.
- Comments: I'm going to add a "Custom Orientation" tool, allowing the user to create custom orientations (by mapping to a grid just like the icons in the Block Editor). These will be saved for use across any block, and evaluated before built-in orientations. This should balance simplicity with power. Like a motorcycle.
- 27/02/2012: Slanted blocks using Soft Selection
- Summary: Allow programmatically-slanted blocks when creating pyramid-styled constructs.
- Comments: I like this idea. It sounds like a fun thing to develop. I'm not sure how universal the usefulness will be, but it will just add another button to the UI, so shouldn't hurt anybody.
- 27/02/2012: UI-integrated Mesh Combine
- Summary: Mesh-combine logic integrated with the Map Painting interface - allowing geometry combination across chunks.
- Comments: This has been something in the back of my mind for a while, but it will need to be delayed until I've finalized the internal logic for procedural generation and other game logic (Active blocks vs. Passive blocks).
- 27/02/2012: Procedural Generation / Runtime modification API
- Completed (but always improving).
- Summary: An API allowing runtime modification of Block Maps.
- Comments: This is largely already implemented, but I am currently developing a test project against the API to assure that drastic future changes won't be required (and thus, break everybody's projects).
- 27/02/2012: API Documentation
- Completed (but always improving) .
- Summary: Document the API so that all of your friends can use it with gusto.
- Comments: Again, this is one that I'm delaying a little until I'm certain drastic internal changes won't take place. By "delaying" I mean a week or so, nothing drastic.
- 27/02/2012: Help documentation, Tutorials, Videos.
- Summary: Put together some help/tutorial resources to allow everybody to get the most out of Tidy TileMapper.
- Comments: I will. I promise. I've been putting this off for a long time. Videos take a long time to make. But in the end, everybody benefits from knowledge.
- 27/02/2012: Delete Layer chunk
- Completed
- Summary: Allow a user to delete a layer-chunk when adding layers.
- 27/02/2012: Tile Mapping window "popping" from docked position upon pressing 'Play'
- Fix Submitted: 28/02/2012
- Summary: Tile Mapping window pops from its docked position when the editor enters Play-mode. In some reported cases, this returns a Null Reference error (when the window attempts to draw an icon that hasn't been loaded yet).
- Comments: This has something to do with the reconstruction of static classes kept in memory (allowing universal access to icons and other loaded files - prefabs and such). I'm on the case.
- 27/02/2012: Slow the input rate of Add Layer
- Fix Submitted: 28/02/2012
- Summary: Input rate of layers is currently too fast. Slow this to avoid the addition of multiple layers accidentally.
Tuesday, January 24, 2012
Tidy Tile Mapper: How to create Custom Blocks.
Hello friends - at the request of the excellent community on the Unity forums, I've put together this tutorial video demonstrating the use of the Block Editor and the creation of custom blocks with Tidy Tile Mapper.
If you have any questions, please feel free to leave a comment.
Enjoy!
-Joshua McGrath
Saturday, January 21, 2012
Tidy TileMapper: Official Video
Witness, and enjoy - the new Tidy Tile Mapper video!
100% less speaking, 100% more chiptune.
Soundtrack - "The Boss" created by Multifaros - see his excellent work here: http://freemusicarchive.org/music/Multifaros/
-Joshua McGrath
Thursday, January 19, 2012
Tidy TileMapper: Version 1.1 - Three dimensional manoeuvres in the dark.
Tidy Tile-Mapper Version 1.1 has been submitted to the Asset Store and will be available momentarily - excitement of all excitements!
In the meantime, take a look at the video above - where my sultry early-morning tones will guide you toward your Soft Selection aspirations.
-Joshua McGrath
Wednesday, January 18, 2012
Tidy TileMapper: It's mysterious.
Tidy Tile Mapper has been approved by the excellent individuals at Unity and is now large, in-charge and available for purchase on the Unity Asset Store.
During the fevered wait for this approval, I've been working on Tidy Tile Mapper V1.1 - the evocative results of which you can see above.
This was achieved using the new "Soft Selection" tool for moving individual blocks. I won't give too much away (I'll save that for another husky video) - but I will say - If there is anything you'd love to see in the next Tidy Tile Mapper release, get to typing! Leave us a comment. My "To Do" list is beginning to frighten me with its emptiness.
As always, gentle folks:
Stay Crunchy.
-Joshua McGrath
Subscribe to:
Posts (Atom)












