How to call "isMapPassable"?

Kronicide

Veteran
Veteran
Joined
Jul 7, 2020
Messages
33
Reaction score
12
First Language
Swedish
Primarily Uses
RMMV
There's something basic I don't understand about JavaScript here, I'm sure.

This function in rpg_objects.js seems to do exactly what I need.

Skärmklipp 2020-07-16 14.57.24.png

But I don't understand how to call it. Whether I call it with this. or Game_CharacterBase. I get the error that it's not a function.

Here's the code:
JavaScript:
// caught(EVENT1, EVENT2)
// -----------------------------------
// Checks if EVENT1 has caught EVENT2.
// I.e., whether EVENT1 is right next to EVENT2, facing EVENT2, and the map
// is passable from EVENT1's square to EVENT2's square.
//
Game_Interpreter.prototype.caught = function(event1_id, event2_id){
    
    // Not even close.
    if (!this.eventInRange(event1_id, event2_id, 1)){
        return false;
    }

    // EVENT1 not facing EVENT2.
    var e1_xy = Kron.AI_base.getXY(event1_id, this.eventId());
    var e2_xy = Kron.AI_base.getXY(event2_id, this.eventId());
    var e1_dir = Kron.AI_base.getDirection(event1_id, this.eventId());

    if ((e1_dir === 2 && !(e1_xy.Y < e2_xy.Y))
        ||
        (e1_dir === 4 && !(e1_xy.X > e2_xy.X))
        ||
        (e1_dir === 8 && !(e1_xy.Y > e2_xy.Y))
        ||
        (e1_dir === 6 && !(e1_xy.X < e2_xy.X))){

        return false;
    }
    
    // EVENT1 can't pass to the square of EVENT2.
    if (!this.isMapPassable(e1_xy.X, e1_xy.Y, e1_dir)){
        return false;
    }

    // All checks are a pass.
    return true;
}

And the error message:

Skärmklipp 2020-07-16 15.00.21.png

If I just change the relevant bit above to
JavaScript:
if (!Game_CharacterBase.isMapPassable(e1_xy.X, e1_xy.Y, e1_dir)){
    return false;
}
I get the same error:

Skärmklipp 2020-07-16 15.02.22.png

I guess I simply don't know where this function lives. (I understand the official library docs to also say it's in Game_CharacterBase).
 

Trihan

Speedy Scripter
Veteran
Joined
Apr 12, 2012
Messages
2,373
Reaction score
1,548
First Language
English
Primarily Uses
RMMV
Game_CharacterBase is the class that character types inherit from: the player, followers, events etc. Therefore, you call it from an instance of one of those classes.

You could, for example, do $gamePlayer.isMapPassable to check whether the player can pass through a given tile. Or $gameMap.events[event id].isMapPassable etc.

What you need to remember is that because you're not dealing with a static class, the functions can only be called by an instance of that class.
 

Kronicide

Veteran
Veteran
Joined
Jul 7, 2020
Messages
33
Reaction score
12
First Language
Swedish
Primarily Uses
RMMV
What you need to remember is that because you're not dealing with a static class, the functions can only be called by an instance of that class.
Thanks, I appreciate it. I think what might have confused me here is that the function doesn't actually use any properties of the calling object. It just checks generic map properties. So I'm calling it from $gamePlayer, even though I'm not (necessarily) checking whether it's the player that can pass from the given square in the given direction. It seems to work fine. (But there was another problem with the function I pasted above--just so no one tries to use it.)

Thanks again!
 

Trihan

Speedy Scripter
Veteran
Joined
Apr 12, 2012
Messages
2,373
Reaction score
1,548
First Language
English
Primarily Uses
RMMV
Yeah, it seems like they just implemented that as a shorthand way for an event/character to check map passability by calling the one from Game_Map.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Profile Posts

So I just spent the weekend...playing my own game. The one I released last year. Yep you heard that right.
Goal for MZ? None... I'm still curious how to finish my VXA project and how it looks like when it actually finished. Which will take at least another two years. Coming late again to the party.
Finding it amusing that people are posting support questions in new threads for an engine that isn't even released yet. Touch and Archeia are the only ones authorised to say anything, and there's only one active thread where they'll be answering questions.
I think my goal for MZ ... is to actually release a game and not have twenty technical demos and debugging projects. Let's see if I can manage that. ;o
I am starting to enjoy writing. I never thought I would enjoy it since my dyslexia was holding me back so much.
Thanks to the community here :)
For those interested chapter 2 and 3 are available to read here:

Forum statistics

Threads
100,652
Messages
978,096
Members
132,261
Latest member
DarthNinjus
Top