Creating the Framework for an Adventure/RPG Hybrid in RPG Maker MZ

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Tutorial series on hold. About to start a needed project that will eat into my free time. Just to be clear, I am not abandoning this series. There's just no way I can juggle it and this project and still remain sane.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Well folks, yours truly had to spend a week in the hospital due to an infection and had to have surgery as a result. Life keeps throwing me curveballs. I am currently without a job and without insurance. So the full financial weight of the resulting medical bills is falling squarely on my shoulders.

What does this have to do with RPG Maker MZ or this tutorial series?

As I continue to look for regular work, I am also working on a MZ soap-opera-style series which I intend release on itch.io at a minimum price point of $1 per episode. Each episode will be released as quickly as possible and will last roughly 30 minutes.

As much as there is an aversion to using the RTP for games, that is exactly what I will be doing, with some modifications here and there to add elements pertinent to the on-going story. The focus is on character development and worldbuilding above monster bashing. If I do my job right as a storyteller, my choice of graphical assets shouldn't matter.

I figure that if I release episodes regularly, and if my storytelling is good enough, and if I can spread the word to enough people interested in seeing where things go, then at the very least I can cover some of my smaller regular bills. Anything that can take the edge off during this transitional period. I could do a go fund me campaign and beg for money, but I would rather produce something to offer in exchange.

Anyway... That's where I'm at. I have faith that things will turn around. Until they do, it's going to be rough.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
While working on the project I created an encounter system event (ENCSYS). Because it is a system event, it should be placed on a map before any non-system parallel events to ensure high priority processing.

ENCSYS references Region ID 5, which needs to be placed on the map where you want an encounter to be possible.

What it does:
It randomly selects a non-border X and Y coordinate, then checks that location to see if it is Region ID 5. If so, it moves the actual encounter trigger events to the coordinates. If not, it selects new random coordinates and checks them. The process repeats until Region ID 5 is confirmed. Once all encounter triggers have their location set, ENCSYS erases itself.

For those who are not aware, the Erase Event command removes the event until the player leaves the map and then re-enters it. This makes it ideal for making encounter locations reset and always be in a different location whenever the player enters a map that will have random encounters on it.

So why not just use MZ regular encounter mechanics?

With ENCSYS, you have precise control over how many possible encounter triggers will occur on a map. And because they are actual events, they can be given form as a visible character that can move bout on its own, or they can be invisible, non-moving triggers.. Whatever you want them to be. That lends itself to some clever battle simulation, that occurs on the map, rather than on a battle screen, if desired.

So let's look at the ENCSYS event itself:
Priority - Below Characters
Trigger - Parallel
Code:
◆Label:1
◆Control Variables:#0016 EncX = Random 1..15
◆Control Variables:#0017 EncY = Random 1..11
◆Get Location Info:EncReg, Region ID, ({EncX},{EncY})
◆If:EncReg = 5
  ◆Set Event Location:Enc1, ({EncX},{EncY})
  ◆
:Else
  ◆Jump to Label:1
  ◆
:End
◆Label:2
◆Control Variables:#0016 EncX = Random 1..15
◆Control Variables:#0017 EncY = Random 1..11
◆Get Location Info:EncReg, Region ID, ({EncX},{EncY})
◆If:EncReg = 5
  ◆Set Event Location:Enc2, ({EncX},{EncY})
  ◆
:Else
  ◆Jump to Label:2
  ◆
:End
◆Label:3
◆Control Variables:#0016 EncX = Random 1..15
◆Control Variables:#0017 EncY = Random 1..11
◆Get Location Info:EncReg, Region ID, ({EncX},{EncY})
◆If:EncReg = 5
  ◆Set Event Location:Enc3, ({EncX},{EncY})
  ◆
:Else
  ◆Jump to Label:3
  ◆
:End
◆Label:4
◆Control Variables:#0016 EncX = Random 1..15
◆Control Variables:#0017 EncY = Random 1..11
◆Get Location Info:EncReg, Region ID, ({EncX},{EncY})
◆If:EncReg = 5
  ◆Set Event Location:Enc4, ({EncX},{EncY})
  ◆
:Else
  ◆Jump to Label:4
  ◆
:End
◆Label:5
◆Control Variables:#0016 EncX = Random 1..15
◆Control Variables:#0017 EncY = Random 1..11
◆Get Location Info:EncReg, Region ID, ({EncX},{EncY})
◆If:EncReg = 5
  ◆Set Event Location:Enc5, ({EncX},{EncY})
  ◆
:Else
  ◆Jump to Label:5
  ◆
:End
◆Erase Event

The above configuration assumes five encounter triggers, named Enc1, Enc2, Enc3, Enc4 and Enc5, respectively. You can have as many as you want, but there needs to be a labeled block of the script to handle each of them.

When I am able to get back to doing the tutorial series, I'll be including the explanation for ENCSYS. It was always going to be an element I's be using.
 
Last edited:

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
For those new to RPG Maker, the Label and Jump to Label commands will quickly become your friends. In the above example, we are dealing with five different trigger events that must only have their locations set in region 5 tiles. So just the random X/Y coordinates by themselves won't cut it. Without region ID checking, the encounter triggers could end up being placed in tiles that are impassable to the player. This means before moving on to process subsequent encounter locations, the current one MUST be valid. By starting the section for each location process with a label and then making the event jump to that label if the location is not in a region ID 5 tile, it ensures that the section is repeated until the results are valid.

When we get to the NODESYS event, which will be a common event that gets called whenever the player attempts to harvest a resource node, there will be heavy usage of the label and jump to label commands. NODESYS will be a very large, complex event with lots of different elements, only one of which will need to be processed at any given time. So Jumping to different labels will route the processing of NODESYS directly to the relevant sections and finally to a label at the very end called "finish." Don't worry. When I add resource nodes to my project, I'll post detailed instructions for setting it up.

Using labels in dialogue events can allow you to jump from point to point in a conversation. Useful if you want to allow the player to go back and make different dialogue choices to go down different branches of the conversation without having to start the conversation over. One application of this is setting up an entirely conversation-driven store Using choices 2 - 5 for item options, with choices 1 and 6 reserved for previous and next you can use labels to jump directly between choice pages.

Please feel free to ask any questions you may have. I may not have the time to produce tutorial videos, but as you can see, I still want to share knowledge. The hold on the video tutorial series is a time management issue. I cannot be working on my project if I am working on tutorial videos. I will get back to doing them, but for now I need as much time as possible to work on the actual project.

Hoping the day finds you all well. Until next time...
 
Last edited:

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
A look at the project:

I've been building the overworld for Chapter One. Or more specifically the overworld for Chapter 1's first point of view character, Aron Parker... Chapter 1 will have 3 point of view characters: Aron, Moreen Trell and Aldebrand Vilar. Each will have their own unique sections of the overworld and will share other sections.

I thought I would share a look at one of the screens and its location on the overworld map as it has come so far:

Parker Farmhouse SW:
Parker Farmhouse SW.jpg
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Aron's Map as of 4/6/21
Aron Map 4-6-21.jpg
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
When completed, Aron's map will fill the entire image and consist of up to 221 screens. I cannot say exactly how many as some screens would be solid rock or forest, thus inaccessible. They will be represented on the overworld map, and built. The reason being is that in future chapters, I may make use of certain overlapping areas from previous chapters. Continuity is very important to me for world building. By already having sections of the map designed, not only will I not have to redesign them, but I can just move them to the correct branch in the map list tree and delete the branches that play no role in the chapter. I am, however going to try to make all screens accessible in some way, even if I do some sort of cinematic map scroll from a far-flung corner to where a character's point of view starts. And something to consider... Overworld screens represents what is on the surface of the world... Just because that screen may be solid mountain doesn't mean that there won't be caverns or dungeons below the surface occupying the same relative space.

I'm building the world to scale. As big as a house is on the inside is how big it is on the outside. Based on the 999 map limit, this means for large maps, like cities where I want to let the player explore streets and back alleys, the overworld for that chapter will be up to 884 totasl screens with up to 115 maps reserved for interior areas...

Interior areas will not use screen-by-screen navigation, but will be one contiguous map of equivilant size.

Regarding the edges of the map... While I hate invisible barriers in games, I don't want to physically wall an overworld map in. The idea is that everything needed for a character's point of view in a given chapter is in or accessible from that character's overworld.

Keeping Score:
While the focus of the gameplay is story, a game needs to keep score somehow. Every screen or map the player can access will increase an exploration variable. At the end of the chapter the percentage of the overall total of the chapter's possible exploration points will be displayed...

Other things like lore discoveries will be scattered throughout the overworld. Those will get their own score.

There will be items that can be picked up that will provide a score as well. In chapter 1, gathering grain will not only play a part in the story, but scattered around the map, will be extra grain that will exist just for earning points. Those who want to just play through he story and don't care about score can do so. But those who want to find everything that can be found in a game will have a way to measure their success...

There won't be too many hidden zelda-like secrets in Chapter One. It's more about introducing some of the characters and getting them started on their journey. But in later chapters, more of that sort of thing will start showing up and will be expanded upon. I will be placing... something... in one of the Chapter One overworlds that, while it won't have a function yet, later chapters one of the point of view characters introduced in Chapter One will learn about what it is and how it works, and if that character's journey leads them back home, revisiting that screen may prove to be productive...

The distance between points on the world map:
The City of Parl is a ten day journey to the east of Ilos, where the story will begin... Obviously, I am not going to be building a gameworld that includes a span of a map that would take 10 days to traverse.That would be insane... So going back to the invisible barrier at the edge of an overworld map, there will be an event in every edge tile that will make the character take a step backwards with a comment popping up like "Parls is a ten-day journey from hee, and I am in no way prepared for that." Or something like "Nothing but rough landscape as far as the eye can see..."

But...

If there is a road that leads to Parl, then Parl will eventually be a place the story will take the player. And at some point, the player will be prepared to take the journey. It just may not be in the first chapter. I know the story elements that need to be in Chaptr One. But I do not know where the story is going to ultimately go. But I will say this... Any character that has an actual name is a potential point of view character. So someone you bump into in a tavern who may have just one line of dialogue might be someone you end up playing or having in your party later.

Well, that's it for this info drop. Gotta get back to it...

You all have a good day...
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Today I bring you another screen from the project - The Crossroad:
The Crossroad.jpg
Located at the center of Aron's overworld map, heavily traveled paths lead off in all four directions. The north dirt path leads to the Parker farm, and the west dirt path leads to the Trell farm, where Moreen's point of view begins. The cobblestone path leading east leads to the city of Parl, which will factor into later chapters. The cobblestone path leading south will take the player to the village of Ilos itself, where Aldebrand's point of view begins, and where chapter one concludes.

And like last time, here is the current version of Aron's map:
Aron Map 4-11-21.jpg
I used tiles from the overworld A tileset to give a general reference to the type of screen that will be there. As I complete a screen, I update the paralax image and with a 48x48 scaled image of it and delete the overworld tile The gray solid mountain tiles in the upper left corner represent exactly that: Solid mountains, which means the player will not be able to actually enter those screens. But the sandstone tiles below will be the foothills where rocky landscape gives way to the roots of the mountains.

If you look at the completed north edge of the map, you will notice that every part except the last three tiles has open edges leading north. This is what I was referring to in the last post where I talked about using invisible barriers at the edge of the overworld map. Chapter One does not take the player that way, and if the player tries to go that way, the character will take a step back with a message about the rocky landscape continuing ahead, but giving way to more boring farmland...

The castle and pavement tiles in the bottom left corner are placeholders, representing where the Trell house and herb field will be.

Chapter One's first two tasks are completable. The player must complete them before the game will allow Aron to travel further west or south than the crossroad. Aron is a responsible individual. He knows he's got duties to complete before he can go wandering off, and just like the edgese of the overworld, attempts to go beyond those bounds will fail.

Regarding encounters, the ENCSYS event has been implemented and tested, and it works as intended. I just will need to hook encounters up to the triggers once I decide what those will be. There are a lot of woods and rough terrain in the area. Probably wild animals. This region is relatively peaceful, and like I said, this series is not supposed to be about fighting wave after wave of enemies to grind experience for leveling up. But not having anything to encounter as one wanders around exploring the map just feels too... Dead...

One technical issue I ran into came after adding a couple of visustella plugins so I could get access to self variables and extended self switches, as well as diagonal movement, I found that a diagonally moving character can slip between border tiles and end up in a screen's corner. This causes the region ID based screen transitions to fail. With the default ability to only move U D L and R, i was impossible to end up in a corner. The solution is to use an empty event with priority set to same as characters. This creates an invisible solid object that the player cannot move into. So if any of you are using my NAVSYS technique, and you also use a diagonal movement plugin, this will be an occasional issue..

Well that's it for this update.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
OVERWORLD SCREEN CREATION
Hello, everyone. I'm bak with another how to post that offers examples based on what I am doing in my project.

I am a little unorthodox in how I design my overworld screens. As you know, my methodology for overworld travel is similar in style to the original Legend of Zelda. Screen by screen. This was a conscious choice on my part as this framework is intended to create a navigational style of Zelda with the sort of character interactions and story progression of a CRPG like Dragon Warrior or Final Fantasy as they exiasted on the NES/SNES.

When you look at classic Zelda's overworld map, it is clearly a man-made maze, but with very little organic aesthetics. And when you look at a classic Dragon Warrior or FF overworld, you get a much more organic structure to the different land types. and how they are placed in relation to each other, but those maps are designed to convey large landscapes where each tile could be representative of a square mile, or more.

In order to blend the aesthetics of FF/DW maps with the maze-like functionality of Zelda maps, I sort of take myself out of the actual design equation. I use a random number generator to determine where impassible tiles go, such as trees, rocks or mountain tiles. First I do this for the tiles at the borders of the screen. This establishes the entrances and exits to the screen. I then do the same thing, row-by row for the tiles for the rest of the screen. This random clutter of impassable tiles creates irregularly shaped physical and ensures that no two screens that the player can visit will be identical.

I decide the primary paths the player needs to take, for example, how the roads and dirt paths wander through the land, and in screens that use those, I still do the random number process with natural barriers, but I work around the paths. The result makes it feel like the path was made around the natural barriers, when in fact it was designed the other way around.

One negative to building a world this way is that the way the impassible tiles connect, some areas are sealed off from each other by default. In a finished game, this would be unacceptable. Once all the primary paths are established, what I call the connectivity pass begins. This is where I identify all the places that cannot be reached and do one of two things: Either I fill those areas in with the apropriate impassable tiles, or I remove some barriers and make sure that they can be reached. The former is done when a screen is meant to be in congested areas like dense forests or mountain passes, where there's really only one or two paths to take. The latter is done when I want the region to be more crazy and maze-like. How I decide which action to take is based on how the overworld map looks.

The only screens that may have inaccessible areas on them are the once at the border of the overworld itself. As mentioned in a previous post, I want to convey the idea of the world extending beyond the scope of a given chapter's or character point of view's general area. Any sections of a screen that might be inaccessible, but include an exit to "the world beyond" will be left alone. If I decide to do an overworld in that region, then those inaccessible sections will be accessible to the new locations, and in fact, the areas that were part of the old areas will be what is inaccessible. So it would be like looking at the same screen but on the other side of the "wall"

When I work on adjacent screens, I make sure that the entrances and exists line up with each other, so all of the screens fit together

Even though I don't design the screens voluntarily, the process is still quite involved and time consuming. There is work involved. But by taking myself out of the process and relying on random distribution, the results of how the overworld as a whole looks is far more organic and natural, and even the more maze-like regions look more like say, a forest with twisting paths that lead back on themselves or into dead end where the trees are too dense to get past.

As I said, it is my goal to make almost all screens accessible fully accessible. or ast the very lease, account for the ones that are not.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Just a quick update this time. No full-length novel's worth of me rambling.

Here is the latest version of the overworld map. Using a combination of filters in Gimp, I have made the parallax image look like an oil painting on canvas. This will be the form it will take in-game when the player calls up the map. If course, this version is at a higher resolution, but I've tested this in-game, and it doesn't look bad at normal MZ resolution...

To apply this effect to your own images, first scale the image up to at least 1080 pixels in height. Whe width will automatically scale correctly unless you unlink height and width scaling. Next, go to filters, then under Decor, select "Fuzzy Border". Then do Filters > Artistic > Oilify. Finally do Filters > Artistic > Apply Canvas.

Let me know what you think.

AronMap041721.jpg
 
Last edited:

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
I decided not to do a separate resource node management system for chapter one. There isn't too much resource harvesting to be done, in terms of the variety of resources. In later chapters, that will be a different story, as the characters will be out in the world a lot more, each doing their own thing, which will have a variety of resource needs

As it stands, a resource node has 3 event pages. The first one randomly selects the location and makes sure that it is valid (region ID 5). The second controls the conditions for harvesting the resource from the node. The third is just an empty page for when the node has been consumed.

An alternative 2-page version will be used for respawning nodes as in "Legend of Zelda: A Link to the Past" where bushes, tall grass, pots and such were always regenerating when you leave the screen and come back. That approach plays into a need to grind money, magic and health among other things.
I am making the nodes in Chapter 1 non-respawning. They are associated with tasks the player needs to perform and I want to place them on specific screens, but leave their precise location random.

Using vanilla MZ, the nodes willrandomly place themselves every time you enter the screen they are on. Using the visustella plugins that allow self variables, the nodes can be made to remain where randomly placed. I'm planning on going that route for the release version of the project, and will provide the details at that point. That same plugin allows diagonal character movement, which is why in that previous update I advised creating a solid but empty event in any corner that can be diagonally reached to avoid breaking the screen-by-screen map transition handled by NAVSYS. It is not necessary to do this if you are not using a plugin that allows diagonal movement, as the player will never be able to move into a corner.

Because I want to keep this thread about teaching as well as offering project news updates, here are the event pages for your reference. To some of you, this is old hat stuff, but for those new to RPG Maker MZ, it might just be a useful foundation to build upon and experiment with.

Page 1
No Condition, No Image, Priority = Below Characters, Trigger = Parallel
Code:
◆Label:init
◆Control Variables:#0019 NodeX = Random 1..15
◆Control Variables:#0020 NodeY = Random 1..11
◆Get Location Info:NodeReg, Region ID, ({NodeX},{NodeY})
◆If:NodeReg = 5
  ◆Set Event Location:This Event, ({NodeX},{NodeY})
  ◆Control Self Switch:A = ON
  ◆
:Else
  ◆Jump to Label:init
  ◆
:End

Page 2
Conditions: Self Switch A, Image = Whatever you want the node to look like, Priority = Below Characters, Trigger = Action Button
Code:
◆If:Party has Knife (Include Equipment)
  ◆Text:None, None, Window, Bottom
  :    :You pry a healing herb out of the dirt with your knife...
  ◆Change Items:Healing Herb + 1
  ◆Control Self Switch:B = ON
  ◆
:Else
  ◆
:End

To make the node respawn when the player leaves and comes back, replace
◆Control Self Switch:B = ON
with
◆Erase Event
and do not create the third page

Page 3
Conditions: Self Switch B, No image
Priority = Below Characters
Trigger = Action Button, Event Touch, or Player Touch
Contents: None

I do not have an updated image of the overworld this time.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Yesterday, I talked about how the randomly placed resource nodes can be made to retain their position through the use of VisuStella Plugins. I decided to go ahead and implement this functionality now rather than later, so today, I am going to tell you what you need to do to get set up to add the functionality yourself. If you don't mind the nodes not retaining their position, then feel free to skip this, as it is very much a matter of personal design preference.

The first thing you want to do is go to http://www.yanfly.moe/wiki/Category:Visustella#VisuStella_Plugins_for_RPG_Maker_MZ

Click on Core Engine VisuStella MZ

Download the Sample Game Project. It contains several plugins from the VisuStella MZ library, accessible from its plugins folder. You are going to need to copy VisuMZ_0_CoreEngine and VisuMZ_1_EventsMoveCoreand paste them into your project's plugins folder.

In the MZ editor, to the right of the Database button, there is the Plugins button. Click it.

Double click the first empty line in the list.

Click on Name to bring up a list pf plugins that you have in the plugins folder. Select VisuMZ_0_CoreEngine and then click OK.

Do the same thing again for VisuMZ_1_EvewntsMoveCore.

With both of these active, Go into page 1 of the node event that you want to retain its location after being randomly placed.

Right Click on the Control Self Switch command and click New.

On page 3 of the Event Commands window, under Advanced, Click Plugin Command...

Click on Plugin Name and select VisuMZ_1_EventsMoveCore, and then Click OK

In the dropdown menu under Command Name, select "Event Location: Save"

The first line under Arguments is now populated with Event ID in the name column and 1 in the value column. Double click that line and change the value of Event ID to 0. This makes he event you're editing the target of this command, which is what we want. Now click OK


Code:
  ◆Plugin Command:VisuMZ_1_EventsMoveCore, Event Location: Save
  :              :Event ID = 0
has now been inserted into page 1's contents.

This is all you have to do. Once the node is relocated to its random location, its location is saved, and will now be at that location going forward. We didn't have to set up a self-variable to achieve the result we wanted.

So now we've learned how to get VisuStella plugins into our project, and how to use plugin commands. This one plugin is loaded with some pretty powerful stuff. Read the help file to learn he basics of working with the different features, or go back to the Wiki page and look at the full article on everything you can do. If you run your project you will see that diagonal movement is also now active.

Please feel free to play around with anything you find interesting.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Last night, I decided that I would make battle triggers visible by resizing the enemy sprites to fit a single tile and be moving around randomly on the screen, startin at random locations that are not retained. This mimicks the way that enemy encounters were given overworld presence in Zelda 2. When the player and one of these triggers connect with each other, combat is entered.

I'm not using side-view battlers for combat, so it is treated more like combat in Dragon Warrior where you don't see the party represented in the combat area.

Also, once an enemy is defeated, it's gone and will not regenerate.

Every screen is going to have either an enemy or a resource node on it. This way, it will be possible to tell at a glance where the player has been. No enemies or nodes means a screen has been cleared.

Now let's talk about resizing the enemy sprites to fit a single tile.

In Gimp, load up one of the sprites from the enemies folder. Create a new image with fill with transparancy where both Width and Height are the same as the largest dimension for the original graphic. Copy the enemy graphic and paste it into the new image and move it down where the lowest part of the selection is aligned with the bottom. You can use your arrow keys to do this.

Next, do an image > Scale Image and set the size to 48x48. then click scale.

Now copy the result and paste it into an empty tile of a custom tileset that you will use in either the D or E tile pages.

In MZ, when you create the combat trigger event, give its page 2 image the single tile graphic you created.

You can then make sure that movement is set to random, priority is set to same as characters and trigger is set to event touch. You'll use the contents to script what happens when the player connects with the trigger. Right now I just have it playing a sound effect as a placeholder.

Once enemies and troops are defined in the database for this encounter type, the sound effect can be replaced with commands to start a battle, as well as controling how the battle plays out... But right now we just want to make sure that something actually happens when the player and enemy connect.

The enemy sprites for the triggers will not be animated. Even so, it makes gameplay feel more "Alive" than it does with randomly placved triggers that cannot be seen. But you should feel free to go that route if you wish. It's just a matter of personal design preference...

Please, if you have any questions or feedback, please post them here. I'm starting to feel like I am just shouting into a void..
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
A CHANGE IN DESIGN
Okay... the more I was working with the large 2x2 tree tiles in MZ's Outside B tileset to build my forest screens, the more I began to realize that the results were not giving me the nostalgic vibe of playing classic Legend of Zelda. While the ability to place those tiles in relative offset positions to each other breaking up the "grid-locked" look of classic Zelda's tree tiles, It also presentas a more technical problem in terms of my series when I start implementing burnable or chop-able trees. To make a 2x2 tree burnable or chopable inolves working with large events, and the way they handle the interactable tile creates some creativity challenges that I consider to be not worth having to deal with. In Zelda, there were a lot of burnable trees. I do not want to have to create special-case handling for every single one of these I want to place in my game. And I don't want togo in a route that will make others who may follow along with my framework to have to jump through extra hoops to make the game do one simple thing that can be easier handled using single-tile trees and related events.

I am therefore, replacing all 2x2 tree tiles with 1x1 tiles in a 2x2 pattern. The layout of my existing screns will not change.

When I play-tested some of the screens after making this change, I actually got that classic Zelda vibe. There is something to be said about a visual style that harkens back to one's childhood memories of the excitement of exploring a gameworld filled with secrets waiting to be discovered. But also knowing that, when I release this project, and the package of resources that will come with it, namely a blank project with all the framework-specific variables defined, with all events created specifically for the framework placed in a map waiting to just be copied and pasted into one's own map screens, ready to use without hastle, I really feel like this decision will make for a better end result according to my design goals.

I'm going to share two screenshots of the same screen wit a before and after comparison, and I would really like feedback on it.

BEFORE:
Map067a.png

AFTER:
Map067b.png

Remember what I am aiming for here... A game with a strong classic legend of zelda feel but with character development in a long-running story. So what do you think?

Before, making any of those trees burnable would require a lot more setup, overcomplicating what should be a simple function. After, absolutely every one of the trees could be made chop-able or burnable... Or both... In fact, I've thought of making tree events have both effects so if you have an axe, you can chop them and it will leave a stump. If you burn the stump, it will go away, or reveal a secret underneath. If you burn the tree directly, the tree goes away or reveals the secret underneath. This will allow a measure of deformability to the game world, depending on how many destroyable tree events I decide to place.

In cases where I want trees to just block the player until they find an axe, this will come in very handy. But maybe I want to have a tree both block a player AND hide a secret. That's where burning it will come into play. One single event can be set up to accomplish the goal for both.

Obviously, I don't want to make the entire world destructable. But others may not care and do exactly that. My framework will allow this.
 
Last edited:

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
I decided to be a little bold and blend single tiles with multi-tiles to get a more varied look. Where a tree, rock or mountain grouping is 2x2 or larger, I use the multi-tile approach. Where they stand alone or are in a straight line, I leave them as single. It retains much of the classic Zelda vibeI was aiming for, while also making clusters of the object look densely packed.

Then I decided to go one step further. Using the same event scripting in the randomly-placed resource nodes, I have replaced the single tile objects with events, so they initially will be placed randomly on their screens. They will retain their initial location, so this means that some of the layout of every screen that has single tile objects like rocks and trees will be different every time the game is started new. These will be destructable with the correct tool.

1.jpg

2.jpg

A step further, even... If the party has the Axe, the tree is cut down, leaving a passable stump.

3.jpg

The stump can then be burned if the party has a torch.

4.jpg

Logically, if the player has a torch, the tree can just be burned without leaving a stump.

5.jpg

The tree event consists of five pages and uses all four self switches.

Conditions - NONE
Image - NONE
Priority - Below Characters
Trigger - Parallel
Code:
◆Label:init
◆Control Variables:#0019 NodeX = Random 2..14
◆Control Variables:#0020 NodeY = Random 2..10
◆Comment:If the object you want to be randomly placed is going
:       :to be solid (Priority=Same As Characters) X needs to be
:       :a random number from 2 - 14 and Y needs to be a random
:       :number from 2 - 10
◆Comment:If the randomly placed event is going to be above or
:       :below characters, the X can be a random number from 1
:       :to 15 and Y can be a random number from 1 - 11
◆Comment:This will ensure that the player cannot get stuck in
:       :solid objects.
◆Get Location Info:NodeReg, Region ID, ({NodeX},{NodeY})
◆Comment:If your map will use more than one type of destructable
:       :barrier, you are advised to use a different region ID
:       :value for each, otherwise they may end up overlapping
:       :each other, which may interfere with interaction. 5
:       :is the default Region ID to check.
◆If:NodeReg = 5
  ◆Set Event Location:This Event, ({NodeX},{NodeY})
  ◆Plugin Command:VisuMZ_1_EventsMoveCore, Event Location: Save
  :              :Event ID = 0
  ◆Control Self Switch:A = ON
  ◆
:Else
  ◆Jump to Label:init
  ◆
:End

Conditions - Self Switch A
Image - Single tile tree
Priority - Same as characters
Trigger - Action button
Code:
◆If:Party has Torch
  ◆Play SE:Fire1 (90, 100, 0)
  ◆Control Self Switch:C = ON
  ◆Jump to Label:End
  ◆
:End
◆If:Party has Axe
  ◆Play SE:Blow4 (90, 150, 0)
  ◆Control Self Switch:B = ON
  ◆
:End
◆Label:End

Conditions - Self Switch B
Image - Tree stump tile set to passable in the tileset section of the database
Priority - Below Characters
Trigger - Action Button
Code:
◆If:Party has Torch
  ◆Play SE:Fire1 (90, 100, 0)
  ◆Control Self Switch:C = ON
  ◆
:End

Conditions - Self Switch C
Image - NONE
Options - Stepping
Priority - Below Characters
Trigger - Parallel
Code:
◆If:Self Switch B is ON
  ◆Set Movement Route:Player
  :                  :◇1 Step Backward
  ◆Set Movement Route:This Event (Wait)
  :                  :◇Image:!CoO1(1)
  ◆
:Else
  ◆Set Movement Route:This Event (Wait)
  :                  :◇Image:!CoO1(0)
  ◆
:End
◆Wait:60 frames
◆Control Self Switch:D = ON

New element... Change Image as a movement route command. In order to make sure that the tree or tree stump dousn't get replaced by the flames, I created a character walker sheet where the top 3 (facing down) tiles of each are made up of the tree and tree stump, respectively, with the flames layered on top. It can function with just the flames form the !Flames animated tile sheet, but looks sloppy.

Conditions - Self Switch D
Image - NONE
Priority - Below Characters
Trigger - Action Button
Contents - NONE

As it is now, the tree event merely blocks player movement untill chopped with an axe or burned with a torch. If you want to make burning the tree or tree stump reveal hidden stairs like in classic Zelda, give this page's image some stairs down, and setup a normal transfer player command for whatever map you want it to go to.

And yes... there will be no way to know which tree is hiding the stairs.

Well, that's it for this update and explanation. Plese let me know if you have any questions

So far, the only part of the framework that requires a plugin is the retained randomized initial position of objects. Everything else is handled with MZ right out of the gate.

EDIT - 5/10/21
To make working with the tree event as easy as possible, in the framework, I've got it driven by a single common event called "Random Tree". The actual tree object itself is still a 5-page event, but the scripting listed above is replaced with two commands. One to set a variable called Function, and the second to call the Random Tree common event. The first thing the common event does is check the value of Function and route to the correct section in that common event.
 
Last edited:

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Work continues on redoing the overworld using the model described above. As of this writing, there is no new mechanics to discus, other than to state that I have also folded breakable rock faces that need a pickaxe into the randomly placed events. As I create a screen, I use the same sort of rule that applied to where bombable rock faces could be found in classic Zelda. They will only be found on rock face tiles in a relative position north of the player, so no breaking cliff tiles to the left, right or down. They will not exist on the border tiles. They will not exist on rock face corner tiles. After the screen's layout is completed, I use region ID 7 to designate legal tiles for breakable rock faces.

Region ID 6 is reserved for the placement of random 1x1 tiles like for Region ID 5, but is used when it is undesirable for overlapping events to occur. For example, wheat stalks are a mission-critical resource. If assigned to the same region ID as rocks, depending on which gets placed first, the rock may cover up the wheat stalk and the player may nit know it is there. By assigning ID 5 to the wheat and ID 6 to the rocks, it ensures that overlapping is impossible.

If you do not care whether or not different types randomly placed events overlap, then you don't have to worry about different region IDs. But if you want to exercise finer control over where different types of solid destructable events occur, using 2 or more different Region IDs establishes the rules you want their placement to obey...

RPG Maker MZ can stack multiple events in the same x/y coordinates while in-game. They just cannot be placed in the same coordinates within the toolset.

The way things are shaping up, every screen in my overworld map (except for solid mountain areas) is mechanically reachable... But because of the random nature of the placement of the destructable events, and the random nature of how the tools needed to break them will be generated, some screens may be blocked. The linear story of each chapter will be completely doable and steps will be taken to ensure that essential paths will remain unblocked. Everything else will be like a game of solitaire, where sometimes you can clear the board, and sometimes you can't. This builds in replayability by default for those who want to try to find every secret and access every possible screen.

As soon as I finish with basic overworld creation, which should go a lot more smoothly now that I've settled on a model and ruleset, I will begin hiding secrets.
 

GBJackson

Veteran
Veteran
Joined
Dec 11, 2016
Messages
139
Reaction score
121
First Language
English
Primarily Uses
RMMV
Hello, everyone...

I know it's been a little while since my last update. I have recently started training for a new job, so I haven't had much time to work on the project. But I HAVE been working on it.

I wanted to take a moment and discus my plans for dungeon design.

I already indicated that interior maps will not be using screen-by-screen transitions, but rather, would be one single map, but scaled according to how many overworld screens they would span. The chief reason for this will be that interiors will use a more specific design approach, with less of an emphasis on random placement of solid single tiles. By breaking an overworld into screens, those randomly placed objects that make each screen unique from game to game use the events per map limitation. If the overworld was one contiguous map, it would be impossible to achieve the same degree of random distribution of events.

Interior maps are in essence story elements. Places that exist to serve a specific purpose. This does not eliminate a measure of randomness from their application, but it would be more aboutwhat might be placed at specific locations. An example of which would be fixed locations where a treasure or tool might appear. Finding a dungeon or cave system connected to secret entrances on the overworld will be great potential opportunities to find and obtain replacement tools which will allow even more of the overworld to be explored. But if there is a 50% chance that a object spawnpoint will be inactive and a 1/x chance of a possible item being there if it is active, then even the dungeons and caves will be different enough each play-through to warrant full exploration.

Story-specific interiors will always be fully accessible, and while they too will also include random loot that may or may not be there from one playthrough to the next, items specifically needed for the current chapter story will.

Regarding the end of a chapter's story aspect, the game will not end. You'll still be free to explore the world. This will allow the player to get the story out of the way and then explore at their leisure, or not even start the story until after they've explored... While story progression may be linear, I do not want gameplay to dictate the order in which the player must experience these two aspects.

While this update does not specifically teach something, it let's you know where I'm going to be going with this. And what I have planned is achievable using elements I have already shared. Rest assured that when I get to those elements in my project, I will be sharing the event setups. In the meantime, try experimenting with what I've shared so far and see if you can figure out how to make MZ do what I've talked about. Feel free to share what you come up with here. And also feel free to ask questions.

Until next time...
 

Latest Threads

Latest Posts

Latest Profile Posts

Okay, so it seems I've found a major bug in VNM. Check my thread about variable buttons in the support forum for more info.
Man, this quick One Map game is causing unprecedented amounts of trouble.
I always end up having issues with things i'd never expect.

Capture.PNG

Those friggin mountains man xD
Time for my daily walk/jog ''Literally starts raining while I open the door''

Forum statistics

Threads
112,401
Messages
1,068,062
Members
146,053
Latest member
komradiv
Top