mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
249 lines
7.1 KiB
Ruby
249 lines
7.1 KiB
Ruby
#===============================================================================
|
|
# Modified Scene_Map class for Pokémon.
|
|
#===============================================================================
|
|
class Scene_Map
|
|
attr_reader :spritesetGlobal
|
|
attr_reader :map_renderer
|
|
|
|
def spriteset(map_id = -1)
|
|
return @spritesets[map_id] if map_id > 0 && @spritesets[map_id]
|
|
@spritesets.each_value do |i|
|
|
return i if i.map == $game_map
|
|
end
|
|
return @spritesets.values[0]
|
|
end
|
|
|
|
def createSpritesets
|
|
@map_renderer = TilemapRenderer.new(Spriteset_Map.viewport) if !@map_renderer || @map_renderer.disposed?
|
|
@spritesetGlobal = Spriteset_Global.new if !@spritesetGlobal
|
|
@spritesets = {}
|
|
$map_factory.maps.each do |map|
|
|
@spritesets[map.map_id] = Spriteset_Map.new(map)
|
|
end
|
|
$map_factory.setSceneStarted(self)
|
|
updateSpritesets(true)
|
|
end
|
|
|
|
def createSingleSpriteset(map)
|
|
temp = $scene.spriteset.getAnimations
|
|
@spritesets[map] = Spriteset_Map.new($map_factory.maps[map])
|
|
$scene.spriteset.restoreAnimations(temp)
|
|
$map_factory.setSceneStarted(self)
|
|
updateSpritesets(true)
|
|
end
|
|
|
|
def disposeSpritesets
|
|
return if !@spritesets
|
|
@spritesets.each_key do |i|
|
|
next if !@spritesets[i]
|
|
@spritesets[i].dispose
|
|
@spritesets[i] = nil
|
|
end
|
|
@spritesets.clear
|
|
@spritesets = {}
|
|
end
|
|
|
|
def dispose
|
|
disposeSpritesets
|
|
@map_renderer.dispose
|
|
@map_renderer = nil
|
|
@spritesetGlobal.dispose
|
|
@spritesetGlobal = nil
|
|
end
|
|
|
|
def autofade(mapid)
|
|
playingBGM = $game_system.playing_bgm
|
|
playingBGS = $game_system.playing_bgs
|
|
return if !playingBGM && !playingBGS
|
|
map = load_data(sprintf("Data/Map%03d.rxdata", mapid))
|
|
if playingBGM && map.autoplay_bgm
|
|
test_filename = map.bgm.name
|
|
test_filename += "_n" if PBDayNight.isNight? && FileTest.audio_exist?("Audio/BGM/" + test_filename + "_n")
|
|
pbBGMFade(0.8) if playingBGM.name != test_filename
|
|
end
|
|
if playingBGS && map.autoplay_bgs && playingBGS.name != map.bgs.name
|
|
pbBGMFade(0.8)
|
|
end
|
|
Graphics.frame_reset
|
|
end
|
|
|
|
def transfer_player(cancel_swimming = true)
|
|
$game_temp.player_transferring = false
|
|
pbCancelVehicles($game_temp.player_new_map_id, cancel_swimming)
|
|
autofade($game_temp.player_new_map_id)
|
|
pbBridgeOff
|
|
@spritesetGlobal.playersprite.clearShadows
|
|
if $game_map.map_id != $game_temp.player_new_map_id
|
|
$map_factory.setup($game_temp.player_new_map_id)
|
|
end
|
|
$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
|
|
case $game_temp.player_new_direction
|
|
when 2 then $game_player.turn_down
|
|
when 4 then $game_player.turn_left
|
|
when 6 then $game_player.turn_right
|
|
when 8 then $game_player.turn_up
|
|
end
|
|
$game_player.straighten
|
|
$game_temp.followers.map_transfer_followers
|
|
$game_map.update
|
|
disposeSpritesets
|
|
RPG::Cache.clear
|
|
createSpritesets
|
|
if $game_temp.transition_processing
|
|
$game_temp.transition_processing = false
|
|
Graphics.transition
|
|
end
|
|
$game_map.autoplay
|
|
Graphics.frame_reset
|
|
Input.update
|
|
end
|
|
|
|
def call_menu
|
|
$game_temp.menu_calling = false
|
|
$game_temp.in_menu = true
|
|
$game_player.straighten
|
|
$game_map.update
|
|
UI::PauseMenu.new
|
|
$game_temp.in_menu = false
|
|
end
|
|
|
|
def call_debug
|
|
$game_temp.debug_calling = false
|
|
pbPlayDecisionSE
|
|
$game_player.straighten
|
|
pbFadeOutIn { pbDebugMenu }
|
|
end
|
|
|
|
def miniupdate
|
|
$game_temp.in_mini_update = true
|
|
loop do
|
|
$game_player.update
|
|
updateMaps
|
|
$game_system.update
|
|
$game_screen.update
|
|
break if !$game_temp.player_transferring
|
|
transfer_player(false)
|
|
break if $game_temp.transition_processing
|
|
end
|
|
updateSpritesets
|
|
$game_temp.in_mini_update = false
|
|
end
|
|
|
|
def updateMaps
|
|
$map_factory.maps.each do |map|
|
|
map.update
|
|
end
|
|
$map_factory.updateMaps(self)
|
|
end
|
|
|
|
def updateSpritesets(refresh = false)
|
|
@spritesets = {} if !@spritesets
|
|
$map_factory.maps.each do |map|
|
|
@spritesets[map.map_id] = Spriteset_Map.new(map) if !@spritesets[map.map_id]
|
|
end
|
|
keys = @spritesets.keys.clone
|
|
keys.each do |i|
|
|
if $map_factory.hasMap?(i)
|
|
@spritesets[i].update
|
|
else
|
|
@spritesets[i]&.dispose
|
|
@spritesets[i] = nil
|
|
@spritesets.delete(i)
|
|
end
|
|
end
|
|
@spritesetGlobal.update
|
|
pbDayNightTint(@map_renderer)
|
|
@map_renderer.refresh if refresh
|
|
@map_renderer.update
|
|
EventHandlers.trigger(:on_frame_update)
|
|
end
|
|
|
|
def update
|
|
loop do
|
|
pbMapInterpreter.update
|
|
$game_player.update
|
|
updateMaps
|
|
$game_system.update
|
|
$game_screen.update
|
|
break if !$game_temp.player_transferring
|
|
transfer_player(false)
|
|
break if $game_temp.transition_processing
|
|
end
|
|
updateSpritesets
|
|
if $game_temp.title_screen_calling
|
|
SaveData.mark_values_as_unloaded
|
|
$scene = pbCallTitle
|
|
return
|
|
end
|
|
if $game_temp.transition_processing
|
|
$game_temp.transition_processing = false
|
|
if $game_temp.transition_name == ""
|
|
Graphics.transition
|
|
else
|
|
Graphics.transition(40, "Graphics/Transitions/" + $game_temp.transition_name)
|
|
end
|
|
end
|
|
return if $game_temp.message_window_showing
|
|
if !pbMapInterpreterRunning? && !$PokemonGlobal.forced_movement?
|
|
if Input.trigger?(Input::USE)
|
|
$game_temp.interact_calling = true
|
|
elsif Input.trigger?(Input::ACTION)
|
|
if !$game_system.menu_disabled && !$game_player.moving?
|
|
$game_temp.menu_calling = true
|
|
$game_temp.menu_beep = true
|
|
end
|
|
elsif Input.trigger?(Input::SPECIAL)
|
|
$game_temp.ready_menu_calling = true if !$game_player.moving?
|
|
elsif Input.press?(Input::F9)
|
|
$game_temp.debug_calling = true if $DEBUG
|
|
end
|
|
end
|
|
if !$game_player.moving?
|
|
if $game_temp.menu_calling
|
|
call_menu
|
|
elsif $game_temp.debug_calling
|
|
call_debug
|
|
elsif $game_temp.ready_menu_calling
|
|
$game_temp.ready_menu_calling = false
|
|
$game_player.straighten
|
|
pbUseKeyItem
|
|
elsif $game_temp.interact_calling
|
|
$game_temp.interact_calling = false
|
|
triggered = false
|
|
# Try to trigger an event the player is standing on, and one in front of
|
|
# the player
|
|
if !$game_temp.in_mini_update
|
|
triggered ||= $game_player.check_event_trigger_here([0])
|
|
triggered ||= $game_player.check_event_trigger_there([0, 2]) if !triggered
|
|
end
|
|
# Try to trigger an interaction with a tile
|
|
if !triggered
|
|
$game_player.straighten
|
|
EventHandlers.trigger(:on_player_interact)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def main
|
|
createSpritesets
|
|
Graphics.transition
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
update
|
|
break if $scene != self
|
|
end
|
|
Graphics.freeze
|
|
dispose
|
|
if $game_temp.title_screen_calling
|
|
pbMapInterpreter.command_end if pbMapInterpreterRunning?
|
|
$game_temp.last_uptime_refreshed_play_time = nil
|
|
$game_temp.title_screen_calling = false
|
|
pbBGMFade(1.0)
|
|
Graphics.transition
|
|
Graphics.freeze
|
|
end
|
|
end
|
|
end
|