Advertisement
roninator2

Teleport with button press - Check Line of Path

Dec 10th, 2024
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 8.93 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Teleport with button press             ║  Version: 1.03R    ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║   Perform map movement                        ║    06 Oct 2023     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Allow instant travel with a button                           ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║                                                                    ║
  20. # ║  Do whatever you need to in order to call the command              ║
  21. # ║  an event in parallel process on the map                           ║
  22. # ║  a script that maps a button press, etc.                           ║
  23. # ║                                                                    ║
  24. # ║  Use script command to cause teleport                              ║
  25. # ║  teleport(X)   or   teleport($game_variables[X])                   ║
  26. # ║    will make the player move instantly the number given            ║
  27. # ║    but only if safe to move on the space                           ║
  28. # ║                                                                    ║
  29. # ║  Use comment on event to prevent jumping over event                ║
  30. # ║  Set the text below to what you will use in the event              ║
  31. # ║                                                                    ║
  32. # ║  Range option                                                      ║
  33. # ║  This script will check the player position and all                ║
  34. # ║  tiles in range to determine a safe jump.                          ║
  35. # ╚════════════════════════════════════════════════════════════════════╝
  36. # ╔════════════════════════════════════════════════════════════════════╗
  37. # ║ Updates:                                                           ║
  38. # ║ 1.00 - 06 Oct 2023 - Script finished                               ║
  39. # ║                                                                    ║
  40. # ╚════════════════════════════════════════════════════════════════════╝
  41. # ╔════════════════════════════════════════════════════════════════════╗
  42. # ║ Credits and Thanks:                                                ║
  43. # ║   Roninator2                                                       ║
  44. # ║                                                                    ║
  45. # ╚════════════════════════════════════════════════════════════════════╝
  46. # ╔════════════════════════════════════════════════════════════════════╗
  47. # ║ Terms of use:                                                      ║
  48. # ║  Follow the original Authors terms of use where applicable         ║
  49. # ║    - When not made by me (Roninator2)                              ║
  50. # ║  Free for all uses in RPG Maker except nudity                      ║
  51. # ║  Anyone using this script in their project before these terms      ║
  52. # ║  were changed are allowed to use this script even if it conflicts  ║
  53. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  54. # ║  No part of this code can be used with AI programs or tools        ║
  55. # ║  Credit must be given                                              ║
  56. # ╚════════════════════════════════════════════════════════════════════╝
  57.  
  58. module R2_Teleport_Actor_Fixed
  59.   Switch = 1
  60.   Terrain_Tag = 1
  61.   Text = "Block Jump"
  62. end
  63.  
  64. # ╔════════════════════════════════════════════════════════════════════╗
  65. # ║                      End of editable region                        ║
  66. # ╚════════════════════════════════════════════════════════════════════╝
  67.  
  68. class Game_Interpreter
  69.   #--------------------------------------------------------------------------
  70.   # * Check Teleport and move
  71.   #--------------------------------------------------------------------------
  72.   def teleport(value = 0)
  73.     return if $game_switches[R2_Teleport_Actor_Fixed::Switch] == false
  74.     xj = 0
  75.     yj = 0
  76.     dir = $game_player.direction
  77.     case dir
  78.     when 2; yj = value
  79.     when 4; xj = -value
  80.     when 6; xj = value
  81.     when 8; yj = -value
  82.     end
  83.     x = $game_player.x + xj
  84.     y = $game_player.y + yj
  85.     clean = $game_map.passable?(x, y, dir)
  86.     safe = !$game_player.collide_with_events?(x, y)
  87.     ceiling = $game_map.terrain_tag(x, y) != R2_Teleport_Actor_Fixed::Terrain_Tag
  88.     block = !check_jump_block(xj, yj)
  89.     if clean && safe && ceiling && block
  90.       $game_player.transparent = true
  91.       $game_player.reserve_transfer($game_map.map_id, x, y, dir)
  92.       $game_player.perform_transfer
  93.       $game_player.transparent = false
  94.     end
  95.   end
  96.   def check_jump_block(xj, yj)
  97.     evb = false
  98.     start = 0
  99.     if (xj < 0) || (yj < 0)
  100.       sxj = xj * -1; syj = yj * -1
  101.       move = sxj if sxj != 0
  102.       move = syj if syj != 0
  103.       move += 1
  104.       move.times do
  105.         x = xj < 0 ? $game_player.x + start : $game_player.x
  106.         y = yj < 0 ? $game_player.y + start : $game_player.y
  107.         evb = true if check_event_block(x, y)
  108.         start -= 1
  109.       end
  110.     else
  111.       move = xj if xj != 0
  112.       move = yj if yj != 0
  113.       move += 1
  114.       move.times do
  115.         x = xj > 0 ? $game_player.x + start : $game_player.x
  116.         y = yj > 0 ? $game_player.y + start : $game_player.y
  117.         evb = true if check_event_block(x, y)
  118.         start += 1
  119.       end
  120.     end
  121.     return evb
  122.   end
  123.   def check_event_block(x, y)
  124.     clear = false
  125.     event = $game_map.events_xy(x, y)
  126.     return if event == []
  127.     event[0].list.each do |comm|
  128.       if comm.code == 108 && comm.parameters == [R2_Teleport_Actor_Fixed::Text]
  129.         return true
  130.       end
  131.     end
  132.     return false
  133.   end
  134. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement