Easy Teleport Script Redux

● ARCHIVED · READ-ONLY
Started by ZeroBreak 1 posts View original ↗
  1. This is actually utilizing Balrogic's "easy teleport" so all credit for the base product is due thereof. What this post is for compared to the other is two things:
    1. For the avoidance of doubt (and because the last word on the subject was in 2015) I am posting this separately, both to analyze the support request cliffhanger (an unresolved cancel crash) and to differentiate accordingly; and
    2. The inclusion of a very useful modification that I don't know if anyone has ever considered before, and one which is basically genre-standard by now so I was thinking like "what the hell" and put it in.
    On the first point, what I mean by cancel crash is just that: it crashes the game if you cancel the request. On the other, I have given thought to add a twist of my own. I'm using the script as a hyperwarp function in my own project and noticed that it doesn't have built-in handling for vehicular transport (e.g. ship teleport to dock near your destination upon arrival). I am therefore 1: requesting analysis of the script call that crashes on cancel, and 2: posting with my additions in case they are of use to anyone.

    First, add this "between materials and main" (or "yanfly and main" if you're using ace message, ace save, etc.)

    Spoiler
    Code:
    # Easy Teleport 1.0c by Balrogic (with BreakerZero ship warp extension)
    
    =begin
    This script enables a very simple teleportation system that
    requires minimal configuration by you, the game developer.
    There are two teleport lists. Both can be used at the same
    time if you feel like it. One is unsorted and adds locations
    to the list in the same order they are added. The other needs
    to be told which location belongs where in the list. Both lists
    automatically set the new location equal to the current map's
    display name and the player's location. You can override this
    behavior if you so choose by adding arguments when you call
    the method.
    
    To add a location to the unsorted list put this in a script call.
    I like making the player step on an event set to event touch.
    
    Balrogic::Teleport::nosetup
    
    To add a location to the sorted list put this in a script call.
    Replace 0 with whatever sorting number you want for that location.
    
    Balrogic::Teleport::somesetup(0)
    
    For finer control, include as many of the following arguments as
    you want.
    For direction, 0 is retain. 2 is down. 4 is left. 6 is right. 8 is up.
    
    Balrogic::Teleport::nosetup("name", map_id, x, y, direction)
    Balrogic::Teleport::somesetup(sorting, "name", map_id, x, y, direction)
    
    To access the teleport list put the following in a script call.
    For the unsorted list:
    
    Balrogic::Teleport::unsorted
    
    For the sorted list:
    
    Balrogic::Teleport::sorted
    
    
    To disable access to teleportation, use script call below.
    
    Balrogic::Teleport::disable
    
    To re-enable:
    
    Balrogic::Teleport::enable
    
    For the breaker zero vehicular warp addition there is some required setup.
    Once configured, use a pair of common event calls to ensure proper behaviour.
    
    Note that when configured properly the teleport will crossfade to black several
    times during the process when cast at sea or in the sky. There's nothing to be
    done about this, however I don't give two dimes about it due to the intent of
    the script so consider it an added bonus for the purpose of visual effect.
    
    Note also that commercial use is permitted with the proper credit.
    
    =end
    
    module Balrogic   # Module 1
      module Teleport # Module 2
     
    # Configuration - Comment out anything you don't want to use.
    # Display message when selecting teleport destination.
      @destination = "Please select your destination."
     
    # Message to show when you don't know any destinations.
      @nodestination = "You don't know where to go!"
     
    # Message to show when teleportation is disabled.
      @disabled = "Can't warp from here..."
     
    # Sound effect to play on teleportation.
      @sound = Proc.new {
      RPG::SE.new("Teleport", 100, 100).play # Sound name, volume and pitch.
      } # Leave this alone.
     
    # Transition effect. 0 is default black, 1 is white, 2 for none.
      @transition = Proc.new {
      $game_temp.fade_type = 1
      } # Leave this alone too.
    # Setup continues at line 107 for the ship warp. Don't change anything else.
      def self.unsorted
        $game_self_switches[[:balrogic, :teleport, :override]] = true
        if $game_self_switches[[:balrogic, :teleport, :disabled]]
          $game_message.add(@disabled) if @disabled
          $game_self_switches[[:balrogic, :teleport, :override]] = nil
        else
          if $game_self_switches[[:balrogic, :teleport]]
            $game_message.choice_cancel_type = 999999999999
            $game_self_switches[[:balrogic, :teleport]].each{ |x|
              $game_message.choices << x[0]
              }
            $game_message.choice_proc = Proc.new { |x|
              $game_player.reserve_transfer($game_self_switches[[:balrogic, :teleport]][x][1], $game_self_switches[[:balrogic, :teleport]][x][2], $game_self_switches[[:balrogic, :teleport]][x][3], $game_self_switches[[:balrogic, :teleport]][x][4])
              #---------------------------------------------------------------------
              #This line begins control variable setup. Ship and airship have been
              #predefined, but you can substitute the boat for one or the other (or
              #add another definition thereof if you so choose).
              #Change only the number for $game_variables to whichever ones are to.
              #be used - the other side defines the control point from the list of
              #destinations that will be stored accordingly.
              #---------------------------------------------------------------------
              $game_variables[75]=$game_self_switches[[:balrogic, :teleport]][x][2]
              $game_variables[76]=$game_self_switches[[:balrogic, :teleport]][x][3]
              $game_variables[79]=$game_self_switches[[:balrogic, :teleport]][x][5]
              $game_variables[80]=$game_self_switches[[:balrogic, :teleport]][x][6]
              $game_variables[77]=$game_self_switches[[:balrogic, :teleport]][x][7]
              $game_variables[78]=$game_self_switches[[:balrogic, :teleport]][x][8]
              #---------------------------------------------------------------------
              #Do not change anything in the next definitions block.
              #Control Variable setup continues at line 150.
              #---------------------------------------------------------------------
              Balrogic::Teleport::configuration
              }
            $game_message.add(@destination) if @destination
          else
            $game_message.add(@nodestination) if @nodestination
            $game_self_switches[[:balrogic, :teleport, :override]] = nil
          end
        end
      end
     
      def self.sorted
        $game_self_switches[[:balrogic, :teleport, :override]] = true
        if $game_self_switches[[:balrogic, :teleport, :disabled]]
          $game_message.add(@disabled) if @disabled
          $game_self_switches[[:balrogic, :teleport, :override]] = nil
        else
          if $game_self_switches[[:balrogic, :teleport_manual]]
            $game_message.choice_cancel_type = 999999999999
            @sorted_list = []
            $game_self_switches[[:balrogic, :teleport_manual]].each{ |x|
              @sorted_list << x if x
              }
            @sorted_list.each{ |x|
              $game_message.choices << x[0]
              }
            $game_message.choice_proc = Proc.new { |x|
              $game_player.reserve_transfer(@sorted_list[x][1], @sorted_list[x][2], @sorted_list[x][3], @sorted_list[x][4])
              #---------------------------------------------------------------------
              #You can change control variable use here as well, even if separate
              #from those used for unsorted warp calls.
              #Again, change only the number for $game_variables or you'll brick
              #your game.
              #---------------------------------------------------------------------
              $game_variables[75]=@sorted_list[x][2]
              $game_variables[76]=@sorted_list[x][3]
              $game_variables[79]=@sorted_list[x][5]
              $game_variables[80]=@sorted_list[x][6]
              $game_variables[77]=@sorted_list[x][7]
              $game_variables[78]=@sorted_list[x][8]
              #---------------------------------------------------------------------
              #This line ends all user setup - do not change anything from here on.
              #---------------------------------------------------------------------
              Balrogic::Teleport::configuration
              }
            $game_message.add(@destination) if @destination
          else
            $game_message.add(@nodestination) if @nodestination
            $game_self_switches[[:balrogic, :teleport, :override]] = nil
          end
        end
      end
     
      def self.nosetup(name=$game_map.display_name, map=$game_map.map_id, x=$game_player.x, y=$game_player.y, dir=2, sx=$shipX, sy=$shipY, ax=$airX, ay=$airY)
        $game_self_switches[[:balrogic, :teleport]] ||= []
        $game_self_switches[[:balrogic, :teleport]] << [name, map, x, y, dir]
      end
     
      def self.somesetup(sort, name=$game_map.display_name, map=$game_map.map_id, x=$game_player.x, y=$game_player.y, dir=2, sx=$shipX, sy=$shipY, ax=$airX, ay=$airY)
        $game_self_switches[[:balrogic, :teleport_manual]] ||= []
        $game_self_switches[[:balrogic, :teleport_manual]][sort] = [name, map, x, y, dir, sx, sy, ax, ay]
      end
     
      def self.disable
        $game_self_switches[[:balrogic, :teleport, :disabled]] = true
      end
     
      def self.enable
        $game_self_switches[[:balrogic, :teleport, :disabled]] = nil
      end
     
      def self.configuration
        @transition.call if @transition
        @sound.call if @sound
        $game_self_switches[[:balrogic, :teleport, :override]] = nil
      end
     
      def self.update
        $game_self_switches[[:balrogic, :teleport]] = $game_self_switches["Balrogic Teleport"] if $game_self_switches["Balrogic Teleport"]
        $game_self_switches[[:balrogic, :teleport_manual]] = $game_self_switches["Balrogic Teleport Manual"] if $game_self_switches["Balrogic Teleport Manual"]
        $game_self_switches[[:balrogic, :teleport, :disabled]] = $game_self_switches["Balrogic Teleport Disabled"] if $game_self_switches["Balrogic Teleport Disabled"]
        $game_self_switches["Balrogic Teleport"] = nil
        $game_self_switches["Balrogic Teleport Manual"] = nil
        $game_self_switches["Balrogic Teleport Disabled"] = nil
      end
     
      end # Module 2
    end   # Module 1
     
    class Window_ChoiceList < Window_Command
     
      alias balrogic_old_update_placement update_placement
      def update_placement
        if $game_self_switches[[:balrogic, :teleport, :override]]
          self.width = [max_choice_width + 12, 96].max + padding * 2
          self.width = [width, Graphics.width].min
          self.height = fitting_height($game_message.choices.size) if $game_message.choices.size <= 8
          self.height = fitting_height(8) if $game_message.choices.size >= 9
          self.x = Graphics.width - width
          if @message_window.y >= Graphics.height / 2
            self.y = @message_window.y - height
          else
            self.y = @message_window.y + @message_window.height
          end
        else
          balrogic_old_update_placement
        end
      end
    end
     
    class Game_SelfSwitches
      def [](key)
        @data[key] || false
      end
    end

    Once that's done, go into the database and create this common event:

    Spoiler
    T3IQbHn.png

    Then create a second entry in common events that looks like this:

    Spoiler
    tKw6ccN.png

    Finally you should assign the hyperwarp base accordingly:

    Spoiler
    Ie7QtAY.png

    Again, the cancel crash is a holdover from the base script and therefore I could use some extra analysis to figure out what the hell is going on that does it. Furthermore, since the base product is unrestricted then so is my extended interpretation (commercial or otherwise).

    EDIT: In case it helps, the problematic call is at line 86 in the original script (or 96 in my extended version).

    EDIT 2: This is also not the high priority it originally was regarding the bugfix as I have recently transitioned all project development to MV. However, I'm keeping the analysis request out there for anyone who can still use it.