Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Velvet Isis' Vision Script
- #-------------------------------------------------------------------------------
- # This is not entirely my own work. Parts are based on the following scripts:
- # Tracer stealth system - Prof. Meow Meow Converted to VXA by LiTTleDRAgo
- # Jet10985's stealth script (which was inspired by Touchfuzzy)
- # The Infamous Bon Bon's Direction Based Line of Sight Events
- # This script takes bits from each of these and merges them into a simple but
- # functional Line of Sight Script
- #-------------------------------------------------------------------------------
- #-------------------------------------------------------------------------------
- # Directions: To make an event able to 'see' use the event command 'Script...'
- # under tab 3 of the Event Commands and type in
- #
- # sentinel
- #
- # That's it, no ' no " just the word sentinel, all lower case. They must also
- # be set to parallel process.
- #
- # Then for what they do once they see the Player, have a new page with the
- # Condition: self-switch A is on. The default is A, but you can change it
- # below. If you want the event to return to normal if the Player exits it's
- # field of vision, make sure to put the sentinel script on this page as well.
- #
- #-------------------------------------------------------------------------------
- #-------------------------------------------------------------------------------
- # Things you can edit
- #-------------------------------------------------------------------------------
- module VIS
- CAMO_THRESHOLD = 50
- #A character needs this much Camo to NOT be seen.
- #You can either do this with terrain tags, a variable, or sneaking.
- CAMO_VARIABLE = 7
- #This is which game variable controls Camo. If, for instance, you wanted
- #an event to add or take away Camo you would adjust the variable listed
- #here.
- SNEAK_CAMO = 50
- #This is how much Camo sneaking provides. Sneaking is done by holding
- #down the 'A' button, which is actually the 'SHIFT' button.
- FOV_WIDTH = 2
- #This is how many squares to the left AND right an event can 'see'.
- #This does not take into account the path in front of the event
- #itself, so for instance, using 2 gives a total of 5 squares
- #left to right. (2 1 0 1 2)
- FOV_LENGTH = 5
- #This is how many squares in front of itself an event can 'see'.
- #Nothing weird here, just the straight number.
- FOUND_SELFSWITCH = "A"
- #This is which self switch becomes true when the Player is spotted.
- #Be sure to keep the " " around the letter.
- TERRAIN_CAMOS = { 1 => 60}
- #These are how much Camo a Terrain Tag gives when standing on it.
- #These go across all maps. Use the format: terrain_id => camo
- #So right now terrain tag 1 has a Camo value of 60.
- TERRAIN_CAMOS.default = 0
- #This is the default camo of any undefined terrain above.
- end
- #-------------------------------------------------------------------------------
- # You probably shouldn't edit things below here, but I'm not gonna judge.
- # I mean, that's how I learned to do things, was by putzin' around with
- # other people's scripts. I mean if you change stuff the script might not
- # work, but you live and you learn, and that's how you get better
- #-------------------------------------------------------------------------------
- #-------------------------------------------------------------------------------
- # Terrain Tag Camoflage
- #-------------------------------------------------------------------------------
- class Game_Map
- def xy_camo(x, y)
- ter = terrain_tag(x, y)
- ter_c = terrain_camos(ter)
- ter_c
- end
- def terrain_camos(ter)
- (@map_terrain_camos ||= {})[@map_id] ||= VIS::TERRAIN_CAMOS
- @map_terrain_camos[@map_id][ter]
- end
- end
- #-------------------------------------------------------------------------------
- # Player Camoflage
- #-------------------------------------------------------------------------------
- class Game_Player
- alias altered_speed real_move_speed
- def real_move_speed
- altered_speed
- @move_speed - (dash? ? 1 : 0)
- end
- def camouflage
- snk = 0
- if Input.press?(:A)
- snk = VIS::SNEAK_CAMO
- end
- camo = 0
- camo += snk
- camo += $game_map.xy_camo(self.x, self.y)
- camo += $game_variables[VIS::CAMO_VARIABLE]
- end
- end
- #-------------------------------------------------------------------------------
- # Actual Vision Scripting
- #-------------------------------------------------------------------------------
- class Game_Character
- #-------------------------#
- # Local Variables #
- #-------------------------#
- attr_accessor :thresh
- #-------------------------#
- # Initialize #
- #-------------------------#
- alias vision_initialize initialize unless $@
- def initialize
- vision_initialize
- @thresh = VIS::CAMO_THRESHOLD
- end
- #-------------------------------#
- # Define Field of Vision #
- #-------------------------------#
- def fov? # This is the static Field of Vision
- w = VIS::FOV_WIDTH
- l = VIS::FOV_LENGTH
- ex = self.x
- ey = self.y
- px = $game_player.x
- py = $game_player.y
- if @direction == 2 && ey < py ||
- @direction == 8 && ey > py
- if (ey - py).abs <= l && (ex - px).abs <= w
- return true
- end
- end
- if @direction == 4 && ex > px ||
- @direction == 6 && ex < px
- if (ey - py).abs <= w && (ex - px).abs <= l
- return true
- end
- end
- end
- #-------------------------------#
- # Camo Threshold #
- #-------------------------------#
- def camo_threshold(x)
- for event in $game_map.events.values
- @thresh = x
- end
- end
- #------------------------------------------------------------------------------
- #-------------------------------#
- # Determine if Player is seen #
- #-------------------------------#
- def viewable?
- viewable = true
- ex = self.x
- ey = self.y
- px = $game_player.x
- py = $game_player.y
- dx = (ex - px).abs
- dy = (ey - py).abs
- m = ((ey - py).to_f / (ex - px).to_f)
- #----------------------------------#
- # Player in the Field of Vision? #
- #----------------------------------#
- if fov?
- #-----------------------------#
- # Check Camouflage #
- #-----------------------------#
- camo = $game_player.camouflage
- if camo < @thresh
- #-----------------------------#
- # Check for any Obstructions #
- #-----------------------------#
- if (dx > dy)
- dx.times { |x|
- case
- when (ex > px)
- viewable = false if !$game_map.passable?(
- (ex - x),
- ((-m * (x)) + ey - 0.1).round,
- @direction) ||
- $game_map.events_xy_nt(
- (ex - x - 1),
- ((-m * (x + 1)) + ey - 0.1).round).any?
- when (ex < px)
- viewable = false if !$game_map.passable?(
- (ex + x),
- ((m * (x)) + ey - 0.1).round,
- @direction) ||
- $game_map.events_xy_nt(
- (ex + x + 1),
- ((m * (x + 1)) + ey - 0.1).round).any?
- end}
- elsif (dx < dy)
- (dy).times { |y|
- case
- when (ey > py)
- viewable = false if !$game_map.passable?(
- (((y) / -m) + ex - 0.1).round,
- (ey - y),
- @direction) ||
- $game_map.events_xy_nt(
- (((y + 1) / -m) + ex - 0.1).round,
- (ey - y - 1)).any?
- when (ey < py)
- viewable = false if !$game_map.passable?(
- (((y) / m) + ex - 0.1).round,
- (ey + y),
- @direction) ||
- $game_map.events_xy_nt(
- (((y + 1) / m) + ex - 0.1).round,
- (ey + y + 1)).any?
- end}
- elsif (dx = dy)
- dx.times { |x|
- case
- when (ex > px)
- viewable = false if !$game_map.passable?(
- (ex - x),
- ((-m * (x)) + ey - 0.1).round,
- @direction) ||
- $game_map.events_xy_nt(
- (ex - x - 1),
- ((-m * (x + 1)) + ey - 0.1).round).any?
- when (ex < px)
- viewable = false if !$game_map.passable?(
- (ex + x),
- ((m * (x)) + ey - 0.1).round,
- @direction) ||
- $game_map.events_xy_nt(
- (ex + x + 1),
- ((m * (x + 1)) + ey - 0.1).round).any?
- end}
- end
- #---------------------------------------#
- # Check for any Obstructions if dy == 0 #
- #---------------------------------------#
- if dy == 0
- dx.times { |x|
- case
- when (ex < px)
- viewable = false if !$game_map.passable?((ex + x), ey, @direction) ||
- $game_map.events_xy_nt((ex + x + 1), ey).any?
- when (ex > px)
- viewable = false if !$game_map.passable?((ex - x), ey, @direction) ||
- $game_map.events_xy_nt((ex - x - 1), ey).any?
- end}
- end
- #---------------------------------------#
- # Check for any Obstructions if dx == 0 #
- #---------------------------------------#
- if dx == 0
- dy.times { |y|
- case
- when (ey < py)
- viewable = false if !$game_map.passable?(ex, (ey + y), @direction) ||
- $game_map.events_xy_nt(ex, (ey + y + 1)).any?
- when (ey > py)
- viewable = false if !$game_map.passable?(ex, (ey - y), @direction) ||
- $game_map.events_xy_nt(ex, (ey - y - 1)).any?
- end}
- end
- #--------------------------#
- # * Returns false if !fov? #
- #--------------------------#
- else
- viewable = false
- end
- else
- viewable = false
- end
- return viewable
- end
- def sentinel
- if self.viewable?
- set_self_switch(VIS::FOUND_SELFSWITCH, true)
- else
- set_self_switch(VIS::FOUND_SELFSWITCH, false)
- end
- end
- #-----------------------------#
- # Get Self Switch #
- #-----------------------------#
- def get_self_switch(switch)
- key = [@map_id, @id, switch]
- return $game_self_switches[key]
- end
- #-----------------------------#
- # Set Self Switch #
- #-----------------------------#
- def set_self_switch(switch,true_false)
- key = [@map_id, @id, switch]
- $game_self_switches[key] = true_false
- $game_map.need_refresh = true
- end
- end
- class Game_Interpreter
- def camouflage
- get_character(-1).camouflage
- end
- def fov?
- get_character(0).fov?
- end
- def camo_threshold(x)
- get_character(0).camo_threshold(x)
- end
- def viewable?
- get_character(0).viewable?
- end
- def sentinel
- get_character(0).sentinel
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement