03-02-2008, 07:54 AM (This post was last modified: 09-02-2024, 08:09 PM by DerVVulfman.)
Veiw Range Script
Version: 1 & 2
by Jaime 'Near Fantastica' Webster Not DerVVulfman
and Version: 3 Eta
Edit by DerVVulfman
Features
Lets events see the player and interact with it in different ways depending on how close the player is
To add this script make a script call it View_Range and add the following into it then call it accordingly with a script call
Can handle BGS effects
By the poster
I didn't create the original scripts, and as of now the links that Near Fantastica put up are down (and he can't get to them) and his RMXP system is down. Given that he posted the original (though broken) demo links here, there should be no problem to post the script.
I tinkered with the system and made a version 3 (still tinkering :) ) that combines the best features of both... and a little more.
To call BGS add this script call for events: $view_range.event_sound(event_id, bgs_name)
This script call lets you check within the area of a circle around the event for the player and calculates the level of the volume to play the BGS at.
To use events to perform a check within an area of a circle and trigger an RMXP Switch: $view_range.enemies_view(event_id, view_range, switch_id)
This script call lets you check within the area of a circle for an event. It will return true if the player is in the events view range.
To call the enemies add this script call for enemies: $view_range.enemies_view(event_id, view_range, switch_id)
This script call lets you check within the area of a semi circle in front of the event for the player if true the player is in the enemy's view range.
Syntax
Event ID is the events id which the script call is placed from
View Range is how far the event can see
BGS Name is the name of BGS you want the event to play: example "010-River01"
switch_id is the default RMXP switch id that can be used in various Event commands.
For version 2
To call BGS add this script call for events: $view_range.event_sound(event_id, bgs_name)
This script call lets you check within the area of a circle around the event for the player and calculates the level of the volume to play the BGS at?�
To call the enemies add this script call for enemies: $view_range.enemies_view(event_id, view_range, switch_id)
This script call lets you check within the area of a semi circle in front of the event for the player if true the player is in the events view range.
Syntax
Event ID is the events id which the script call is placed from
View Range is how far the event can see
BGS Name is the name of BGS you want the event to play: example "010-River01"
switch_id is which local switch you want to set on... example "A", "B", "C", "D"
For version 3
Plenty more instruction in the script... Feeling lazy right now. [/list]
Take Care,
Near
Enjoy,
Mike aka DerVVulfman
* - * - * - * - * - *
Version 3 Eta
I included built in instructions that allow you to use local self-switches and global RMXP switches, as well as being able to control the volume when using the event_sound call. Also, the system's 'view' calls now includes an optional switch so impassable tiles can 'block' the view/detection system.
Ignore all that, and upgrade to View Range v3 Zeta.
Version Epsilon had code in it for both RPGMaker XP and RPGMaker VX dual compatability and fixed a directional error for VX. But Zeta got a working auto-detect for RPGMaker VX that worked.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
I am having issues opening the document in open office. IT tries to interpret it as an ascii file and shows gibberish when I open it. However, if I open it in editpad pro, it works fine.
I do wonder if its possible to make types of view. (cone, all around, straight line) and to check for events with a specific comment in them (hostile to certain types of events and afraid of others)
Meh... Now it's ETA. Yeah, I'm going through the Greek Alphabet.
Autodetect stank. It didn't help if you made a script in RMXP that used a class that VX had and was detecting, so I said the heck with it and made it an on/off switch.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Place an event on your map and make it... oh, I dunno... a rock. Make the 'trigger' for that rock to be a parallel process so it runs constantly. In the 'Event List' window on the right, you insert a script call command. A script call is where you can run an RGSS script (like view range) instead of your typical move-event/show-text commands. Now with that view range command, you set up a few values like the event's own id, a range and a switch that is turned on.
$view_range.event_view(12, 5, 3)
This example assumes that you are checking a circular range around event #12... for a distance of 5 tiles around it. And if the player is detected in this range, RMXP's switch #3 is turned on.
Oh... and there's a cool system to change audio volumes when you get closer or further from a source.
What you do when Switch #3 is turned on is up to you. You can make a guard ticked off.... a gate closes behind the player... the planet Krypton blows up... etc.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
So I was gonna try and keep this from taking up a post slot, but apparently I can't message, send email or anything else as a member lol so...
I slapped in the script (ETA) and filled out the script $view_range.enemies_view(ev_id, v_range, sw_id, s_sw_id, block) with: (1, 8, 60, nil, true). when event 1 detects switch 60 is on, it goes nuts and chases the character, which is fine, but, it's refusing to have LOS blocked by non-passable objects.
I tried true and false, just to make sure there wasn't a typo, and even fully encased the character in impassable wall blocks. still the event goes nuts chasing the character. any input?
also, when trying to use a self switch "a" I get an error "undefined local variable or method for 'a' for #<Interpreter:0xa1a3118>" same with "A". (quotes not used)
idea of what i'm doing wrong? everything looks right, script looks right to my half trained eye...
I spent about 5 hours working on a similar bug with my own "line of sight" code. Does it work when the walls are 3 tiles thick? if so, then you have the issue where the monsters are peeking through the diagonals of walls. I can give you an alternate algorithm if that turns out the be the problem.