| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2017-7-19 |
| 在线时间 | 289 小时 |
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 289 小时
- 注册时间
- 2014-12-12
- 回帖
- 138
|
发表于 2015-8-11 15:24:37
|
显示全部楼层
本帖最后由 13790758417 于 2015-8-11 15:30 编辑
我显示乱码,不好意思
下载地址http://www.mediafire.com/downloa ... 9_Rotation_V1.7.exe
[fold=主脚本]=begin
仴 忔傝暔媅帡俁俢壔 儊僀儞僗僋儕僾僩 ver. 3.0.1
RPG僣僋乕儖VXAce梡僗僋儕僾僩
惂嶌 : 栘惎儁儞僊儞
URL : http://woodpenguin.blog.fc2.com/
#//////////////////////////////////////////////////////////////////////////////
#
# 愝掕崁栚側偟
#
#//////////////////////////////////////////////////////////////////////////////
===儊儌===
2x 峴栚乣 : 儌僕儏乕儖
5x 峴栚乣 : 僎乕儉僆僽僕僃僋僩
98x 峴栚乣 : 僗僾儔僀僩
139x 峴栚乣 : 僂傿儞僪僂
141x 峴栚乣 : 僔乕儞
=end
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#
# 仴 儌僕儏乕儖
#
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
module WdTk::Veh3D
#--------------------------------------------------------------------------
# 仠 僼儗乕儉僇僂儞僩偺儕僙僢僩
#--------------------------------------------------------------------------
def self.reset
@@frame_count = 0
@@need_update = true
end
#--------------------------------------------------------------------------
# 仠 峏怴
#--------------------------------------------------------------------------
def self.update
@@frame_count += FrameRate
@@need_update = @@frame_count >= 60
@@frame_count %= 60
end
#--------------------------------------------------------------------------
# 仠 峏怴偑昁梫偐偳偆偐
#--------------------------------------------------------------------------
def self.need_update?
@@need_update
end
end
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#
# 仴 僎乕儉僆僽僕僃僋僩
#
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#==============================================================================
# 仭 Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# 仚 忔傝暔偺嶌惉
#--------------------------------------------------------------------------
def create_vehicles
@vehicles = WdTk::Veh3D.data.collect {|key,| Game_Vehicle.new(key) }
end
#--------------------------------------------------------------------------
# 仚 忔傝暔偺庢摼
#--------------------------------------------------------------------------
def vehicle(type)
@vehicles.find {|vehicle| vehicle.type == type }
end
#--------------------------------------------------------------------------
# 仠 昞帵埵抲偺愝掕 (儖乕僾敾掕側偟)
#--------------------------------------------------------------------------
def set_pos(x, y)
@display_x = x
@display_y = y
@parallax_x = x
@parallax_y = y
end
#--------------------------------------------------------------------------
# 仠 忔傝暔偺捠峴壜擻敾掕
#--------------------------------------------------------------------------
def vehicle_passable?(x, y, types, through)
return true unless types
all_tiles(x, y).each do |tile_id|
if tile_id >= 2048
return types.include?((tile_id - 2048) / 48)
else
flag = tileset.flags[tile_id]
next if flag & 0x10 != 0
return (through && flag & 0x0f == 0)
end
end
return false
end
#--------------------------------------------------------------------------
# 仠 拝棨壜擻敾掕
#--------------------------------------------------------------------------
def land_ok?(x, y, denial)
return false if denial && denial.include?(autotile_type(x, y, 1))
return false if denial && denial.include?(autotile_type(x, y, 0))
return check_passage(x, y, 0x0f)
end
end
#==============================================================================
# 仭 Game_CharacterBase
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# 仚 忔傝暔偲偺徴撍敾掕
#--------------------------------------------------------------------------
def collide_with_vehicles?(x, y)
$game_map.vehicles.any? {|v| v.pos_nt?(x, y) && !v.get_here? }
end
end
#==============================================================================
# 仭 Game_Player
#==============================================================================
class Game_Player
#--------------------------------------------------------------------------
# 仠 岞奐僀儞僗僞儞僗曄悢
#--------------------------------------------------------------------------
attr_reader :keep_vehicles
attr_accessor :in_vehicle
#--------------------------------------------------------------------------
# 侟 僆僽僕僃僋僩弶婜壔
#--------------------------------------------------------------------------
alias _wdtk_veh3d_initialize initialize
def initialize
_wdtk_veh3d_initialize
@keep_vehicles = []
end
#--------------------------------------------------------------------------
# 仠 搵忔拞偺僞僀僾偐偳偆偐
#--------------------------------------------------------------------------
def driving?(type)
@in_vehicle && @vehicle_type == type
end
#--------------------------------------------------------------------------
# 侟 応強堏摦偺幚峴
#--------------------------------------------------------------------------
alias _wdtk_veh3d_perform_transfer perform_transfer
def perform_transfer
if transfer? && vehicle
vehicle.set_direction(@new_direction)
_wdtk_veh3d_perform_transfer
vehicle.sync_with_player
else
_wdtk_veh3d_perform_transfer
end
end
#--------------------------------------------------------------------------
# 仚 旘峴偡傞忔傝暔偵忔偭偰偄傞偐偳偆偐
#--------------------------------------------------------------------------
def in_airship?
@in_vehicle && vehicle.flight?
end
#--------------------------------------------------------------------------
# 侟 僼儗乕儉峏怴
#--------------------------------------------------------------------------
alias _wdtk_veh3d_update update
def update
if @in_vehicle
return if !movable? || $game_map.interpreter.running?
vehicle.process_control
last_x = @x
last_y = @y
@x = @real_x = vehicle.x.round
@y = @real_y = vehicle.y.round
update_vehicle_moving(last_x != @x || last_y != @y)
else
_wdtk_veh3d_update
end
end
#--------------------------------------------------------------------------
# 仠 忔傝暔偱堏摦偟偨応崌偺張棟
# tile_moving : 僞僀儖傪堏摦偟偨偐偳偆偐
#--------------------------------------------------------------------------
def update_vehicle_moving(tile_moving)
if tile_moving
increase_steps
vehicle.update_bush_depth
end
return if $game_map.interpreter.running?
if tile_moving
return if check_touch_event
end
return if vehicle.process_handling
update_encounter if tile_moving
end
#--------------------------------------------------------------------------
# 仚 忔傝暔偵忔傞摦嶌偺峏怴
#--------------------------------------------------------------------------
def update_vehicle_get_on
if !@followers.gathering? && !moving?
@vehicle_getting_on = false
@transparent = true
vehicle.get_on
end
end
#--------------------------------------------------------------------------
# 仚 僄儞僇僂儞僩偺峏怴
#--------------------------------------------------------------------------
def update_encounter
return if $TEST && Input.press?(:CTRL)
return if $game_party.encounter_none?
return if @in_vehicle && vehicle.encounter_none?
return if @move_route_forcing
@encounter_count -= encounter_progress_value
end
#--------------------------------------------------------------------------
# 仚 僄儞僇僂儞僩恑峴抣偺庢摼
#--------------------------------------------------------------------------
def encounter_progress_value
value = $game_map.bush?(@x, @y) ? 2 : 1
value *= 0.5 if $game_party.encounter_half?
value *= vehicle.encount_rate / 100.0 if @in_vehicle
value
end
#--------------------------------------------------------------------------
# 侟 寛掕儃僞儞偵傛傞僀儀儞僩婲摦敾掕
#--------------------------------------------------------------------------
alias _wdtk_veh3d_check_action_event check_action_event
def check_action_event
if in_airship?
check_event_trigger_here([0])
$game_map.setup_starting_event
else
_wdtk_veh3d_check_action_event
end
end
#--------------------------------------------------------------------------
# 仚 忔傝暔偵忔傞
# 尰嵼忔傝暔偵忔偭偰偄側偄偙偲偑慜採丅
#--------------------------------------------------------------------------
def get_on_vehicle
front_x = $game_map.round_x_with_direction(@x, @direction)
front_y = $game_map.round_y_with_direction(@y, @direction)
$game_map.vehicles.each do |veh|
next if veh.control
if veh.get_here?
@vehicle_type = veh.type if veh.pos?(@x, @y)
else
@vehicle_type = veh.type if veh.pos?(front_x, front_y)
end
end
if vehicle
@vehicle_getting_on = true
force_move_forward unless vehicle.get_here?
@followers.gather
end
@vehicle_getting_on
end
#--------------------------------------------------------------------------
# 仚 忔傝暔偐傜崀傝傞
#--------------------------------------------------------------------------
def get_off_vehicle
if vehicle.land_ok?(@x, @y, vehicle.angle_dir)
set_direction(vehicle.sync_dir? ? vehicle.angle_dir : 2)
@followers.synchronize(@x, @y, @direction)
vehicle.get_off
@vehicle_getting_off = true
make_encounter_count
@followers.gather
end
@vehicle_getting_off
end
#--------------------------------------------------------------------------
# 仠 忔傝暔奐巒張棟
#--------------------------------------------------------------------------
def on_vehicle_start
@in_vehicle = true
if @vehicle_type == :walk
@vehicle_type = @keep_vehicles.pop
@transparent = true
@followers.update
end
_wdtk_veh3d_perform_transfer
vehicle.on_vehicle_start
end
#--------------------------------------------------------------------------
# 仠 忔傝暔廔椆張棟
#--------------------------------------------------------------------------
def on_vehicle_end
@in_vehicle = false
center(@x, @y)
vehicle.on_vehicle_end
if @keep_vehicles.include?(@vehicle_type)
vehicle.get_off
@vehicle_type = :walk
@transparent = false
@followers.update
elsif !vehicle.get_here?
force_move_forward
@transparent = false
end
$game_map.autoplay
_wdtk_veh3d_perform_transfer
end
#--------------------------------------------------------------------------
# 仠 婰壇偟偨忔傝暔偵忔傞
#--------------------------------------------------------------------------
def get_on_keep_vehicle
sym = @keep_vehicles[-1]
$game_map.vehicle(sym).transfer if sym
end
#--------------------------------------------------------------------------
# 仠 尰嵼偺忔傝暔傪婰壇
#--------------------------------------------------------------------------
def keep_vehicle
@keep_vehicles.delete(@vehicle_type)
@keep_vehicles << @vehicle_type
end
#--------------------------------------------------------------------------
# 仠 婰壇偟偨忔傝暔偺嶍彍
#--------------------------------------------------------------------------
def delete_keep_vehicle
sym = @keep_vehicles.pop
$game_map.vehicle(sym).on_vehicle_end if sym
end
end
#==============================================================================
# 仭 Game_Vehicle
#==============================================================================
class Game_Vehicle
#--------------------------------------------------------------------------
# 仠 儌僕儏乕儖
#--------------------------------------------------------------------------
include Math
#--------------------------------------------------------------------------
# 仠 岞奐僀儞僗僞儞僗曄悢
#--------------------------------------------------------------------------
attr_reader :type
attr_reader :angle
attr_reader :drive_direction
attr_reader :control
#--------------------------------------------------------------------------
# 侟 僆僽僕僃僋僩弶婜壔
#--------------------------------------------------------------------------
alias _wdtk_veh3d_initialize initialize
def initialize(type)
_wdtk_veh3d_initialize(type)
@drive_speed = 0
@drive_direction = 5
@Angle = 0
@angle_speed = 0
@slide_speed = 0
@control = false
end
#--------------------------------------------------------------------------
# 仠 忔傝暔僨乕僞偺庢摼
#--------------------------------------------------------------------------
def param(sym)
WdTk::Veh3D.data[@type][sym]
end
#--------------------------------------------------------------------------
# 仚 堏摦懍搙偺弶婜壔
#--------------------------------------------------------------------------
def init_move_speed
@move_speed = param(:move_speed)
end
#--------------------------------------------------------------------------
# 侟 僔僗僥儉愝掕偺庢摼
#--------------------------------------------------------------------------
alias _wdtk_veh3d_system_vehicle system_vehicle
def system_vehicle
_wdtk_veh3d_system_vehicle || param(:system)
end
#--------------------------------------------------------------------------
# 仠 堏摦拞敾掕
#--------------------------------------------------------------------------
def moving?
@control ? @drive_speed != 0 || @angle_speed != 0 : super
end
#--------------------------------------------------------------------------
# 仠 1 僼儗乕儉偁偨傝偺堏摦嫍棧傪寁嶼
#--------------------------------------------------------------------------
def distance_per_frame
super * 60 / WdTk::Veh3D::FrameRate
end
#--------------------------------------------------------------------------
# 仠 僨僶僢僌偡傝敳偗忬懺敾掕
#--------------------------------------------------------------------------
def debug_through?
$TEST && Input.press?(:CTRL)
end
#--------------------------------------------------------------------------
# 仠 忔傝暔偲偺徴撍敾掕
#--------------------------------------------------------------------------
def collide_with_vehicles?(x, y)
$game_map.vehicles.any? {|v| v != self && v.pos_nt?(x, y) }
end
#--------------------------------------------------------------------------
# 仠 巜掕曽岦偵岦偒曄峏
# d : 曽岦乮2,4,6,8乯
#--------------------------------------------------------------------------
def set_direction(d)
super
if @driving && d != 0
case @direction
when 2; @Angle = 180
when 4; @angle = 90
when 6; @angle = 270
when 8; @angle = 0
end
stop
end
end
#--------------------------------------------------------------------------
# 仠 僌儔僼傿僢僋僀儞僨僢僋僗偺庢摼
#--------------------------------------------------------------------------
def vehicle_index
case @drive_direction
when 5; param(:vehicle_index1) || @character_index
when 2,4,6,8; param(:vehicle_index2) || param(:vehicle_index1) || @character_index
when 1,3,7,9; param(:vehicle_index3) || @character_index
end
end
#--------------------------------------------------------------------------
# 仠 応強堏摦偺梊栺
#--------------------------------------------------------------------------
def transfer
$game_player.reserve_transfer(@map_id, @x.round, @y.round)
last_angle = @angle
get_on
@angle = last_angle
end
#--------------------------------------------------------------------------
# 侟 忔傝暔偵忔傞
#--------------------------------------------------------------------------
alias _wdtk_veh3d_get_on get_on
def get_on
_wdtk_veh3d_get_on
@walk_anime = param(:walk_anime) != false
@step_anime = param(:step_anime) != false
@drive_speed = 0
@drive_direction = 5
@slide_speed = 0
@angle = 0
set_direction($game_player.direction) if sync_dir?
@angle_speed = 0
SceneManager.goto(Scene_Vehicle)
end
#--------------------------------------------------------------------------
# 侟 忔傝暔偐傜崀傝傞
#--------------------------------------------------------------------------
alias _wdtk_veh3d_get_off get_off
def get_off
_wdtk_veh3d_get_off
@step_anime = param(:step_anime) != false
SceneManager.goto(Scene_Map)
end
#--------------------------------------------------------------------------
# 仠 忔傝暔奐巒張棟
#--------------------------------------------------------------------------
def on_vehicle_start
unless @control
@control = true
if flight?
@altitude = [[@altitude, max_altitude].min, min_altitude].max
else
@altitude = 8
end
end
$game_switches[param(:switch_id)] = true if param(:switch_id)
end
#--------------------------------------------------------------------------
# 仠 忔傝暔廔椆張棟
#--------------------------------------------------------------------------
def on_vehicle_end
unless @driving
@control = false
@altitude = flight? ? 32 : 0
moveto(@x.round, @y.round)
end
$game_switches[param(:switch_id)] = false if param(:switch_id)
refresh
end
#--------------------------------------------------------------------------
# 仠 掆巭
#--------------------------------------------------------------------------
def stop
@drive_speed = 0
@angle_speed = 0
@stop_count = 0
end
#--------------------------------------------------------------------------
# 仠 堏摦壜擻敾掕
#--------------------------------------------------------------------------
def movable?
@driving
end
#--------------------------------------------------------------------------
# 仚 儕僼儗僢僔儏
#--------------------------------------------------------------------------
def refresh
if @driving
@map_id = $game_map.map_id
#sync_with_player
stop
elsif @map_id == $game_map.map_id
moveto(@x, @y)
end
if flight?
@priority_type = @driving ? 2 : 0
else
@priority_type = 1
end
if @control
@drive_direction = 5
@walk_anime = param(:walk_anime) != false
@step_anime = param(:step_anime) != false
else
@walk_anime = @step_anime = false
end
end
#--------------------------------------------------------------------------
# 仠 旘峴偡傞偐偳偆偐
#--------------------------------------------------------------------------
def flight?
param(:flight)
end
#--------------------------------------------------------------------------
# 仠 搵忔帪岦偒曄峏偡傞偐偳偆偐
#--------------------------------------------------------------------------
def sync_dir?
param(:sync_dir)
end
#--------------------------------------------------------------------------
# 仠 摨堦偵傛傞搵忔偐偳偆偐
#--------------------------------------------------------------------------
def get_here?
param(:get_here)
end
#--------------------------------------------------------------------------
# 仠 僄儞僇僂儞僩棪偺庢摼
#--------------------------------------------------------------------------
def encount_rate
param(:encount) || 0
end
#--------------------------------------------------------------------------
# 仠 僄儞僇僂儞僩柍岠丠
#--------------------------------------------------------------------------
def encounter_none?
encount_rate == 0
end
#--------------------------------------------------------------------------
# 仠 妏搙偐傜曽岦偺庢摼
#--------------------------------------------------------------------------
def angle_dir
case (@angle + 45).to_i / 90
when 0,4; 8
when 1; 4
when 2; 2
when 3; 6
end
end
#--------------------------------------------------------------------------
# 仚 僼儗乕儉峏怴
#--------------------------------------------------------------------------
def update
if @control
update_animation
if $game_player.driving?(@type) && !@driving && flight?
if @altitude > 32 || Graphics.frame_count % (5 - @altitude / 8) == 0
@altitude -= 1
end
end
else
super
update_airship_altitude if flight?
@step_anime = param(:step_anime) != false if @driving
end
end
#--------------------------------------------------------------------------
# 仠 忔傝暔憖廲帪偺張棟
#--------------------------------------------------------------------------
def process_control
@drive_direction = 5
if Input.press?(param(:inp_forward1)) || Input.press?(param(:inp_forward2))
process_forward
elsif Input.press?(param(:inp_backward))
process_backward
else
process_reduce_drive
end
if Input.press?(param(:inp_left))
process_left
elsif Input.press?(param(:inp_right))
process_right
else
process_reduce_slide
end
unless Input.press?(param(:inp_horz))
turn = 0
turn += 1 if Input.press?(param(:inp_turnleft1))
turn += 1 if Input.press?(param(:inp_turnleft2))
turn -= 1 if Input.press?(param(:inp_turnright1))
turn -= 1 if Input.press?(param(:inp_turnright2))
process_turn(turn)
if flight?
process_up if Input.press?(param(:inp_up))
process_down if Input.press?(param(:inp_down))
end
else
process_reduce_turn
end
if WdTk::Veh3D.need_update?
update_angle
if @drive_speed != 0
update_drive(@angle, distance_per_frame * @drive_speed / 32)
end
if @slide_speed != 0
update_drive(@angle + 90, distance_per_frame * @slide_speed / 32)
elsif @drive_speed == 0 && Input.press?(param(:inp_horz))
process_horz
end
end
update_stop unless moving?
end
#--------------------------------------------------------------------------
# 仠 憖廲埲奜偺張棟
#--------------------------------------------------------------------------
def process_handling
if @drive_speed <= 12
if Input.trigger?(param(:inp_get_off)) || (!param(:inp_get_off) &&
@altitude <= (min_altitude + 8) && Input.press?(param(:inp_down)))
return stop if $game_player.get_off_vehicle
end
if Input.trigger?(param(:inp_event))
$game_player.set_direction(angle_dir)
return stop if $game_player.check_action_event
end
end
if Input.trigger?(param(:inp_menu))
return process_menu
end
end
#--------------------------------------------------------------------------
# 仠 慜恑偺張棟
#--------------------------------------------------------------------------
def process_forward
@drive_speed += 1 if @drive_speed < 32
@stop_count = 0
end
#--------------------------------------------------------------------------
# 仠 屻戅偺張棟
#--------------------------------------------------------------------------
def process_backward
@drive_speed -= 1 if @drive_speed > -16
@stop_count = 0
end
#--------------------------------------------------------------------------
# 仠 懍搙掅壓偺張棟
#--------------------------------------------------------------------------
def process_reduce_drive
@drive_speed += (0 <=> @drive_speed)
end
#--------------------------------------------------------------------------
# 仠 嵍堏摦偺張棟
#--------------------------------------------------------------------------
def process_left
@slide_speed += 1 if @slide_speed < 16
@stop_count = 0
end
#--------------------------------------------------------------------------
# 仠 塃堏摦偺張棟
#--------------------------------------------------------------------------
def process_right
@slide_speed -= 1 if @slide_speed > -16
@stop_count = 0
end
#--------------------------------------------------------------------------
# 仠 墶堏摦掅壓偺張棟
#--------------------------------------------------------------------------
def process_reduce_slide
@slide_speed += (0 <=> @slide_speed)
end
#--------------------------------------------------------------------------
# 仠 慁夞偺張棟
#--------------------------------------------------------------------------
def process_turn(speed)
if @angle_speed < 24 * speed
@angle_speed += 1 if @angle_speed < 32
elsif @angle_speed > 24 * speed
@angle_speed -= 1 if @angle_speed > -32
end
if speed != 0
@drive_direction += (0 <=> speed) if (param(:dir_type) || 0) >= 1
@stop_count = 0
end
end
#--------------------------------------------------------------------------
# 仠 慁夞掅壓偺張棟
#--------------------------------------------------------------------------
def process_reduce_turn
@angle_speed += (0 <=> @angle_speed)
end
#--------------------------------------------------------------------------
# 仠 忋徃偺張棟
#--------------------------------------------------------------------------
def process_up
@altitude += 1 if @altitude < max_altitude
@drive_direction += 3 if param(:dir_type) >= 2
end
#--------------------------------------------------------------------------
# 仠 壓崀偺張棟
#--------------------------------------------------------------------------
def process_down
@altitude -= 1 if @altitude > min_altitude
@drive_direction -= 3 if param(:dir_type) >= 2
end
#--------------------------------------------------------------------------
# 仠 儊僯儏乕屇傃弌偟偺張棟
#--------------------------------------------------------------------------
def process_menu
Sound.play_ok
SceneManager.call(Scene_Menu)
Window_MenuCommand::init_command_position
end
#--------------------------------------------------------------------------
# 仠 悈暯堏摦偺張棟
#--------------------------------------------------------------------------
def process_horz
case Input.dir8
when 1; angle = (@angle + 135) % 360
when 2; angle = (@angle + 180) % 360
when 3; angle = (@angle + 225) % 360
when 4; angle = (@angle + 90) % 360
when 6; angle = (@angle + 270) % 360
when 7; angle = (@angle + 45) % 360
when 8; angle = @angle
when 9; angle = (@angle + 315) % 360
else return
end
update_drive(angle, distance_per_frame / 3)
end
#--------------------------------------------------------------------------
# 仠 岦偒偺峏怴
#--------------------------------------------------------------------------
def update_angle
speed = param(:turning) * @angle_speed / 128.0 * 60 / WdTk::Veh3D::FrameRate
@angle = (@angle + speed) % 360
end
#--------------------------------------------------------------------------
# 仠 堏摦帪偺峏怴
#--------------------------------------------------------------------------
def update_drive(angle, distance)
x1 = $game_map.round_x(@x.round)
y1 = $game_map.round_y(@y.round)
tx = $game_map.round_x(@x - sin(angle * PI / 180) * distance)
ty = $game_map.round_y(@y - cos(angle * PI / 180) * distance)
x2 = round_x_with_pos(tx)
y2 = round_y_with_pos(ty)
if x1 == x2 || vehicle_passable?(x2, y1)
@x = @real_x = tx
if (y1 == y2 || vehicle_passable?(x1, y2)) &&
(x1 == x2 || vehicle_passable?(x2, y2))
@y = @real_y = ty
end
elsif y1 == y2 || vehicle_passable?(x1, y2)
@y = @real_y = ty
end
end
#--------------------------------------------------------------------------
# 仚 旘峴慏偺嵟戝崅搙傪庢摼
#--------------------------------------------------------------------------
def max_altitude
param(:max_altitude) || 100
end
#--------------------------------------------------------------------------
# 仠 旘峴慏偺嵟掅崅搙傪庢摼
#--------------------------------------------------------------------------
def min_altitude
param(:min_altitude) || 20
end
#--------------------------------------------------------------------------
# 仚 愙娸乛拝棨壜擻敾掕
# d : 曽岦乮2,4,6,8乯
#--------------------------------------------------------------------------
def land_ok?(x, y, d)
if get_here?
return false unless $game_map.land_ok?(x, y, param(:land_denial))
return false unless $game_map.events_xy(x, y).empty?
return false if collide_with_vehicles?(x, y)
else
x2 = $game_map.round_x_with_direction(x, d)
y2 = $game_map.round_y_with_direction(y, d)
return false unless $game_map.valid?(x2, y2)
return false unless $game_map.passable?(x2, y2, reverse_dir(d))
return false if collide_with_characters?(x2, y2)
end
return true
end
#--------------------------------------------------------------------------
# 仠 捠峴壜擻敾掕
#--------------------------------------------------------------------------
def vehicle_passable?(x2, y2)
return false unless $game_map.valid?(x2, y2)
return true if @through || debug_through?
return false unless map_passable?(x2, y2, 0)
if !flight? && collide_with_events?(x2, y2)
$game_player.check_event_trigger_touch(x2, y2)
stop if $game_map.any_event_starting?
return false
end
return false if !flight? && collide_with_vehicles?(x2, y2)
return true
end
#--------------------------------------------------------------------------
# 仠 摿掕偺曽岦偵偢傜偟偨嵗昗偺寁嶼乮儖乕僾曗惓偁傝乯
#--------------------------------------------------------------------------
def round_x_with_pos(x)
return $game_map.round_x(x.floor) if x < @x && x % 1 < 0.75
return $game_map.round_x(x.ceil) if x > @x && x % 1 > 0.25
return $game_map.round_x(x.round)
end
def round_y_with_pos(y)
return $game_map.round_y(y.floor) if y < @y && y % 1 < 0.75
return $game_map.round_y(y.ceil) if y > @y && y % 1 > 0.25
return $game_map.round_y(y.round)
end
#--------------------------------------------------------------------------
# 仠 忔傝暔偺儅僢僾捠峴壜擻敾掕
#--------------------------------------------------------------------------
def map_passable?(x, y, d)
$game_map.vehicle_passable?(x, y, param(:passage1), param(:passage2))
end
#--------------------------------------------------------------------------
# 仠 妏搙偐傜儔僕傾儞偺庢摼
#--------------------------------------------------------------------------
def angle_radian
if @angle < 90
sx = [@angle, 45].min
elsif @angle < 270
sx = [[180 - @angle, 45].min, -45].max
else
sx = [@angle - 360, -45].max
end
sy = [[(@angle - 180).abs - 90, 45].min, -45].max
base = @angle * PI / 180
base + (atan2(sx, sy) - base) * 2
end
#--------------------------------------------------------------------------
# 仠 夋柺嵗昗偺寁嶼
#--------------------------------------------------------------------------
def display_x
(@x - view_distance * sin(angle_radian) + 0.5) % $game_map.width - center_x
end
def display_y
(@y - view_distance * cos(angle_radian) + 0.5) % $game_map.height - center_y
end
#--------------------------------------------------------------------------
# 仠 帇奅嫍棧偺庢摼
#--------------------------------------------------------------------------
def view_distance
5.8 + (Graphics.height - 416) / 64.0
end
#--------------------------------------------------------------------------
# 仠 僗僫僢僾嫍棧偺庢摼
#--------------------------------------------------------------------------
def snap_distance
view_distance * 32 - 8
end
#--------------------------------------------------------------------------
# 仠 夋柺拞墰偺嵗昗
#--------------------------------------------------------------------------
def center_x
Graphics.width / 64.0
end
def center_y
Graphics.height / 64.0
end
#--------------------------------------------------------------------------
# 仠 僗僫僢僾梡尨揰嵗昗偺寁嶼
#--------------------------------------------------------------------------
def snap_ox
((@x * 32).to_i - ($game_map.display_x * 32).to_i + 16) %
($game_map.width * 32)
end
def snap_oy
((@y * 32).to_i - ($game_map.display_y * 32).to_i + 16) %
($game_map.height * 32)
end
#--------------------------------------------------------------------------
# 仠 尨揰 Y 嵗昗偺寁嶼
#--------------------------------------------------------------------------
def adjust_oy(sy)
s = (Graphics.height - 416) / 2
rate = sy / (256.0 + s)
(adjust_bottom(s) + adjust_height(s) * rate + adjust_alt(rate)).to_i
end
def adjust_bottom(s)
88 + s
end
def adjust_height(s)
318 + s - @altitude / 10.0
end
def adjust_alt(rate)
(190 - @altitude) * (sin((0.75 - 0.5 * rate) * PI) - sin(0.75 * PI))
end
#--------------------------------------------------------------------------
# 仠 昞帵嵗昗傪嵎偟堷偄偨 Y 嵗昗偺寁嶼
#--------------------------------------------------------------------------
def adjust_y(sy)
160 + ((sy / 16.0) ** 2).to_i
end
#--------------------------------------------------------------------------
# 仠 奼戝棪偺庢摼
#--------------------------------------------------------------------------
def adjust_zoom(sy)
s = (Graphics.height - 416) / 2
1.333 + 420.0 / (@altitude + 60) * sy / (318 + s)
end
#--------------------------------------------------------------------------
# 仠 忔傝暔夋柺昞帵嵗昗偺庢摼
#--------------------------------------------------------------------------
def vscreen_x
Graphics.width / 2
end
def vscreen_y
Graphics.height - 48 - (flight? ? @altitude * 2 : 0)
end
def vscreen_z
100
end
#--------------------------------------------------------------------------
# 仠 忔傝暔夋柺昞帵奼戝棪偺庢摼
#--------------------------------------------------------------------------
def vscreen_zoom
param(:vehicle_zoom) || 2.0
end
#--------------------------------------------------------------------------
# 仠 尨揰偐傜 Y 嵗昗偺寁嶼
#--------------------------------------------------------------------------
STEP = 5
def origin_y(oy)
s = (Graphics.height - 416) / 2
b = adjust_bottom(s)
h = adjust_height(s)
return 0 unless oy.between?(b, b + h + 32)
i = ((oy - b - (190 - @altitude) * 0.3) * (256 + s) / h).to_i
i += STEP while adjust_oy(i) < oy
n1 = adjust_oy(i - STEP)
n2 = adjust_oy(i)
i += STEP.to_f * (oy - n1) / (n2 - n1) - STEP if n1 < n2
adjust_y(i)
end
end
#==============================================================================
# 仭 Game_Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# 仚 忔傝暔偺忔崀
#--------------------------------------------------------------------------
def command_206
if $game_player.in_vehicle && next_event_code == 201
$game_player.keep_vehicle
SceneManager.goto(Scene_Map)
elsif !$game_player.get_on_off_vehicle
$game_player.get_on_keep_vehicle
end
end
end
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#
# 僗僾儔僀僩
#
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#==============================================================================
# 仭 Sprite_Character
#==============================================================================
class Sprite_Character
#--------------------------------------------------------------------------
# 仜 夝曻
#--------------------------------------------------------------------------
alias _wdtk_veh3d_dispose dispose
def dispose
dispose_shadow
_wdtk_veh3d_dispose
end
#--------------------------------------------------------------------------
# 仜 僼儗乕儉峏怴
#--------------------------------------------------------------------------
alias _wdtk_veh3d_update update
def update
_wdtk_veh3d_update
update_shadow
end
#--------------------------------------------------------------------------
# 仠 塭昞帵偺奐巒
#--------------------------------------------------------------------------
def start_shadow
@shadow_sprite = ::Sprite.new(viewport)
@shadow_sprite.bitmap = Cache.system("Shadow")
@shadow_sprite.ox = @shadow_sprite.bitmap.width / 2
@shadow_sprite.oy = @shadow_sprite.bitmap.height
@shadow_sprite.z = 180
end
#--------------------------------------------------------------------------
# 仠 塭偺夝曻
#--------------------------------------------------------------------------
def dispose_shadow
if @shadow_sprite
@shadow_sprite.dispose
@shadow_sprite = nil
end
end
#--------------------------------------------------------------------------
# 仠 塭偺峏怴
#--------------------------------------------------------------------------
def update_shadow
return unless @character.is_a?(Game_Vehicle)
altitude = @character.altitude
altitude -= 10 if $game_player.keep_vehicles.include?(@character.type)
if altitude > 0
start_shadow unless @shadow_sprite
@shadow_sprite.x = @character.screen_x
@shadow_sprite.y = @character.screen_y + altitude
@shadow_sprite.opacity = altitude * 8
else
dispose_shadow
end
end
end
#==============================================================================
# 仭 Sprite_Vehicle
#==============================================================================
class Sprite_Vehicle < Sprite_Character
#--------------------------------------------------------------------------
# 仠 揮憲尦價僢僩儅僢僾偺峏怴
#--------------------------------------------------------------------------
def update_bitmap
if graphic_changed?
@tile_id = 0
@character_name = @character.character_name
@character_index = @character.vehicle_index
set_character_bitmap
end
end
#--------------------------------------------------------------------------
# 仠 僌儔僼傿僢僋偺曄峏敾掕
#--------------------------------------------------------------------------
def graphic_changed?
@character_name != @character.character_name ||
@character_index != @character.vehicle_index
end
#--------------------------------------------------------------------------
# 仠 揮憲尦嬮宍偺峏怴
#--------------------------------------------------------------------------
def update_src_rect
if @tile_id == 0
index = @character_index
pattern = @character.pattern < 3 ? @character.pattern : 1
direction = @character.drive_direction
direction = 8 if direction == 5
direction += 5 <=> direction if direction.odd?
sx = (index % 4 * 3 + pattern) * @cw
sy = (index / 4 * 4 + (direction - 2) / 2) * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
end
#--------------------------------------------------------------------------
# 仠 埵抲偺峏怴
#--------------------------------------------------------------------------
def update_position
self.x = @character.vscreen_x
self.y = @character.vscreen_y
self.z = @character.vscreen_z
self.zoom_x = self.zoom_y = @character.vscreen_zoom
end
#--------------------------------------------------------------------------
# 仠 怴偟偄僄僼僃僋僩偺愝掕
#--------------------------------------------------------------------------
def setup_new_effect
if !animation? && $game_player.animation_id > 0
animation = $data_animations[$game_player.animation_id]
start_animation(animation)
end
if !@balloon_sprite && $game_player.balloon_id > 0
@balloon_id = $game_player.balloon_id
start_balloon
end
end
#--------------------------------------------------------------------------
# 仠 傾僯儊乕僔儑儞偺廔椆
#--------------------------------------------------------------------------
def end_animation
super
$game_player.animation_id = 0
end
#--------------------------------------------------------------------------
# 仠 僼僉僟僔傾僀僐儞偺廔椆
#--------------------------------------------------------------------------
def end_balloon
dispose_balloon
$game_player.balloon_id = 0
end
#--------------------------------------------------------------------------
# 仠 塭昞帵偺奐巒
#--------------------------------------------------------------------------
def start_shadow
super
@shadow_sprite.oy -= 6
end
#--------------------------------------------------------------------------
# 仠 塭偺峏怴
#--------------------------------------------------------------------------
def update_shadow
if @character.flight?
start_shadow unless @shadow_sprite
@shadow_sprite.x = Graphics.width / 2
snap_y = Graphics.height / 2 + @character.snap_distance.to_i
@shadow_sprite.y = @character.origin_y(snap_y)
@shadow_sprite.z = @character.screen_z - 1
@shadow_sprite.opacity = 255 * (90 - @character.altitude / 2) / 90
@shadow_sprite.zoom_x = (200 - @character.altitude) / 90.0
@shadow_sprite.zoom_y = @shadow_sprite.zoom_x
end
end
end
#==============================================================================
# 仭 Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# 仚 旘峴慏偺塭僗僾儔僀僩偺嶍彍
#--------------------------------------------------------------------------
def create_shadow; end
def dispose_shadow; end
def update_shadow; end
end
#==============================================================================
# 仭 Spriteset_Vehicle
#==============================================================================
class Spriteset_Vehicle < Spriteset_Map
#--------------------------------------------------------------------------
# 仠 掕悢
#--------------------------------------------------------------------------
RATE = 32
CUT = 2
#--------------------------------------------------------------------------
# 仠 僆僽僕僃僋僩弶婜壔
#--------------------------------------------------------------------------
def initialize(viewport)
@veh_viewport0 = Viewport.new
@veh_viewport4 = viewport
@vehicle = $game_player.vehicle
create_snap
create_scenery
create_ground
create_vehicle
super()
end
#--------------------------------------------------------------------------
# 仠 價儏乕億乕僩偺嶌惉
#--------------------------------------------------------------------------
def create_viewports
super
@viewport1.z = 9990
end
#--------------------------------------------------------------------------
# 仠 攚宨偺嶌惉
#--------------------------------------------------------------------------
def create_scenery
@scenery = Plane.new#(@veh_viewport0)
@scenery.z = -100
end
#--------------------------------------------------------------------------
# 仠 抧柺偺嶌惉
#--------------------------------------------------------------------------
def create_ground
n = 256 + (Graphics.height - 416) / 2
m = 0
y1 = @vehicle.adjust_y(0)
@ground_sprites = Array.new(n) do |i|
y2 = @vehicle.adjust_y(i + 1)
next nil if (y2 - y1) <= [i / RATE, CUT].min
y1 = y2
m += 1
sprite = Sprite.new(@veh_viewport0)
sprite.x = Graphics.width / 2
sprite.ox = Graphics.width / 2
sprite.opacity = m * 32
sprite
end
end
#--------------------------------------------------------------------------
# 仠 忔傝暔僗僾儔僀僩偺嶌惉
#--------------------------------------------------------------------------
def create_vehicle
@sprite_vehicle = Sprite_Vehicle.new(@veh_viewport0, @vehicle)
end
#--------------------------------------------------------------------------
# 仠 僉儍儔僋僞乕僗僾儔僀僩偺嶌惉
#--------------------------------------------------------------------------
def create_characters
super
@character_sprites.reject! do |sprite|
case sprite.character
when $game_player, Game_Follower, @vehicle
sprite.dispose
end
sprite.disposed?
end
end
#--------------------------------------------------------------------------
# 仠 嶣塭梡僗僾儔僀僩偺嶌惉
#--------------------------------------------------------------------------
def create_snap
@snap_sprite = Sprite.new
@snap_sprite.x = Graphics.width / 2
@snap_sprite.y = Graphics.height / 2 + @vehicle.snap_distance
@snap_sprite.z = 9999
end
#--------------------------------------------------------------------------
# 仠 夝曻
#--------------------------------------------------------------------------
def dispose
super
dispose_snap
dispose_scenery
dispose_ground
dispose_vehicle
end
#--------------------------------------------------------------------------
# 仠 價儏乕億乕僩偺夝曻
#--------------------------------------------------------------------------
def dispose_viewports
@veh_viewport0.dispose
super
end
#--------------------------------------------------------------------------
# 仠 嶣塭梡僗僾儔僀僩偺夝曻
#--------------------------------------------------------------------------
def dispose_snap
@snap_sprite.dispose
end
#--------------------------------------------------------------------------
# 仠 攚宨偺夝曻
#--------------------------------------------------------------------------
def dispose_scenery
@scenery.bitmap.dispose if @scenery.bitmap && !@scenery.bitmap.disposed?
@scenery.dispose
end
#--------------------------------------------------------------------------
# 仠 抧柺偺夝曻
#--------------------------------------------------------------------------
def dispose_ground
@ground_sprites.each {|sprite| sprite.dispose if sprite }
end
#--------------------------------------------------------------------------
# 仠 忔傝暔僗僾儔僀僩偺夝曻
#--------------------------------------------------------------------------
def dispose_vehicle
@sprite_vehicle.dispose
end
#--------------------------------------------------------------------------
# 仠 僼儗乕儉峏怴
#--------------------------------------------------------------------------
def update
super
return unless WdTk::Veh3D.need_update?
last_brightness = Graphics.brightness
Graphics.brightness = 255
on_snap
update_snap
on_ground
update_scenery
update_ground
update_vehicle
on_base
Graphics.brightness = last_brightness
end
#--------------------------------------------------------------------------
# 仠 僞僀儖儅僢僾偺峏怴
#--------------------------------------------------------------------------
def update_tilemap
$game_map.set_pos(@vehicle.display_x, @vehicle.display_y)
super
end
#--------------------------------------------------------------------------
# 仠 揤岓偺峏怴
#--------------------------------------------------------------------------
def update_weather
super
@weather.ox = -@vehicle.angle
@weather.oy = 0
end
#--------------------------------------------------------------------------
# 仠 僗僫僢僾偺嶣塭
#--------------------------------------------------------------------------
def on_snap
@viewport1.visible = true
@veh_viewport0.visible = @viewport2.visible =
@viewport3.visible = @veh_viewport4.visible = false
@scenery.visible = false
@snap_sprite.bitmap.dispose if @snap_sprite.bitmap
@snap_sprite.bitmap = Graphics.snap_to_bitmap
end
#--------------------------------------------------------------------------
# 仠 僗僫僢僾偺峏怴
#--------------------------------------------------------------------------
def update_snap
gh = Graphics.height
gx = (Graphics.width - gh) / 2
@snap_sprite.ox = @vehicle.snap_ox - gx
@snap_sprite.oy = @vehicle.snap_oy
@snap_sprite.src_rect.set(gx, 0, gh, gh)
@snap_sprite.angle = -@vehicle.angle
end
#--------------------------------------------------------------------------
# 仠 攚宨偺峏怴
#--------------------------------------------------------------------------
def update_scenery
if WdTk::Veh3D::Scenery
@scenery.bitmap = Cache.parallax(WdTk::Veh3D::Scenery)
else
@scenery.bitmap = @parallax.bitmap
end
angle = -@vehicle.angle * WdTk::Veh3D::Repeat % 360
@scenery.ox = @scenery.bitmap.width * angle / 360
end
#--------------------------------------------------------------------------
# 仠 抧柺偺嶣塭
#--------------------------------------------------------------------------
def on_ground
@viewport1.visible = false
@veh_viewport0.visible = @viewport2.visible =
@viewport3.visible = @veh_viewport4.visible = false
@snap_sprite.visible = true
@scenery.visible = true
@scenery.oy = 160 - 64
@bitmap.dispose if @bitmap
@bitmap = Graphics.snap_to_bitmap
end
#--------------------------------------------------------------------------
# 仠 抧柺偺峏怴
#--------------------------------------------------------------------------
def update_ground
next_y = @vehicle.adjust_y(0)
last_oy = @vehicle.adjust_oy(0)
@ground_sprites.each_with_index do |sprite, i|
next unless sprite
sprite.bitmap = @bitmap
next_oy = @vehicle.adjust_oy(i + 1)
height = (next_oy > last_oy ? next_oy - last_oy : 1)
sprite.src_rect.set(0, last_oy, @bitmap.width, height)
last_oy = next_oy
sprite.y = next_y
sprite.zoom_x = @vehicle.adjust_zoom(sprite.y - 160)
next_y = @vehicle.adjust_y(i + 1)
sprite.zoom_y = (next_y - sprite.y).to_f / height
end
end
#--------------------------------------------------------------------------
# 仠 忔傝暔偺峏怴
#--------------------------------------------------------------------------
def update_vehicle
@sprite_vehicle.update
end
#--------------------------------------------------------------------------
# 仠 婎杮忬懺偵栠偡
#--------------------------------------------------------------------------
def on_base
@snap_sprite.visible = false
@veh_viewport0.visible = @viewport2.visible =
@viewport3.visible = @veh_viewport4.visible = true
@scenery.oy = 0
end
end
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#
# 僂傿儞僪僂
#
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#==============================================================================
# 仭 Window_Message
#==============================================================================
class Window_Message
#--------------------------------------------------------------------------
# 仠 價儏乕億乕僩偺愝掕
#--------------------------------------------------------------------------
def viewport=(viewport)
super
@back_sprite.viewport = viewport
@gold_window.viewport = viewport
@choice_window.viewport = viewport
@number_window.viewport = viewport
@item_window.viewport = viewport
end
end
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#
# 僔乕儞
#
#劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒劒
#==============================================================================
# 仭 Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# 侟 廔椆慜張棟
#--------------------------------------------------------------------------
alias _wdtk_veh3d_pre_terminate pre_terminate
def pre_terminate
_wdtk_veh3d_pre_terminate
fadeout(30) if SceneManager.scene_is?(Scene_Vehicle)
end
end
#==============================================================================
# 仭 Scene_Vehicle
#------------------------------------------------------------------------------
# 丂忔傝暔夋柺偺張棟傪峴偆僋儔僗偱偡丅
#==============================================================================
class Scene_Vehicle < Scene_Map
#--------------------------------------------------------------------------
# 仠 奐巒張棟
#--------------------------------------------------------------------------
def start
WdTk::Veh3D.reset
$game_player.on_vehicle_start
super
end
#--------------------------------------------------------------------------
# 仠 廔椆慜張棟
#--------------------------------------------------------------------------
def pre_terminate
super
pre_map_scene if SceneManager.scene_is?(Scene_Map)
end
#--------------------------------------------------------------------------
# 仠 廔椆張棟
#--------------------------------------------------------------------------
def terminate
$game_player.on_vehicle_end if SceneManager.scene_is?(Scene_Map)
super
GC.start
end
#--------------------------------------------------------------------------
# 仠 價儏乕億乕僩偺嶌惉
#--------------------------------------------------------------------------
def create_main_viewport
super
@window_viewport = Viewport.new
@window_viewport.z = 200
end
#--------------------------------------------------------------------------
# 仠 價儏乕億乕僩偺夝曻
#--------------------------------------------------------------------------
def dispose_main_viewport
super
@window_viewport.dispose
end
#--------------------------------------------------------------------------
# 仠 僼儗乕儉峏怴乮婎杮乯
#--------------------------------------------------------------------------
def update_basic
if WdTk::Veh3D.need_update?
Graphics.frame_rate = WdTk::Veh3D::FrameRate
Graphics.update
Graphics.frame_rate = 60
else
Graphics.frame_count += 1
end
Input.update
WdTk::Veh3D.update
update_all_windows
end
#--------------------------------------------------------------------------
# 仠 斈梡僼僃乕僪張棟
#--------------------------------------------------------------------------
def fade_loop(duration)
WdTk::Veh3D.reset
super
Graphics.frame_reset
end
#--------------------------------------------------------------------------
# 仠 僗僾儔僀僩僙僢僩偺嶌惉
#--------------------------------------------------------------------------
def create_spriteset
@spriteset = Spriteset_Vehicle.new(@window_viewport)
end
#--------------------------------------------------------------------------
# 仠 儊僢僙乕僕僂傿儞僪僂偺嶌惉
#--------------------------------------------------------------------------
def create_message_window
super
@message_window.viewport = @window_viewport
end
#--------------------------------------------------------------------------
# 仠 僗僋儘乕儖暥復僂傿儞僪僂偺嶌惉
#--------------------------------------------------------------------------
def create_scroll_text_window
super
@scroll_text_window.viewport = @window_viewport
end
#--------------------------------------------------------------------------
# 仠 儅僢僾柤僂傿儞僪僂偺嶌惉
#--------------------------------------------------------------------------
def create_location_window
super
@map_name_window.viewport = @window_viewport
end
#--------------------------------------------------------------------------
# 仠 僉儍儞僙儖儃僞儞偵傛傞儊僯儏乕屇傃弌偟敾掕
#--------------------------------------------------------------------------
def update_call_menu
end
#--------------------------------------------------------------------------
# 仠 儅僢僾夋柺慗堏偺慜張棟
#--------------------------------------------------------------------------
def pre_map_scene
fadeout(30)
Graphics.brightness = 0
end
end
#==============================================================================
# 仭 Scene_Base
#==============================================================================
class Scene_Base
#--------------------------------------------------------------------------
# 仜 儊僀儞張棟
#--------------------------------------------------------------------------
alias _wdtk_veh3d_main main
def main
_wdtk_veh3d_main
if SceneManager.scene_is?(Scene_Map) and $game_player.in_vehicle
SceneManager.goto(Scene_Vehicle)
end
end
end[/fold]
[fold=数据库]=begin
仴 忔傝暔媅帡俁俢壔 僨乕僞儀乕僗 ver. 3.0
RPG僣僋乕儖VXAce梡僗僋儕僾僩
惂嶌 : 栘惎儁儞僊儞
URL : http://woodpenguin.blog.fc2.com/
------------------------------------------------------------------------------
奣梫
仩 忔傝暔搵忔帪偺夋柺傪丄屻曽偐傜帇偨媅帡俁俢偱昞帵偟傑偡丅
------------------------------------------------------------------------------
巊偄曽
仩 奺僷儔儊乕僞偺娙堈愢柧
:system => 忔傝暔傪捛壛偡傞応崌偺婎杮僨乕僞
:switch_id => 忔傝暔搵忔帪偵ON偵側傞僗僀僢僠ID
:passage1 => 捠峴偱偒傞僆乕僩僞僀儖偺庬椶偺攝楍
:passage2 => 僞僀儖僙僢僩B乣俤傪捠峴偱偒傞偐偳偆偐
:land_denial => 忔傝暔偐傜崀傝傜傟側偄僆乕僩僞僀儖偺庬椶偺攝楍
:move_speed => 堏摦懍搙乮彫悢揰埲壓傕壜擻乯
:turning => 慁夞懍搙
:walk_anime => 搵忔拞偺曕峴傾僯儊僼儔僌
:step_anime => 搵忔拞偺懌摜傒傾僯儊僼儔僌
:encount => 僄儞僇僂儞僩棪乮100偱捠忢偲摨偠乯
:sync_dir => 搵忔帪偵忔傝暔偺岦偒傪僾儗僀儎乕偺岦偒偵崌傢偣傞僼儔僌
:get_here => 廳側偭偨忬懺偱搵忔偡傞偐偳偆偐偺僼儔僌
:flight => 旘峴僼儔僌
:max_altitude => 旘峴帪偺崅搙偺忋尷
:min_altitude => 旘峴帪偺崅搙偺壓尷
:dir_type => 搵忔拞偵昞帵偝傟傞忔傝暔偺岦偒曄峏僞僀僾
:vehicle_index1 => 搵忔拞偵昞帵偝傟傞忔傝暔偺曕峴僌儔僼傿僢僋偺僀儞僨僢僋僗1
:vehicle_index2 => 搵忔拞偵昞帵偝傟傞忔傝暔偺曕峴僌儔僼傿僢僋偺僀儞僨僢僋僗2
:vehicle_index3 => 搵忔拞偵昞帵偝傟傞忔傝暔偺曕峴僌儔僼傿僢僋偺僀儞僨僢僋僗3
:vehicle_zoom => 搵忔拞偵昞帵偝傟傞曕峴僌儔僼傿僢僋偺奼戝棪
:inp_forward1 => 慜恑傪峴偆儃僞儞1
:inp_forward2 => 慜恑傪峴偆儃僞儞2
:inp_backward => 屻戅傪峴偆儃僞儞
:inp_turnleft1 => 塃偵慁夞偡傞儃僞儞1
:inp_turnleft2 => 塃偵慁夞偡傞儃僞儞2
:inp_turnright1 => 嵍偵慁夞偡傞儃僞儞1
:inp_turnright2 => 嵍偵慁夞偡傞儃僞儞2
:inp_up => 忋徃偡傞儃僞儞乮旘峴僞僀僾偺傒乯
:inp_down => 壓崀偡傞儃僞儞乮旘峴僞僀僾偺傒乯
:inp_horz => 悈暯堏摦偡傞儃僞儞乮偙偺儃僞儞偲曽岦僉乕偱憖嶌乯
:inp_get_off => 忔傝暔偐傜崀傝傞儃僞儞
:inp_event => 僀儀儞僩傪挷傋傞儃僞儞
:inp_menu => 儊僯儏乕夋柺傪奐偔儃僞儞
仩 愝掕崁栚偺徻嵶愢柧偼壓婰偺僒僀僩傪嶲徠偟偰偔偩偝偄丅
http://woodpenguin.web.fc2.com/rgss3/vehicle3D.html
=end
module WdTk
module Veh3D
@data = {}
#//////////////////////////////////////////////////////////////////////////////
#
# 愝掕崁栚
#
#//////////////////////////////////////////////////////////////////////////////
#--------------------------------------------------------------------------
# 仠 攚宨夋憸
#--------------------------------------------------------------------------
Scenery = "BlueSky"
#--------------------------------------------------------------------------
# 仠 攚宨偺儖乕僾夞悢
#--------------------------------------------------------------------------
Repeat = 4
#--------------------------------------------------------------------------
# 仠 僼儗乕儉儗乕僩 (10 乣 60)
#--------------------------------------------------------------------------
FrameRate = 40
#--------------------------------------------------------------------------
# 仠 彫宆慏偺愝掕
#--------------------------------------------------------------------------
vehicle = {}
vehicle[:passage1] = [0,6,8,12,14]
vehicle[:move_speed] = 4
vehicle[:turning] = 16
vehicle[:encount] = 100
vehicle[:sync_dir] = true
vehicle[:get_here] = false
vehicle[:dir_type] = 0
vehicle[:inp_forward1] = :A
vehicle[:inp_forward2] = :UP
vehicle[:inp_backward] = :DOWN
vehicle[:inp_turnleft1] = :LEFT
vehicle[:inp_turnright1] = :RIGHT
vehicle[:inp_get_off] = :C
vehicle[:inp_event] = :C
vehicle[:inp_menu] = :B
@data[:boat] = vehicle
#--------------------------------------------------------------------------
# 仠 戝宆慏偺愝掕
#--------------------------------------------------------------------------
vehicle = {}
vehicle[:passage1] = [0,1,6,8,12,14]
vehicle[:move_speed] = 5
vehicle[:turning] = 8
vehicle[:encount] = 50
vehicle[:sync_dir] = true
vehicle[:get_here] = false
vehicle[:dir_type] = 0
vehicle[:inp_forward1] = :A
vehicle[:inp_forward2] = :UP
vehicle[:inp_backward] = :DOWN
vehicle[:inp_turnleft1] = :LEFT
vehicle[:inp_turnright1] = :RIGHT
vehicle[:inp_get_off] = :C
vehicle[:inp_event] = :C
vehicle[:inp_menu] = :B
@data[:ship] = vehicle
#--------------------------------------------------------------------------
# 仠 旘峴慏偺愝掕
#--------------------------------------------------------------------------
vehicle = {}
vehicle[:land_denial] = (0..15).to_a + [20,21,23,28,31,36,39,43,44,45,47]
vehicle[:move_speed] = 6
vehicle[:turning] = 12
vehicle[:encount] = 0
vehicle[:get_here] = true
vehicle[:flight] = true
vehicle[:dir_type] = 0
vehicle[:inp_forward1] = :A
vehicle[:inp_turnleft1] = :LEFT
vehicle[:inp_turnleft2] = :L
vehicle[:inp_turnright1] = :RIGHT
vehicle[:inp_turnright2] = :R
vehicle[:inp_up] = :DOWN
vehicle[:inp_down] = :UP
vehicle[:inp_horz] = :X
vehicle[:inp_get_off] = :C
vehicle[:inp_menu] = :B
@data[:airship] = vehicle
#--------------------------------------------------------------------------
# 仠 攏偺愝掕 (僒儞僾儖 1)
#--------------------------------------------------------------------------
vehicle = {}
vehicle[:system] = RPG::System::Vehicle.new
vehicle[:system].character_name = "Animal"
vehicle[:system].character_index = 5
vehicle[:system].bgm = RPG::BGM.new('Field1')
vehicle[:system].start_map_id = 1
vehicle[:system].start_x = 58
vehicle[:system].start_y = 107
vehicle[:passage1] = [16,17,18,19,24,25,26,27,29,32,33,34,35,37,40,42]
vehicle[:passage2] = true
vehicle[:move_speed] = 4.5
vehicle[:turning] = 16
vehicle[:step_anime] = false
vehicle[:encount] = 0
vehicle[:sync_dir] = true
vehicle[:get_here] = true
vehicle[:dir_type] = 0
vehicle[:inp_forward1] = :A
vehicle[:inp_forward2] = :UP
vehicle[:inp_backward] = :DOWN
vehicle[:inp_turnleft1] = :LEFT
vehicle[:inp_turnright1] = :RIGHT
vehicle[:inp_get_off] = :C
vehicle[:inp_event] = :C
vehicle[:inp_menu] = :B
#@data[:horse] = vehicle # 僐儊儞僩傾僂僩夝彍偱攝抲偝傟傑偡丅
#--------------------------------------------------------------------------
# 仠 旘峴慏2偺愝掕 (僒儞僾儖 2)
#--------------------------------------------------------------------------
vehicle = {}
vehicle[:system] = RPG::System::Vehicle.new
vehicle[:system].character_name = "Vehicle"
vehicle[:system].character_index = 2
vehicle[:system].bgm = RPG::BGM.new('Field1')
vehicle[:system].start_map_id = 1
vehicle[:system].start_x = 58
vehicle[:system].start_y = 107
vehicle[:land_denial] = (0..15).to_a + [20,21,23,28,31,36,39,43,44,45,47]
vehicle[:flight] = true
vehicle[:move_speed] = 4
vehicle[:turning] = 10
vehicle[:encount] = 0
vehicle[:get_here] = true
vehicle[:max_altitude] = 60
vehicle[:dir_type] = 0
vehicle[:inp_forward1] = :UP
vehicle[:inp_backward] = :DOWN
vehicle[:inp_left] = :LEFT
vehicle[:inp_right] = :RIGHT
vehicle[:inp_turnleft1] = :LEFT
vehicle[:inp_turnleft2] = :L
vehicle[:inp_turnright1] = :RIGHT
vehicle[:inp_turnright2] = :R
vehicle[:inp_up] = :C
vehicle[:inp_down] = :B
vehicle[:inp_horz] = :A
#@data[:S_airship] = vehicle
#//////////////////////////////////////////////////////////////////////////////
#
# 埲崀丄曄峏偡傞昁梫側偟
#
#//////////////////////////////////////////////////////////////////////////////
#--------------------------------------------------------------------------
# 仠 嵟掅尷昁梫側忔傝暔僨乕僞偑愝掕偝傟偰偄傞偐偳偆偐僠僃僢僋
#--------------------------------------------------------------------------
def self.msg_non_data(type, param)
unless @data[type][param]
message = "忔傝暔 [:%s] 偺僷儔儊乕僞 [:%s] 傪愝掕偟偰偔偩偝偄丅"
msgbox sprintf(message, type, param)
exit
end
end
@data.each_key do |type|
msg_non_data(type, :system) unless [:boat, :ship, :airship].include?(type)
msg_non_data(type, :move_speed)
msg_non_data(type, :turning)
msg_non_data(type, :dir_type)
msg_non_data(type, :vehicle_index3) if @data[type][:dir_type] == 3
end
def self.data
@data
end
end
@material ||= []
@material << :Veh3D
def self.include?(sym)
@material.include?(sym)
end
end[/fold]
[fold=最后]进入[/fold] |
|