[RM2K3] MAKE SHIP TRAVEL ON UPPER TILE?

Posts

Pages: 1
I am using the “ship” in Rpg2003 to travel over dry land (lower chip) but the vehicle will get stuck on things like flowers and sticks (upper chipset) seems kinda dumb. Any way to get around this would really help here. Thanks
pianotm
The TM is for Totally Magical.
32347
In the database, in the Tileset Tab, check your terrain tags. Make sure they're set to the terrain numbers you want.



Go into the Terrain Tab and then go through the terrain tags there. Go through each tag and make sure ship passability is set the way you want. You can do that by clicking on each tag, and then checking the boxes in Vehicle Passage Settings to determine whether boats, ships, and airships can pass, and airships can land.

I’ve done this for the lower chips, the problem is with the upper chips, there doesn’t seem to be an option to set a terrain to them

Edit: Upper Layer

Edit2: Even if i set a terrain for the lower tile, if i place an upper tile and then go yo pass through it it doesnt let me even if i change via event.
pianotm
The TM is for Totally Magical.
32347
If you want to be able to pass over upper layer tiles, they have to be set to O passability or your ship has to be tagged as an airship. If you don't want it to be an airship, your only option is to have duplicate maps:
One for when your character is off the ship and has to interact with with said upper layer tiles and the other for when your character gets on the ship and you don't want them to be able to interact with upper layer tiles anymore.

Edit: Please note, if you set them to STAR passability, everything will pass under them, except the airship, which will pass over them.
I think you could just open up the editor, duplicate the tileset you're using for the map, then on the duplicate just set all the upper tiles you want the player to be able to pass as passable.

Then you could have a parallel process command check whether or not you're in the vehicle, and use the Change Tileset command as needed. Not too sure if it'd actually work or not, though, since I almost never actually use vehicles for anything, but I think it should and it'd be pretty easy to do.
That is lame. Duplicate maps will not be possible for what i’m trying to do, but thanks for the advice.

Edit: i’m not sure what you mean, Sidewinder. I’m out of useable space on the lower tiles for any duplication to take place.

Edit2: ive already used parrelel process for checking to pass through certain objects (water for when an upgrade is aqcuired) but upper layers are impossible to pass through (without causing other problems for walking/running).
pianotm
The TM is for Totally Magical.
32347
Another possibility is to have all of your upper layer tiles set on the map as events. Have them set as same as character for when you're not using the ship and set a switch to toggle them to below character when using the ship.

Edit: He's suggesting you duplicate the tileset.
author=Metaknightx2
Edit: i’m not sure what you mean, Sidewinder. I’m out of useable space on the lower tiles for any duplication to take place.

Oh, no. You wouldn't need to have duplicates of tiles on the same tileset, you'd duplicate the tileset's entry in the database, like this:

The problem is that even if you set everything to O you are still unable to pass while in “ship”.
pianotm
The TM is for Totally Magical.
32347
Make sure the lower tile that you've set the upper tile on is flagged to let the ship pass.
author=Metaknightx2
The problem is that even if you set everything to O you are still unable to pass while in “ship”.

Sorry. Then I'm all out of ideas.
That won’t work either lol.

I think the only method might be to place each upper tile on ship travellable maps onto charsets and use those below player instead. Its hella unfortunate too that will make for a lot of work...
pianotm
The TM is for Totally Magical.
32347
Okay. I'm going to teach you how to do this.

Go into your database to common events and create a common event called "Character Tracker". In the "Trigger" window, set it to parallel process. Tick the box for "Condition Switch" and make a switch for it. Now, in the "Content" window, create two variables, named Player X and Player Y. For both variables, in "Operands", tick the "Event" circle of both variables. In the first drop down select the Player event. In the second dropdown, for the Player X variable, select X coordinate, and for Player Y, select Y coordinate. Your content screen will now look like this.

@> Control Variables: = Player's X Coordinate
@> Control Variables: = Player's Y Coordinate

At the beginning of your game, create an event with a parallel process that sets this Common Event's Condition Switch to "On" and leave it on.

This tracker is a quality of life feature that you will find indispensable for countless operations involving your playable character.


Sorry, should have included this.

1. Creating Your Maps

In your tileset tab, you want two tilesets: the main tileset you'll be using to create your main map, and your secondary tileset, which should be an exact duplicate of your main tileset. In your main map passability, make sure the player is restricted from walking on anything they would logically be unable to walk on, such as lakes, walls, furniture, etc. For your ship map passability, make sure everything that you want to be passable for the ship is passable for the player, because we are not going to be using RPG Maker's ship function.



Place an event for your ship. This event should have the relevant ship sprite in it that your character can "board". Again, do not use the ship placement tool that you would ordinarily use. Place all events that you want in your map, including transfers to other areas. It's a pain to make maps match AFTER you've duplicated them if you weren't finished with the map to begin with. You won't need the ship sprite event on this version of the map, so you can delete that if you want.

Go ahead and make your main map. Then, in your map tree, right click on your map, copy it and paste it where you want it. I recommend making two branches, one for regular player maps and one for ship maps.



2. Player Teleportation and Ship Boarding/Disembarking.

Go into your ship event. Make sure your player can occupy the same space as the event. Make sure the trigger is set to Action Button. Remember that Character Tracker? You know the switch? Have this event turn it off. What you've done now is set your character's last known location. Create another switch called, Ship Handling, and turn it off as well. We're going to need that in a little bit. Now, you're going to do some stuff that you want to hide from the players. Hide screen in this situation is glitchy so Tint Screen to 0,0,0 instead. And transfer player to your ship map. It doesn't matter where.



On your ship map, create an event set to parallel process set to below players. In this event, select the Set Event Location command, set it to this event, and in Map X, set it to your Player X variable, and in Map Y, set it to Player Y. What this will do is move this event to the coordinates on this map that you were on on the last map. Below this command, create a variable setting Player's Map ID. This is exactly the same as the Player X and Player Y commands, except you're setting Map ID instead of coordinates. Then, create variables for your boat location exactly the same way you created your Character Tracker variables, except, set the event part to This Event, and give your variables names reflecting what you want this event to do. Remember that boat handling switch? Turn it on.

@> Set Event Location: This Event, Variable [0001][0002]
@> Control Variables: [0005:Map ID] = Player's Map ID
@> Control Variables: [0003:Boat Location X] = This Event's X Coordinate
@> Control Variables: [0004:Boat Location y] = This Event's Y Coordinate
@> Control Switches: [0002:Boat Handling] = ON

Create a new page, and set it to trigger on your Boat Handling switch. Set it to Parallel Process also. In this new page, use the command Get Player Location. Set Map ID to your newly created Map ID variable, and of course, set X and Y Coordinates to your Player X and Player Y variables. After this use the Move to Variable Location command using your Map ID variable, and the variables for this event as your handlers. Turn the switch for your Character Tracker back on. And set your tinting back to 100,100,100

@> Get Player Location: Variable [0005][0001][0002]
@> Move to Variable Location: Variable [0005][0003][0004]
@> Tint Screen: (100,100,100,100), @1.0s, Wait
@> Control Switches: [0001:Player] = ON

Create another new page, set it to parallel process (because we're going to be using this for our next operation), and have it triggered with your Character Tracker conditional switch.



Now, this seems really involved, but if you look at the images above, you'll see there's really not a lot to it. By the way, those page by page processes absolutely need to be separated like shown above because if you don't, the system will freeze on a black screen.

SORRY, I FORGOT! AT SOME POINT, CHANGE YOUR CHARACTER SPRITE TO YOUR SHIP SPRITE.

What you've done is created a system where you can board anywhere on your map and not have to have designated docking points. But how do you get back to the player map? Well, I'm going to explain that, too.

Remember that we left that last page as a parallel process? Well, that's because we're waiting for player input, now, so create a Key Input Processing command on this page to start. RPG Maker 2003 doesn't have a run toggle, even though you can create one on your own, so if you're not doing that, go ahead and use the shift key (note the number 7 by it. You'll need that for variable handling.) for this because you're not using it for anything else, most likely. In the variable portion of the Key Input Processing window, create a new variable called...why not "Key Input"? Essentially, what you've done is you've told the system that it needs to look for the player pressing a button. Below that, create a Conditional Branch. Tick the variable button and set the variable to Key Input. Make sure the variable condition menu is set to Equal to, and make sure the "Constant" button is ticked. In the box by the constant selection, set the value to 7, the same as the shift key. Untick the Set Handlers when Conditions Apply box, because you don't need it, and click OK.

Now, in the conditional branch, turn your Character Tracker switch off, tint your screen to 0,0,0 again because you're going to have trouble with the process if you try to use the hide screen function. Then transfer your character back to the original map.

@> Key Input Processing: [0006:Key Input], Wait
@> Conditional Branch: Variable [0001:Player X] == 7
@> Control Switches: [0001:Player] = OFF
@> Tint Screen: (0,0,0,100), @1.0s, Wait
@> Transfer Player: [0001:Aremenia (Player)] (017,016), Retain
@>
: Branch End



Create a new page on your ship sprite that sets the event location again to the Player X and Player Y variables. Go through the whole process again. Make sure you change your character sprite back to your correct sprite. When you turn your Character Tracker switch back on, make sure you land on the ship event page that starts the process and waits for the action button trigger.
Wow, what an explanation. I really appreciate the effort you put into this but i unno if i’ll be able to use it. You see for our game we don’t have a world map, all the maps are attached to eachother. There are too many events that can be interacted with (on an off ship) and not to mention the running mechanic that’s been causing is lots of headache as well.

I am intrigued about one thing you said. Youre saying the fadeout/fade in has some problems that are alleviated by using the tint screen? What that about? Do you mean like changing the player sprite?

pianotm
The TM is for Totally Magical.
32347
However many maps you use doesn't matter. Just put a parallel process on each map that follows the same formula and make sure the transfers in each event goes to the relevant map. Process is simple: copy paste and adjust transfer locations.

I need to point out a glitch in my explanation, though. Tinting also has a problem, but you have to hide the screen. Positioning of the command is everything in this instance. Put the tint 100,100,100 in the last page of the event (the one with the Key Input Process: put the tint 100,100,100 command first.) and then it will work right.

And yeah, fadeout/fadein is temperamental on all makers. It works if you use it normally in cutscenes on one map, but once you transfer to another map, you have to use them a certain way or they won't work. The fade out has to go before the transfer, and the fade in has to immediately follow after the transfer. If you try to put a fade in the next map, it absolutely will not work. This problem has absolutely driven RM devs that try to make cutscenes across multiple maps nuts. The usual workaround for multimap processes like this one is to use tints instead, but schools of thought vary on how to handle it.
I think I remember Autostart events being the ones that will finish executing code even when you transfer maps, while Parallel Process ones won't.

You can have a Parallel Process activate an Autostart event, if you need to do this. I created a move-to-map system that uses this. The benefit is that you don't need to place a million events in a wide open space when you want the player to go to a new map after moving a certain distance. You can even teleport based on Terrain ID.
Pages: 1