# ╔════════════════════════════════════════════════════╤═══════╤══════════════╗
# ║ Land Vehicle │ v1.04 │ (10/31/2014) ║
# ╠════════════════════════════════════════════════════╧═══════╧══════════════╣
# ║ Author: William Couillard ║
# ║ Thanks: Galv (http://galveraxe.wordpress.com/)
# ║ Thanks: MrTrivel (http://mrtrivelvx.wordpress.com/)
# ║ E-Mail: cooliebk18@yahoo.com ║
# ║ Website: http://ffdiscovery.wikia.com
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ ABOUT ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ This script changes how the "Boat" vehicle functions. By default, the ║
# ║ boat an travel on water, the same as the ship. Why isn't there a land ║
# ║ vehicle? This script changes the boat to function as a land vehicle, able ║
# ║ to travel over any terrain that the player can (at a faster speed and ║
# ║ without encounters), and blocks it from traveling over water or ║
# ║ activating touch and confirm event processes. ║
# ║ ║
# ║ Anyone familiar with how Chocobos functioned in the SNES-era Final ║
# ║ Fantasy titles should notice similarities here. ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ USAGE ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ Plug and play! This script overwrites a few methods in Game_Map, ║
# ║ Game_Player and Game_Vehicle. As long as you don't have scripts that ║
# ║ alter the exact same methods used in this script, you should have no ║
# ║ compatibility issues! ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ CHANGE LOG ║
# ╠═════════════════════════════════════════════════════════════════╤═════════╣
# ║ ■ October 31, 2014 : Option to disable stepping animation. │ (v1.04) ║
# ╟─────────────────────────────────────────────────────────────────┼─────────╢
# ║ ■ July 21, 2014 : Option to disable action button events. │ (v1.03) ║
# ╟─────────────────────────────────────────────────────────────────┼─────────╢
# ║ ■ January 30, 2013 : Bug fixed. │ (v1.02) ║
# ╟─────────────────────────────────────────────────────────────────┼─────────╢
# ║ ■ December 01, 2012 : Added option to keep encounters & touch │ (v1.01) ║
# ║ events. │ ║
# ╟─────────────────────────────────────────────────────────────────┼─────────╢
# ║ ■ November 27, 2012 : Initial release. │ (v1.00) ║
# ╠═════════════════════════════════════════════════════════════════╧═════════╣
# ║ NEXT VERSION ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ ■ Script completed! ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ OVERWRITTEN METHODS ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ This script overwrites a few methods in various default scripts. ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ ■ class Game_Map ║
# ║ ► def boat_passable? ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ ■ class Game_Player < Game_Character ║
# ║ ► def map_passable? ║
# ║ ► def update_encounter ║
# ║ ► def check_touch_event ║
# ║ ► def check_action_event ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ ■ class Game_Vehicle > Game_Character ║
# ║ ► def init_move_speed ║
# ║ ► def update ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ INSTRUCTIONS ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ Paste this script ABOVE Main and BELOW Game_Vehicle. ║
# ╠═══════════════════════════════════════════════════════════════════════════╣
# ║ IMPORT SETTING ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
$imported = {} if $imported.nil?
$imported = true
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ CUSTOMIZATION MODULE ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
module COOLIE
module VEHICLE
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ VEHICLE SPEED: Set from 1-6 ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
VEHICLE_SPEED = 5
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ VEHICLE ENCOUNTERS: Set to true to allow enemy encounters while piloting. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
VEHICLE_ENCOUNTERS = false
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ VEHICLE TOUCH: Set to true to allow touch event processing. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
VEHICLE_TOUCH = false
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ VEHICLE PRESS: Set to true to allow action button event processing. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
VEHICLE_PRESS = false
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ STEP ANIM: When false, vehicle will not use step animation when idle. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
STEP_ANIM = false
end
end
#-------------------------------------------------------------------------------
class Game_Map
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Determine if Passable by Land Vehicle ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Changes the Boat vehicle to have the same passability as the player. ║
# ║ I.E. Can travel on land, not water. Cannot pass through same level tiles. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def boat_passable?(x, y, d)
check_passage(x, y, (1 << (d / 2 - 1)) & 0x0f)
end
end

class Game_Player < Game_Character
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Map Passable? ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Determines passability. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def map_passable?(x, y, d)
case @vehicle_type
when :boat
$game_map.boat_passable?(x, y, d)
when :ship
$game_map.ship_passable?(x, y)
when :airship
true
else
super
end
end
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Update Encounters ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Turns off encounters if piloting the Land Vehicle. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def update_encounter
return if $TEST && Input.press?(:CTRL)
return if $game_party.encounter_none?
return if in_airship?
unless COOLIE::VEHICLE::VEHICLE_ENCOUNTERS == true
return if in_boat?
end
return if @move_route_forcing
@encounter_count -= encounter_progress_value
end
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Determine if Event Start Caused by Touch (Overlap) ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Disables touch events when driving the Land Vehicle, including teleports. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def check_touch_event
return false if in_airship?
unless COOLIE::VEHICLE::VEHICLE_TOUCH == true
return false if in_boat?
end
check_event_trigger_here()
$game_map.setup_starting_event
end

# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Determine if Event Start Caused by OK Button (Action) ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Disables "action button" events when driving the Land Vehicle. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def check_action_event
return false if in_airship?
unless COOLIE::VEHICLE::VEHICLE_PRESS == true
return false if in_boat?
end
check_event_trigger_here()
return true if $game_map.setup_starting_event
check_event_trigger_there()
$game_map.setup_starting_event
end
end

class Game_Vehicle < Game_Character
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Initialize Move Speed ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Changes the player's movement speed when piloting the Land Vehicle. ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def init_move_speed
@move_speed = COOLIE::VEHICLE::VEHICLE_SPEED if @type == :boat
@move_speed = 5 if @type == :ship
@move_speed = 6 if @type == :airship
end
# ╔═══════════════════════════════════════════════════════════════════════════╗
# ║ Update ║
# ╟───────────────────────────────────────────────────────────────────────────╢
# ║ Frame update ║
# ╚═══════════════════════════════════════════════════════════════════════════╝
def update
super
update_airship_altitude if @type == :airship
if COOLIE::VEHICLE::STEP_ANIM == false
@step_anime = true if @type == :boat && moving?
@step_anime = false if @type == :boat && !moving?
end
end
end