CHAPTER 12

image

Final Preparations

We are fast approaching the end of this book. Our game, short as it may be, is nearly complete. All that is left is to populate the mountain town of Rocksdale, connecting it with the world map, and create the game’s final dungeon. Well, all that and filling out the random encounter tables for our third dungeon and finishing the dragon statue event we started back in Chapter 6. I’ll be covering the final dungeon in Chapter 13. When last we saw our heroes, they were busy solving a statue puzzle to gain entry into Rocksdale. Make sure that you have a Transfer Event set up within the puzzle area, so that the player can return to the mountain village after he or she is done. With that ready, let’s get started!

Populating Rocksdale

A town isn’t much of one without nonplayer characters (NPCs) and building interiors. As with Seaside, here’s some setting flavor for Rocksdale.

The quiet town of Rocksdale has always been a favorite destination for travelers seeking to settle down and otherwise retire from the outside world. In recent times, monsters have started to threaten the townsfolk’s safety, prompting a few of the villagers to leave their seclusion and train themselves for the day when the foul creatures decide to do more than just harass. The village elder is a wise man who knows of a secret passage that leads to the other side of the mountain ridge, where a solitary castle and its dark master await the chosen one of legend . . .

Riveting, I know! As compared to the Port Town sample map, that for the mountain village is more spacious but has fewer amenities. Only an inn and an item shop can be found there. You may decide to repurpose one or more of the houses to add weapon and armor shops, but there’s nothing wrong with compensating only for the fact that we have but one of each of those shops in the entire game by adding more relevant loot to the dungeons we already have. It wouldn’t be the first game in which most of a party’s equipment has to be found outside of town shops. (See Figure 12-1.)

9781484207857_Fig12-01.jpg

Figure 12-1. The mountain village of Rocksdale. The top two houses are sealed off

Here’s a list of the main plot events that I will be covering within Rocksdale:

  • When the player goes up the steps into the village, the town greeter will inform the player that he/she should make his/her way to the large house in the northeastern part of the village.
  • The player reaches the dwelling and finds the village elder, named Wren. Wren has been waiting for Eric’s arrival for nearly two decades. He speaks of a malevolent being that lives within a castle in the middle of a dark swamp and of the sword that only the chosen one may wield.
  • Wren tells the player that a secret passage exists within the village. He further explains that it leads to the far side of the mountain ridge. More important, the passage puts the adventuring party within reach of the villain’s castle.

The Town Greeter

Our first order of business will be to place the town greeter on the map. Let’s place our relevant NPC at (17,34). While I’m going to have the greeter give the bulk of his conversation via an Autorun, I’ll still have him say a few words when talked to a second time.

@>Text: -, -, Normal, Bottom
:     : Welcome to Rocksdale, adventurers. We don't have
:     : much, but I hope you enjoy your stay.

First, here’s the Parallel Process event that we’ll use to flip the switch for the Autorun to trigger.

@>Control Variables: [0002:X] = Player's Map X
@>Control Variables: [0003:Y] = Player's Map Y
@>Conditional Branch: Variable [0003:Y] == 36
   @>Conditional Branch: Variable [0002:X] >= 16
      @>Conditional Branch: Variable [0002:X] <= 18
         @>Control Switches: [0033:MountainArrival] = ON

There’s nothing in the above code that we haven’t already performed many times before. We want to trigger the Autorun in this way to prevent the game from hanging. Check the following code to see the Autorun event in all of its glory.

@>Show Balloon Icon: [Villager], Exclamation, Wait
@>Text: -, -, Normal, Bottom
:     : Did you two reach this place through the mines?
@>Text: 'Actor5', 6, Normal, Bottom
:     : We did.
@>Text: -, -, Normal, Bottom
:     : The villager's eyes widen in disbelief.
@>Text: -, -, Normal, Bottom
:     : You must go visit Wren. He lives in the large
:     : dwelling at the northeastern part of town. He has
:     : been waiting for a long time.
@>Text: 'Actor4', 0, Normal, Bottom
:     : For us?
@>Text: -, -, Normal, Bottom
:     : I believe it would be best for him to speak of it
:     : himself.
@>Text: 'Actor5', 6, Normal, Bottom
:     : Very well.
@>Control Self Switch: A =ON
@>

An exclamation balloon will be displayed over the villager’s head when the Autorun starts. After the short conversation, we switch on self-switch A. We make page 2 of the event have a non-Autorun trigger, and that completes our first task of the chapter.

Creating the Village Elder and His Home

Next, we need a worthy interior for the village elder. We’ll use the Village Headman’s House F1F sample map for our purposes. I removed the staircase, changed the dirt floor in one of the rooms to wood, and added a single bed to that same room. (See Figure 12-2.)

9781484207857_Fig12-02.jpg

Figure 12-2. Screenshot of the tweaked Village Headman’s House sample map available in RMVXA

We’ll place the village elder himself at (13,14). This event is essentially plot exposition for the player. He/She gets to learn a little more about the game world and then receives his/her next main objective. Take a look at the following for the event code.

@>Show Balloon Icon: This event, Exclamation, Wait
@>Text: 'Actor4', 0, Normal, Bottom
:     : I'm Eric.
@>Text: 'Actor5', 6, Normal, Bottom
:     : And I am Noah.
@>Text: -, -, Normal, Bottom
:     : I am Wren, the leader of this small village. It
:     : was the father of my father's father, king of the
:     : western lands, who said that you would return.
@>Text: 'Actor4', 0, Normal, Bottom
:     : You're not making any sense, Wren.
@>Text: -, -, Normal, Bottom
:     : Noah clears his throat.
@>Text: 'Actor5', 6, Normal, Bottom
:     : Perhaps it would be best to allow him to
:     : speak.
@>Text: -, -, Normal, Bottom
:     : My ancestor claimed that the chosen one would return
:     : to the world in its time of greatest need. I beseech
:     : your aid to defeat the dark master.
@>Text: 'Actor4', 0, Normal, Bottom
:     : It is what we're here for.
@>Show Balloon Icon: This event, Music Note, Wait
@>Text: -, -, Normal, Bottom
:     : Wonderful! There is an orb of power that will aid
:     : you in your quest. My ancestor claimed that it
:     : is hidden within the lowest level of the castle.
@>Text: 'Actor5', 6, Normal, Bottom
:     : How did he know that?
@>Wait: 30 frame(s)
@>Show Balloon Icon: This event, Silence, Wait
@>Text: -, -, Normal, Bottom
:     : Isn't it obvious? The castle where the evil
:     : enveloping our land resides was the king's home
:     : in times past.
@>Text: 'Actor5', 6, Normal, Bottom
:     : In hindsight, it all makes sense. How do
:     : we get there?
@>Text: -, -, Normal, Bottom
:     : There is a secret passage inside of the village
:     : temple. Tap the wall three paces north of the
:     : northeastern pillar.
@>Text: 'Actor4', 0, Normal, Bottom
:     : Thank you, Wren!
@>Text: -, -, Normal, Bottom
:     : On the contrary, thank you.
@>Control Switches: [0034:ElderTalk] = ON
@>Control Self Switch: A =ON

As with most plot-advancing events, this one is important, not for what it does internally, but for the information that it gives the player. Thanks to the village elder, the player learns that the castle inhabited by the mysterious dark master used to be home to the king of the western lands. At the end of the conversation, we flip on the ElderTalk switch, which allows the player to find the secret passage within the temple.

The Temple of Rocksdale

I used the Temple sample map to create the area in question. I erased the side sections, leaving only the central portion. In addition, I changed the style of the temple walls and the pillars to give a rustic feel. The secret passage is visible in Figure 12-3, but there’s another event that may not be as easy to see. I placed a Same As Characters/Action Button event on the statue’s lower half. If the player interacts with the statue, he/she will be teleported to Seaside. Where exactly? Take a look at Figure 12-4, to see.

9781484207857_Fig12-03.jpg

Figure 12-3. A screenshot of the upper half of the temple

9781484207857_Fig12-04.jpg

Figure 12-4. A screenshot of where the player lands if he or she touches Rocksdale’s statue

Because this statue is two squares tall, we need a pair of events to draw it. The top half has a priority of Above Characters and no commands. The lower half has a priority of Same As Characters and returns the player to the mountain village if he/she touches it.

Image Tip  If you want to make it so that the statue at Seaside is only visible after the player has used Rocksdale’s statue, you can add an appropriate condition to both of the events. ElderTalk will work, as will creating a new switch that is flipped the first time that the player uses Rocksdale’s statue.

Leaving Rocksdale

The secret passage event is three pages long. To use the appropriate wall graphic for the first two pages of the event, you’ll need to add Inside_A4 to tab D of the Exterior tileset in the Database. Because we don’t want the player to find the passage ahead of time, the first page will have no conditionals and no event commands. The only thing that the first page will have is the wall graphic. Page 2 will require that ElderTalk is switched on and shares the same graphic as page 1. However, if the player interacts with the wall using the Action Button, the event in the following code is triggered.

@>Text: 'Actor4', 0, Normal, Bottom
:     : This should be the place.
@>Text: -, -, Normal, Bottom
:     : Eric taps the wall with his knuckles.
@>Wait: 60 frame(s)
@>Fadeout Screen
@>Play SE: 'Push', 80, 100
@>Text: -, -, Normal, Bottom
:     : You have found a secret staircase!
@>Control Self Switch: A =ON
@>Fadein Screen

The use of Fadeout/Fadein Screen in page 2 is so that we can switch to page 3’s event graphic off-camera via the usual self-switch toggle. Figure 12-5 shows a visual of what it looks like in-game.

9781484207857_Fig12-05.jpg

Figure 12-5. Eric finds himself staring at a staircase

Page 3 of the secret passage event has a Below Characters priority and a Player Touch trigger. It requires self-switch A to be on. The first time that the player takes this passage, we want to display some extra text. Thus, we start page 3 with a conditional branch requiring self-switch B to be off. If it is, we display the additional text; otherwise, we skip straight to the transfer event.

@>Conditional Branch: Self Switch B == OFF
   @>Control Self Switch: B =ON
   @>Fadeout Screen
   @>Text: -, -, Normal, Bottom
   :     : Eric and Noah walk down the steps and find
   :     : themselves in a rocky passage.
   @>Text: -, -, Normal, Bottom
   :     : Several minutes later, they find themselves at a
   :     : new location...
   @>Play SE: 'Move', 80, 100
   @>Wait: 60 frame(s)
   @>
: Branch End
@>Transfer Player:[003:Field 3] (017,054), Up

If you were to play-test the game after adding that specific event, you would find a considerable lack of screen after being transferred back to the world map. We could add in the Fadein Screen command directly before Transfer Player, but that would look somewhat sloppy in execution. Instead, go to the world map’s Parallel Process transfer event and add the following to it:

@>Conditional Branch: Variable [0003:Y] == 54
   @>Conditional Branch: Self Switch A == OFF
      @>Fadein Screen
      @>Control Self Switch: A =ON
      @>
   : Branch End
   @>
: Branch End
@>

We use a self-switch conditional branch within the coordinate conditional, as we only require this to trigger once (to match the fading-out sequence caused at Rocksdale’s temple). We use Y == 54, as the player has no chance of reaching that coordinate on the world map before this point in the game.

Image Caution  Be very careful with the preceding example when applying it to your own games. In a more open world map, your players might cross your declared coordinate(s) prematurely during the course of their adventures. When they get around to triggering the area transition, the fade-in is functionally nonexistent, and the game will hang.

With all that said and done, Eric and Noah will find themselves near the dark villain’s castle, as shown in Figure 12-6.

9781484207857_Fig12-06.jpg

Figure 12-6. Surrounded by poison swamps, the final dungeon awaits!

Before closing out this section, here are some ideas to flesh out Rocksdale.

  • Have one of the villagers give the player a sidequest involving the two scarecrows in town. You could have them attack the player, when examined. When both are defeated, the player is attacked by a puppet-master. Defeating the mini-boss completes the sidequest.
  • We originally had most of the default items in RPG Maker VX Ace (RMVXA) available for sale in Seaside. Create some items specifically for sale in Rocksdale and move the Elixir from Seaside to the mountain village.
  • Add several NPCs, to liven up the village. The locals should talk mostly about the monsters threatening to attack. Have one of them make reference to Amanda.

Next, we should populate the world map’s Regions and the mines with enemies. As of now, only the landmass containing Seaside includes random encounters. Afterward, we’ll start working on the game’s final dungeon.

Enemies of the World

To be fair, I could have covered this earlier in the book (arguably much earlier, in the case of the second landmass), but I figured it’d be better to clump them all here, away from the central ideas they would have otherwise cluttered. After all, I also have the dragon statue event back at the Dark Spire that I still have to complete. It’s as good a time as any to go off on this tangent.

First, take a look at Figure 12-7, for the full encounter list that we’ll be using for the world map.

9781484207857_Fig12-07.jpg

Figure 12-7. The encounters list for our game’s world map

We’ll be using Regions 3 and 4 for the second landmass and 5 and 6 for the area surrounding the castle. Check Figure 12-8 to see just how I laid out the relevant Regions.

9781484207857_Fig12-08.jpg

Figure 12-8. A screenshot of the world map, now updated with Regions

Next, we need some encounters for the mines (Figure 12-9). I will use the same troops for both of the top levels of the mines. Much like the Dark Spire, I’ll leave the last floor encounter-free.

9781484207857_Fig12-09.jpg

Figure 12-9. Random encounter list for the Abandoned Mines

A perceptive eye will notice that the weights add up to exactly 100, and we have a pair of encounters that account for a mere 10 of that. I created that monster as a little tribute to a classic enemy archetype in RPGs. You can see him (her? it?) in Figure 12-10.

9781484207857_Fig12-10.jpg

Figure 12-10. Screenshot of the Living Metal enemy

It has merely 4 HP, but so much DEF and MDF that it is functionally impossible to damage it, if you can even get past its 70% EVA and MEV. The only thing that would be able to stop a Living Metal is an attack that ignores defense or does fixed damage. I personally find it fun when an RPG throws curveballs like this, forcing me to think outside the box for ways to defeat an enemy, especially when the rewards are worth it. The bombs we created all the way back in Part 1 could be useful, but they’re considered physical attacks, so they only have a 30% chance of actually connecting. You could always fill some dungeon treasure chests with a damage item that hits for only 5 HP but is a Certain Hit. Alternatively, you could sell them at Rocksdale’s item shop for a lot of gold and make players decide whether the 4096 EXP is worth the inflated price for what is otherwise a worthless item.

With both the mines and the world map fully populated, let’s turn our attention to the dragon statue in the Dark Spire. I had originally left the event incomplete in Chapter 6, because I wanted to make an optional boss fight—a superboss fight, to be exact.

A Discussion on Superbosses

The general flow of an RPG involves defeating bosses, until you reach a final boss. Superbosses are located outside of that continuity and exist solely as a form of challenge for the player. If the player can beat a superboss, he/she is more than ready to beat the final boss and, by extension, the game itself. The monster that I created for this precise purpose can be seen in Figure 12-11.

9781484207857_Fig12-11.jpg

Figure 12-11. Screenshot of the Ancient Dragon. It gives the highest experience and gold gains of any monster in the game

The Ancient Dragon boasts higher stats than the game’s final boss. Eric and Noah will most likely not be ready to take this beast on until they have gotten the gear from the final dungeon and perhaps some extra level-ups as well. Defeating the Ancient Dragon gives the player a whopping 15,000 experience and gold. More important, it gives the player the best armor and helmet available in the default RMVXA armor list. That third item is an accessory I created. It grants +10 to all eight of a character’s main stats, +5 EVA, +5 CRI, 20% Fire Resistance (expressed in the Database as [Fire]*80%) and 5 Attack Speed (AGI only applied during attacks). You can see the Ancient Dragon’s Features and Action Pattern lists in Figure 12-12.

9781484207857_Fig12-12.jpg

Figure 12-12. Screenshot of the Ancient Dragon’s feature and action pattern lists

The infamous text bug strikes again, so I used the ratings to further differentiate between each group of skills. The Ancient Dragon uses the first four skills while it has between 76% and 100% HP. The next three are used when it is between 51% HP and 75% HP. The three skills with 7 rating are used when the Ancient Dragon is at 50% HP or lower. Last, Devastate is a special skill I created that the Ancient Dragon uses every five turns, starting from the fifth turn. It has the special property of doing more damage the later in the fight that it is used. Figure 12-13 contains the damage formula box for Devastate.

9781484207857_Fig12-13.jpg

Figure 12-13. A screenshot of Devastate’s damage formula box

We set it up so that the value of $game_variables[27] (I call it turncount) is multiplied by 0.20 and factored in to the first part of the formula. To have a turn count variable, all we have to do is go into the Ancient Dragon’s troop (after creating it, of course) and add a troop event page with a “When the end of the turn” conditional that has a Turn span (so it triggers once per turn). Then we use Control Variables to increase the value of turncount by 1. So, every five turns, Devastate causes extra damage equal to three times the Ancient Dragon’s MAT (so, 450). Basically, the battle is a race to defeat the superboss before it can wipe out the party with a casting of Devastate. Of course, the less HP the Ancient Dragon has, the stronger the skills that it uses.

Completing the Dragon Statue Event

Now that we have created our superboss and given it a robust set of skills to use against our player, let’s complete the dragon statue event. As you’ll recall, we set up the dragon statue event so that the player could inspect it from different angles. The interaction event has three conditional branches. Following is a refresher for part of the event:

@>Conditional Branch: Player is Facing Right
   @>Conditional Branch: Variable [0002:X] == 44
      @>Text: -, -, Normal, Bottom
      :     : You see a majestic dragon statue. It hums with
      :     : power.
      @>Text: 'Actor5', 6, Normal, Bottom
      :     : I sense immense power emanating from this
      :     : statue. Be mindful. It would be best to
      :     : return at a later time.
      @>Text: -, -, Normal, Bottom
      :     : Touch the statue?
      @>Show Choices: Yes, No
      : When [Yes]
         @>Jump to Label: DragonStatue
         @>
      : When [No]
         @>
      : Branch End
      @>
   : Branch End
   @>
: Branch End

The preceding code covers what happens if the player is facing right, but the three branches are used for the same purpose. At each [Yes] present within the interaction event, you’ll want to place the Jump to Label event command as shown above. Then, at the very end of the event, you’ll want to add the following:

@>Conditional Branch: Switch [0100] == ON
   @>Label: DragonStatue
   @>Text: -, -, Normal, Bottom
   :     : You place a hand on the statue.
   @>Text: -, -, Normal, Bottom
   :     : You feel yourself being whisked away!
   @>Change Battle BGM: 'Battle6', 100, 100
   @>Control Self Switch: A =ON
   @>Battle Processing: Ancient Dragon
   @>
: Branch End
@>

That is a dummy switch, a strategy we’ve used in previous chapters to make sure this part of the event can only execute when jumped into. When the player decides to touch the statue, we change the battle BGM and set self-switch A to on. Then, we send the player into the superboss battle. If the player triumphs, the interaction event flips to a second page that displays only the first bit of descriptive text. Look at the following code:

@>Conditional Branch: Player is Facing Right
   @>Conditional Branch: Variable [0002:X] == 44
      @>Text: -, -, Normal, Bottom
       :    : You see a majestic dragon statue. It hums with
       :    : power.
      @>
   : Branch End

With that said, we have one thing left to do.

Setting Up the Use of the Exit Skill/Item Inside a Dungeon with Two Exits

We have set up all of our relevant transfer events for the mines, but we have yet to update them with appropriate changes to the DungeonLocation variable. More important, we also need to update the common event that is tied to our Exit Scroll. As noted in this section’s heading, the mines are peculiar in that they have two exits. We have the cave entrance hidden within the forest, and we have the entrance in Rocksdale. So, we have to have one value of DungeonLocation for each of the two entrances. We’ll set them in the order that the player finds them, so that the entrance to the mines from the hidden location will set DungeonLocation to 3, while the entrance in Rocksdale will set its value to 4. Let’s get started.

@>Control Variables: [0002:X] = Player's Map X
@>Control Variables: [0003:Y] = Player's Map Y
@>Conditional Branch: Variable [0002:X] == 29
   @>Conditional Branch: Variable [0003:Y] == 4
      @>Control Variables: [0011:DungeonLocation] = 3
      @>Transfer Player:[017:Abandoned MineF1F] (024,049), Up
      @>
   : Branch End
   @>
: Branch End

We have this event on the cave entrance map. Directly inside, at Abandoned Mines F1F, we tweak that event, so that DungeonLocation will become 0 if the player steps back out.

Image Note  In what is another difference between this dungeon exit and the two previous locales, you can set DungeonLocation to 0 when the player leaves the mines, or when he/she steps back into the world map. I decided to set the value back to 0 as soon as the player breaks free of the mines, as the cave entrance is not part of the dungeon.

@>Control Variables: [0002:X] = Player's Map X
@>Control Variables: [0003:Y] = Player's Map Y
@>Conditional Branch: Variable [0002:X] == 24
   @>Conditional Branch: Variable [0003:Y] == 51
      @>Control Variables: [0011:DungeonLocation] = 0
      @>Transfer Player:[015:Cave Entrance] (029,005), Down
      @>
   : Branch End
   @>
: Branch End
@>

Next, we have to handle the other possible dungeon exit. The following code belongs to the transfer event in Rocksdale:

@>Control Variables: [0002:X] = Player's Map X
@>Control Variables: [0003:Y] = Player's Map Y
@>Conditional Branch: Variable [0002:X] == 30
   @>Conditional Branch: Variable [0003:Y] == 44
      @>Control Variables: [0011:DungeonLocation] = 4
      @>Transfer Player:[016:Abandoned MineFB1] (003,034), Up
      @>
   : Branch End
   @>
: Branch End
@>

Note how we set DungeonLocation to 4 here instead of 3. The last transfer event to be tweaked is the one that leads from the staircase at Abandoned Mine FB1 to the mountain village.

@>Control Variables: [0002:X] = Player's Map X
@>Control Variables: [0003:Y] = Player's Map Y
@>Conditional Branch: Variable [0002:X] == 4
   @>Conditional Branch: Variable [0003:Y] == 34
      @>Control Variables: [0011:DungeonLocation] = 0
      @>Transfer Player:[019:Mountain Village] (030,045), Down
      @>
   : Branch End
   @>
: Branch End
@>

With that said and done, we have only to tweak the common event that governs our exit code, and we’re all set, like so:

@>Conditional Branch: Variable [0011:DungeonLocation] == 3
   @>Change Items: [Exit Scroll], -1
   @>Control Variables: [0011:DungeonLocation] = 0
   @>Transfer Player:[003:Field 3] (021,067), Down
   @>
: Branch End
@>Conditional Branch: Variable [0011:DungeonLocation] == 4
   @>Change Items: [Exit Scroll], -1
   @>Control Variables: [0011:DungeonLocation] = 0
   @>Transfer Player:[019:Mountain Village] (030,045), Down
   @>
: Branch End
@>

Summary

During the course of this chapter, I covered our preparations leading up to the final dungeon of the game. We populated Rocksdale with a few essential NPCs that drive the main narrative forward. Adding other buildings and NPCs to the town was left as an exercise for you. In addition, we completed the dragon statue event that had been started all the way back in Chapter 6, introducing our game’s superboss in that way. Last, but not least, we updated the transfer events of our latest dungeon to include the DungeonLocation variable and did the same for the common event that governs our Exit skill/item. In the next chapter, we will be creating and populating our game’s final dungeon.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset