/*:
* @plugindesc Nudge character sprite positions, to better center them on tiles. This file must be called CharacterOffset.js.
* @author Ben Hendel-Doying
*
* @param Walk-animated X Offset
* @desc Affects events with "walking" checked, and players (regardless of walk animation setting).
* Default: 0
* @default 0
*
* @param Walk-animated Y Offset
* @desc Affects events with "walking" checked, and players (regardless of walk animation setting).
* Default: -9
* @default -9
*
* @param Other X Offset
* @desc Affects events with "walking" unchecked.
* Default: 0
* @default 0
*
* @param Other Y Offset
* @desc Affects events with "walking" unchecked.
* Default: 6
* @default 6
*
* @param Force Walk-animated Offsets for Players
* @desc If "true", players use Walk-animated X and Y Offsets, even if their walk animation has been disabled (ex: cutscenes).
* Default: true
* @default true
*
* @param Apply Offsets to Vehicles
* @desc If "true", offsets are also applied to vehicles.
* Default: true
* @default true
* @help
* Compatibility:
* * REPLACES Game_CharacterBase..screenX
* * REPLACES Game_CharacterBase..screenY
* * REPLACES Game_Player..screenX (with "Force Walk-animated Offsets for Players" on)
* * REPLACES Game_Player..screenY (with "Force Walk-animated Offsets for Players" on)
* * REPLACES Game_Vehicle..screenX (with "Apply Offsets to Vehicles" on)
* * REPLACES Game_Vehicle..screenY (with "Apply Offsets to Vehicles" on)
*/

var BenMakesGames = window.BenMakesGames || {};

(function() {

BenMakesGames.CharacterOffset = {};
BenMakesGames.CharacterOffset.Parameters = PluginManager.parameters('CharacterOffset');
BenMakesGames.CharacterOffset.WalkAnimeXOffset = !isNaN(parseInt(BenMakesGames.CharacterOffset.Parameters)) ? parseInt(BenMakesGames.CharacterOffset.Parameters) : 0;
BenMakesGames.CharacterOffset.WalkAnimeYOffset = !isNaN(parseInt(BenMakesGames.CharacterOffset.Parameters)) ? parseInt(BenMakesGames.CharacterOffset.Parameters) : -9;
BenMakesGames.CharacterOffset.OtherXOffset = !isNaN(parseInt(BenMakesGames.CharacterOffset.Parameters)) ? parseInt(BenMakesGames.CharacterOffset.Parameters) : 0;
BenMakesGames.CharacterOffset.OtherYOffset = !isNaN(parseInt(BenMakesGames.CharacterOffset.Parameters)) ? parseInt(BenMakesGames.CharacterOffset.Parameters) : 6;
BenMakesGames.CharacterOffset.ForcePlayerWalkOffsets = BenMakesGames.CharacterOffset.Parameters.trim().toLowerCase() == 'true';
BenMakesGames.CharacterOffset.ApplyOffsetsToVehicles = BenMakesGames.CharacterOffset.Parameters.trim().toLowerCase() == 'true';

Game_CharacterBase.prototype.screenX = function () {
var tw = $gameMap.tileWidth();
return Math.round(this.scrolledX() * tw + tw / 2 + (this._walkAnime ? BenMakesGames.CharacterOffset.WalkAnimeXOffset : BenMakesGames.CharacterOffset.OtherXOffset));
};

Game_CharacterBase.prototype.screenY = function () {
var th = $gameMap.tileHeight();
return Math.round(this.scrolledY() * th + th - this.shiftY() - this.jumpHeight() + (this._walkAnime ? BenMakesGames.CharacterOffset.WalkAnimeYOffset : BenMakesGames.CharacterOffset.OtherYOffset));
};

if(BenMakesGames.CharacterOffset.ForcePlayerWalkOffsets) {
Game_Player.prototype.screenX = function () {
var tw = $gameMap.tileWidth();
return Math.round(this.scrolledX() * tw + tw / 2 + BenMakesGames.CharacterOffset.WalkAnimeXOffset);
};

Game_Player.prototype.screenY = function () {
var th = $gameMap.tileHeight();
return Math.round(this.scrolledY() * th + th - this.shiftY() - this.jumpHeight() + BenMakesGames.CharacterOffset.WalkAnimeYOffset);
};
}

if(BenMakesGames.CharacterOffset.ApplyOffsetsToVehicles) {
Game_Vehicle.prototype.screenX = function() {
var tw = $gameMap.tileWidth();
return Math.round(this.scrolledX() * tw + tw / 2 + BenMakesGames.CharacterOffset.WalkAnimeXOffset);
};

Game_Vehicle.prototype.screenY = function() {
var th = $gameMap.tileHeight();
return Math.round(this.scrolledY() * th + th - this.shiftY() - this.jumpHeight() + BenMakesGames.CharacterOffset.WalkAnimeYOffset) - this._altitude;
};
}

})();