Tutorial: Easy Tile Swapping

Help spread the word!Share on FacebookShare on TumblrTweet about this on TwitterShare on Google+Share on LinkedInShare on RedditFlattr the author

This tutorial goes over the Tile Swap script. It explains how the script is used and provides a full working example that demonstrates each step involved in successfully swapping tiles.

tileSwapEx6.jpg

Required

Tile Swap

Introduction

There are some concepts and terminology that you would need to be familiar with
before effectively using this script.

Tilesets in Ace

RMVX Ace’s tileset design takes a single tileset and splits it into 5 different tileset pages (A, B, C, D, E). It then takes the A-page and breaks it down into 5 more parts (A1, A2, A3, A4, A5)

Tile Layers

There are three layers that tiles may be placed: 0, 1, and 2.
0 is the bottom-most layer, while 2 is on the top.

In general, pages A1, A2, A3, and A4 tiles are drawn on layer 0 and 1, while pages A5 B, C, D, and E tiles are drawn on layer 2.

Depending on the draw-order, you may need to specify which
layer a tile should be drawn on.

Referencing Tiles

This script uses introduces a “tile ID”, which is a special string that represents a particular tile on a tileset page. The format of a tile ID is a letter, followed by a number.

  • The letter is the tileset page.
  • The number is the position of the tile on that page.

So for example, “A3″ would be the the third tile in tileset page A, whereas
“B12″ would be the 12th tile of tileset page B.

A fast way to calculate the position is to use the formula

((row – 1) * 8) + column

It is very easy to look up the position of a tile: just look at your tileset page and number the top-left tile as 1. Then, numbering left-to-right, top-to-bottom, you would get something like this

tileSwapGuide.jpg

For page A, it is a little different. This is assuming you have all 5 parts.
If you are missing any parts, you will need to skip them appropriately.
To avoid all the unnecessary math, simply fill up the empty slots with dummy tilesets to make life easier.

tileSwapDummy.jpg

Example

Now that you understand how tile ID’s work, here is a working example.
In the oasis map, I want to reveal a hidden staircase at the bottom of the oasis

tileSwapEx1.jpg

This means that I will need to swap the water tiles with some sand tiles, and then add some stairs.

1. Get the tile ID of the water tile in (row 2, column 3, so ((2 – 1) * 8) + 3 = 11)
2. Get the tile ID of the dark sand tile (row 4, column 1, so ((4 – 1) * 8) + 1 = 25)

Both tiles are in tileset page A.

tileSwapEx2.jpg

The script call I want to use to swap all water tiles with sand tiles is

tile_swap("A11", "A25")

Now I want the staircase. It is in page B, near the bottom.

tileSwapEx3.jpg

I would need to specify where the stairs will appear. I can choose to use a region swap or a position swap. In this case, I will use a position swap

If you read the documentation, you will notice that I have a “layer” parameter.
Tiles on pages B, C, D, E should appear on layer 2. If you are not sure which layer things should be on, just remember that autotiles are usually on layer 0 or 1, and everything else is on layer 2. In fact this doesn’t really matter THAT much but if you run into strange tile issues it might be a layer problem.

I want the stairs to appear at (21, 27), so the script call would be

pos_swap(21, 27, "B223", 2)

Now I want to add some plants at the bottom of the oasis. I will use a region swap to swap in one of the plants in page B to any region 10 tiles.

tileSwapEx4.jpg

The plants I want to use are “B89”, on layer 2, so the script call would be

region_swap(10, "B89", 2)

Finally, I create an NPC that will perform these script calls

tileSwapEx5.jpg

And now I can test the final results

tileSwapEx7.jpg

tileSwapEx6.jpg

All tile properties are swapped, such as passage settings, terrain tags, damage floor, etc. so can walk across the sand.

tileSwapEx8.jpg

It might be nice to fill the oasis with water again. Since we made several changes, it would probably be easiest to just revert everything.

revert_all

A more appropriate method is to revert each specific change.

tile_revert("A11", 0)    # revert changes to layer 0 "A11" tiles
pos_revert(21, 27, 2)    # reverting changes toposition (21, 27)
region_revert(10, 2)     # reverting changes to region 10

tileSwapEx9.jpg

Talking to the NPC would “put” the water back into the oasis

tileSwapEx10.jpg

By combining all three different types of tile swapping modes (tile ID, region ID, position), you can make interesting changes to the map dynamically and easily.

Help spread the word!Share on FacebookShare on TumblrTweet about this on TwitterShare on Google+Share on LinkedInShare on RedditFlattr the author

You may also like...

6 Responses

  1. Zen says:

    I can’t get any swap or revert command to work, all it does is crash the game with NoMethodError, and tells me that the command doesn’t exist.
    region_swap, and pos_swap both crash the game. I’ve tried all the ways to present it, from all your tutorials. I’ve been scouring the web for the error message, (nothing comes up). Would love to see a script wiki for ace that lists all recognized script functions.. (nothing like that either) And don’t point me to the list of script substitutions for the button menus. been there, read that, doesn’t say a thing about this ‘swap’ stuff.

  2. bobisme says:

    Your tut within the script states Usage: region_swap(regionID, tileID, layer, map_id)
    while this tut only shows 3 'parameters'

    While i'm here, i would like to use this script to make walls disappear when you step on a region id.

    Ive set up 2 regions, one for the black nothingness outside and one for the top of the wall (a tile in set b that looks like the wall ) you can still walk through it but as soon as you touch it i have a '$check region id of player if on '56' region swap, both swap to a tile that is translucent so you see events and other tiles where the wall once was but it does not seem to be working for me 🙁 any help would be greatly appreciated 🙂

    • Hime says:

      The mapID defaults to the current map if it is not specified. It looks like I didn't actually describe that in the script, which likely leads the confusion.

      How is your event set up? Are you sure the tile you've selected is correct? Are you sure the event is executed?

  3. Nick says:

    I can get region_swap to work, but the other two commands have no effect

Leave a Reply to Zen Cancel reply

Your email address will not be published.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax