Skip to content

Instantly share code, notes, and snippets.

@hajimehoshi
Last active November 20, 2015 00:55
Show Gist options
  • Save hajimehoshi/b3cc26df70dd824c87fe to your computer and use it in GitHub Desktop.
Save hajimehoshi/b3cc26df70dd824c87fe to your computer and use it in GitHub Desktop.
RPG Maker MV: Airship like FF4
// This script is old and deprecated: Please see https://github.com/hajimehoshi/rpgmmv for the latest version.
(function() {
var MAX_SCALE = 1.5;
var Tilemap_initialize = Tilemap.prototype.initialize;
Tilemap.prototype.initialize = function() {
Tilemap_initialize.call(this);
this.width *= MAX_SCALE;
this.height *= MAX_SCALE;
};
Game_Vehicle.prototype.altitude = function() {
return this._altitude;
};
// TODO: This should be in $game* as a saved state.
var scale = 1;
var Game_Player_centerX = Game_Player.prototype.centerX;
Game_Player.prototype.centerX = function() {
return Game_Player_centerX.call(this) * scale;
};
var Game_Player_centerY = Game_Player.prototype.centerY;
Game_Player.prototype.centerY = function() {
return Game_Player_centerY.call(this) * scale;
};
var Scene_Map_updateMain = Scene_Map.prototype.updateMain;
Scene_Map.prototype.updateMain = function() {
var airship = $gameMap.airship();
var wasHighest = airship.isHighest();
var wasInAirship = $gamePlayer.isInAirship();
Scene_Map_updateMain.call(this);
scale = 1;
if ($gamePlayer.isInAirship()) {
if (!airship.isHighest()) {
var alpha = (airship.altitude() / airship.maxAltitude());
scale = alpha * MAX_SCALE + (1 - alpha) * 1;
$gamePlayer.center($gamePlayer.x, $gamePlayer.y);
} else {
scale = MAX_SCALE;
if (!wasHighest) {
$gamePlayer.center($gamePlayer.x, $gamePlayer.y);
}
}
} else if (wasInAirship) {
$gamePlayer.center($gamePlayer.x, $gamePlayer.y);
}
this._spriteset._tilemap.scale.x = 1 / scale;
this._spriteset._tilemap.scale.y = 1 / scale;
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment