SG Scripted Moveroutes
version un
Adds shortcuts you can use with callscript to quickly create a bunch of moveroutes & give them to events.
That sounds a lot more complex than it is, just check out the demo. Like my playtesting scripts no one uses, this can potentially save you many hours of development time.
I ripped this out of a project I did a year and a half ago for a big VX release of all my scripts so it's a bit dusty. It was the evolution of my really, really old "Appearing & Leaving" if anyone's been here long enough to remember that.
Demo:Rapidshare
How to use: Check out the demo or read the top of script. This is intended for call scripts.
There are a few settings you can change in the script as well near the top.
version un
Adds shortcuts you can use with callscript to quickly create a bunch of moveroutes & give them to events.
Code:
sg_open(#,delay) -> turns in all directions, like a chest/door.
defaults to "this event", wait 4
sg_close(#,delay) -> the same thing, but in reverse.
defaults to "this event", wait 4
sg_appear(#,'up') -> event appears and moves up
sg_appear(#,'right','down') -> event appears and moves right, turns down
sg_fade(#,delay,opac = 0,frames = 8) -> event changes it's opacity
use 255 as opacity to fade in
sg_jump(#,x,y) -> makes event jump x,y spaces
sg_leap(#,x,y) -> same as jump, but with a sound effect
sg_leapforward(#,x) -> event jumps forward x spaces
sg_leave(#) -> event walks towards player and fades away
sg_leave(#,'left') -> event walks left and fades away
sg_turn(#,'down') -> turns event. 'player' 'away' also works
sg_spin(#,delay) -> turns the event around in a circle
sg_group_split(#) -> Setups events (# + 2) for group members & moves away
sg_group_split(#,'down') -> Splits them as if the player was facing down
sg_group_rejoin(#) -> It and the next 2 events rejoin the group
The event # is remembered & rarely needed
sg_directfix(#) -> turns on direction fix
sg_directfix(#,1) -> turns off direction fix. 0 also turns it on
sg_through(#,1) -> see above. just (#) to turn on
Add a "wait for completion" to any above with a 2 at the end (ex: sg_open2)
sg_actor_event(#,slot) -> changes event pic to character id #
sg_evplayer(#) -> move event to player
sg_evevent(#,#2) -> move event to event #2
sg_group_event(#,slot) -> changes event pic to character in group spot #
Delay is always optional
Substitution event #s:
-1 = Player
0 or none = This event
That sounds a lot more complex than it is, just check out the demo. Like my playtesting scripts no one uses, this can potentially save you many hours of development time.
sg_open
The event that had that call script will turn around like it was a chest or door that just opened.
sg_open2
Same as above, but with a wait for move completion included
The event that had that call script will turn around like it was a chest or door that just opened.
sg_open2
Same as above, but with a wait for move completion included
I ripped this out of a project I did a year and a half ago for a big VX release of all my scripts so it's a bit dusty. It was the evolution of my really, really old "Appearing & Leaving" if anyone's been here long enough to remember that.
Demo:
How to use: Check out the demo or read the top of script. This is intended for call scripts.
There are a few settings you can change in the script as well near the top.
Code:
#==========================================================================
# ** SG Scripted Moveroutes
#==========================================================================
# sandgolem
# Version 1
# January 16th, 2008
#==========================================================================
=begin
sg_open(#,delay) -> turns in all directions, like a chest/door.
defaults to "this event", wait 4
sg_close(#,delay) -> the same thing, but in reverse.
defaults to "this event", wait 4
sg_appear(#,'up') -> event appears and moves up
sg_appear(#,'right','down') -> event appears and moves right, turns down
sg_fade(#,delay,opac = 0,frames = 8) -> event changes it's opacity
use 255 as opacity to fade in
sg_jump(#,x,y) -> makes event jump x,y spaces
sg_leap(#,x,y) -> same as jump, but with a sound effect
sg_leapforward(#,x) -> event jumps forward x spaces
sg_leave(#) -> event walks towards player and fades away
sg_leave(#,'left') -> event walks left and fades away
sg_turn(#,'down') -> turns event. 'player' 'away' also works
sg_spin(#,delay) -> turns the event around in a circle
sg_group_split(#) -> Setups events (# + 2) for group members & moves away
sg_group_split(#,'down') -> Splits them as if the player was facing down
sg_group_rejoin(#) -> It and the next 2 events rejoin the group
The event # is remembered & rarely needed
sg_directfix(#) -> turns on direction fix
sg_directfix(#,1) -> turns off direction fix. 0 also turns it on
sg_through(#,1) -> see above. just (#) to turn on
Add a "wait for completion" to any above with a 2 at the end (ex: sg_open2)
sg_actor_event(#,slot) -> changes event pic to character id #
sg_evplayer(#) -> move event to player
sg_evevent(#,#2) -> move event to event #2
sg_group_event(#,slot) -> changes event pic to character in group spot #
Delay is always optional
Substitution event #s:
-1 = Player
0 or none = This event
Use seperate callscripts if you're operating the same one with commands.
=end
module SG_Moveroutes
AppearDelay = 2
DefaultWait = 4
DefaultFadeFrames = 8
DefaultFadeWait = 2
LeapSE = 'Audio/SE/015-Jump01'
LeaveDelay = 2
ProblemCharacter = '160-Small02'
ProblemPop = true
end
#==========================================================================
# No, the SDK isn't required
#==========================================================================
if Object.const_defined?('SDK')
SDK.log('SG Scripted Moveroutes', 'sandgolem', 1, '16.01.08')
end
class Game_Character
attr_accessor :character_name, :character_hue, :direction,
:direction_fix, :through
end
class Interpreter
def sg_new_move(event)
@sg_event = get_character(event)
sg_moveerror(event) if @sg_event == nil
@sg_move = RPG::MoveRoute.new
@sg_move.repeat = false
@sg_move.list = []
end
def sg_moveerror(event)
if SG_Moveroutes::ProblemPop
p "Event attempting to move doesn't exist. Event# " + event.to_s
end
end
def sg_move_end
@sg_move.list += [RPG::MoveCommand.new]
begin
@sg_event.force_move_route(@sg_move)
rescue
end
end
def sg_evplayer(event)
sg = get_character(event)
if event == nil
sg_moveerror(event)
else
sg.moveto($game_player.x,$game_player.y)
end
end
def sg_evevent(event,event2)
event = get_character(event)
if event == nil
sg_moveerror(event)
else
event.moveto($game_map.events[event2].x,$game_map.events[event2].y)
end
end
def sg_open(event = 0, wait = SG_Moveroutes::DefaultWait)
sg_new_move(event)
@sg_move.list += [RPG::MoveCommand.new(36)]
@sg_move.list += [RPG::MoveCommand.new(17)]
@sg_move.list += [RPG::MoveCommand.new(15,[wait])]
@sg_move.list += [RPG::MoveCommand.new(18)]
@sg_move.list += [RPG::MoveCommand.new(15,[wait])]
@sg_move.list += [RPG::MoveCommand.new(19)]
@sg_move.list += [RPG::MoveCommand.new(35)]
sg_move_end
end
def sg_open2(event = 0, wait = SG_Moveroutes::DefaultWait)
sg_open(event,wait)
@move_route_waiting = true
end
def sg_close(event = 0, wait = SG_Moveroutes::DefaultWait)
sg_new_move(event)
@sg_move.list += [RPG::MoveCommand.new(36)]
@sg_move.list += [RPG::MoveCommand.new(18)]
@sg_move.list += [RPG::MoveCommand.new(15,[wait])]
@sg_move.list += [RPG::MoveCommand.new(17)]
@sg_move.list += [RPG::MoveCommand.new(15,[wait])]
@sg_move.list += [RPG::MoveCommand.new(16)]
@sg_move.list += [RPG::MoveCommand.new(35)]
sg_move_end
end
def sg_close2(event = 0, wait = SG_Moveroutes::DefaultWait)
sg_close(event,wait)
@move_route_waiting = true
end
def sg_appear(event, go, turn = nil)
sg_new_move(event)
if !@sg_event.through
@sg_move.list += [RPG::MoveCommand.new(37)]
@sg_through = true
end
@sg_move.list += [RPG::MoveCommand.new(42,[50])]
@sg_move.list += [RPG::MoveCommand.new(15,[SG_Moveroutes::AppearDelay])]
@sg_move.list += [RPG::MoveCommand.new(42,[100])]
@sg_move.list += [RPG::MoveCommand.new(15,[SG_Moveroutes::AppearDelay])]
@sg_move.list += [RPG::MoveCommand.new(42,[175])]
@sg_move.list += [RPG::MoveCommand.new(1)] if go == 'down'
@sg_move.list += [RPG::MoveCommand.new(4)] if go == 'up'
@sg_move.list += [RPG::MoveCommand.new(3)] if go == 'right'
@sg_move.list += [RPG::MoveCommand.new(2)] if go == 'left'
@sg_move.list += [RPG::MoveCommand.new(15,[SG_Moveroutes::AppearDelay])]
@sg_move.list += [RPG::MoveCommand.new(42,[255])]
@sg_move.list += [RPG::MoveCommand.new(25)] if turn == 'player'
@sg_move.list += [RPG::MoveCommand.new(16)] if turn == 'down'
@sg_move.list += [RPG::MoveCommand.new(19)] if turn == 'up'
@sg_move.list += [RPG::MoveCommand.new(17)] if turn == 'left'
@sg_move.list += [RPG::MoveCommand.new(18)] if turn == 'right'
@sg_move.list += [RPG::MoveCommand.new(38)] if @sg_through
@sg_through = nil
sg_move_end
end
def sg_appear2(event, go, turn = nil)
sg_appear(event,go,turn)
@move_route_waiting = true
end
def sg_leave(event = 0, go = nil)
sg_new_move(event)
@sg_move.list += [RPG::MoveCommand.new(25)] if go == nil
@sg_move.list += [RPG::MoveCommand.new(16)] if go == 'down'
@sg_move.list += [RPG::MoveCommand.new(19)] if go == 'up'
@sg_move.list += [RPG::MoveCommand.new(17)] if go == 'right'
@sg_move.list += [RPG::MoveCommand.new(18)] if go == 'left'
@sg_move.list += [RPG::MoveCommand.new(37)]
@sg_move.list += [RPG::MoveCommand.new(42,[175])]
@sg_move.list += [RPG::MoveCommand.new(15,[SG_Moveroutes::LeaveDelay])]
@sg_move.list += [RPG::MoveCommand.new(12)]
@sg_move.list += [RPG::MoveCommand.new(42,[100])]
@sg_move.list += [RPG::MoveCommand.new(15,[SG_Moveroutes::LeaveDelay])]
@sg_move.list += [RPG::MoveCommand.new(42,[50])]
@sg_move.list += [RPG::MoveCommand.new(15,[SG_Moveroutes::LeaveDelay])]
@sg_move.list += [RPG::MoveCommand.new(42,[0])]
@sg_move.list += [RPG::MoveCommand.new]
sg_move_end
end
def sg_leave2(event = 0, go = nil)
sg_leave(event,go)
@move_route_waiting = true
end
def sg_fade(event = 0, wait = SG_Moveroutes::DefaultFadeWait, max = 0,
frames = SG_Moveroutes::DefaultFadeFrames)
sg_new_move(event)
sg = max - @sg_event.opacity
return if sg == 0
opacity = []
o = @sg_event.opacity
if sg < 0
sg += -sg + -sg
for i in 0...frames
o -= sg / frames
opacity += [o]
end
else
for i in 0...frames
o += sg / frames
opacity += [o]
end
end
opacity += [max]
for i in 0...opacity.size
@sg_move.list += [RPG::MoveCommand.new(42,[opacity[i]])]
@sg_move.list += [RPG::MoveCommand.new(15,[wait])]
end
@sg_move.list += [RPG::MoveCommand.new(42,[max])]
@sg_move.list += [RPG::MoveCommand.new]
sg_move_end
end
def sg_fade2(event = 0, wait = SG_Moveroutes::DefaultWait, max = 0)
sg_fade(event,wait,max)
@move_route_waiting = true
end
def sg_actor_event(event,slot)
begin
event = get_character(event)
event.character_hue = $game_actors[slot].character_hue
event.character_name = $game_actors[slot].character_name
rescue
if event == nil
sg_moveerror(event)
return
elsif event.is_a?(Game_Event)
event.character_name = SG_Moveroutes::ProblemCharacter
event.character_hue = 0
end
if SG_Moveroutes::ProblemPop
p 'Problem with actor_event command! Slot #' + slot.to_s
end
end
end
def sg_group_event(event,slot)
begin
event = get_character(event)
event.character_hue = $game_party.actors[slot].character_hue
event.character_name = $game_party.actors[slot].character_name
rescue
if event == nil
sg_moveerror(event)
return
elsif event.is_a?(Game_Event)
event.character_name = SG_Moveroutes::ProblemCharacter
event.character_hue = 0
end
if SG_Moveroutes::ProblemPop
p 'Problem with group_event command! Slot #' + slot.to_s
end
end
end
def sg_group_show(event)
if $game_party.actors.size > 1
sg_evplayer(event)
sg_group_event(event,1)
end
if $game_party.actors.size > 2
sg_evplayer(event+1)
sg_group_event(event+1,2)
end
if $game_party.actors.size > 3
sg_evplayer(event+2)
sg_group_event(event+2,3)
end
end
def sg_group_split(event,direction = nil)
@sg_group_rejoin = event
sg_group_show(event)
if direction == nil
direction = 'down' if $game_player.direction == 2
direction = 'left' if $game_player.direction == 4
direction = 'right' if $game_player.direction == 6
direction = 'up' if $game_player.direction == 8
end
case direction
when 'up'
sg_appear(event,'left','up') if $game_party.actors.size > 1
sg_appear(event+1,'right','up') if $game_party.actors.size > 2
sg_appear(event+2,'down','up') if $game_party.actors.size > 3
when 'left'
sg_appear(event,'down','left') if $game_party.actors.size > 1
sg_appear(event+1,'up','left') if $game_party.actors.size > 2
sg_appear(event+2,'right','left') if $game_party.actors.size > 3
when 'right'
sg_appear(event,'up','right') if $game_party.actors.size > 1
sg_appear(event+1,'down','right') if $game_party.actors.size > 2
sg_appear(event+2,'left','right') if $game_party.actors.size > 3
when 'down'
sg_appear(event,'right','down') if $game_party.actors.size > 1
sg_appear(event+1,'left','down') if $game_party.actors.size > 2
sg_appear(event+2,'up','down') if $game_party.actors.size > 3
end
end
def sg_group_split2(event,direction = nil)
sg_group_split(event,direction)
@move_route_waiting = true
end
def sg_group_rejoin(event = @sg_group_rejoin)
sg_leave(event) if $game_party.actors.size > 1
sg_leave(event+1) if $game_party.actors.size > 2
sg_leave(event+2) if $game_party.actors.size > 3
end
def sg_group_rejoin2(event = @sg_group_rejoin)
sg_group_rejoin(event)
@move_route_waiting = true
end
def sg_jump(event,x = 0,y = 0)
event = get_character(event)
event.jump(x,y)
end
def sg_jump2(event,x = 0,y = 0)
sg_jump(event,x,y)
@move_route_waiting = true
end
def sg_leap(event,x = 0,y = 0)
Audio.se_play(SG_Moveroutes::LeapSE,80,100) if SG_Moveroutes::LeapSE != ''
sg_jump(event,x,y)
end
def sg_leap2(event,x = 0,y = 0)
sg_leap(event,x,y)
@move_route_waiting = true
end
def sg_leapforward(event,spaces = 0)
x = 0; y = 0
event2 = get_character(event)
x -= spaces if event2.direction == 4
x = spaces if event2.direction == 6
y -= spaces if event2.direction == 8
y = spaces if event2.direction == 2
sg_leap(event,x,y)
end
def sg_leapforward2(event,spaces = 0)
sg_leapforward(event,spaces)
@move_route_waiting = true
end
def sg_turn(event,dir)
event = get_character(event)
sg2 = event.direction_fix
if sg2
event.direction_fix = false
end
event.direction = dir if dir.is_a?(Integer)
event.turn_up if dir == 'up'
event.turn_down if dir == 'down'
event.turn_left if dir == 'left'
event.turn_right if dir == 'right'
event.turn_toward_player if dir == 'player'
event.turn_away_from_player if dir == 'away'
if sg2
event.direction_fix = true
end
end
def sg_turn2(x,y)
sg_turn(x,y)
@move_route_waiting = true
end
def sg_directfix(event,x = 0)
event = get_character(event)
event.direction_fix = (x == 0)
return true
end
def sg_directfix2(event,x = 0)
sg_directfix(event,x)
@move_route_waiting = true
end
def sg_through(event,x = 0)
event = get_character(event)
event.through = (x == 0)
return true
end
def sg_through2(event,x = 0)
sg_through(event,x)
@move_route_waiting = true
end
def sg_spin(event = 0, wait = SG_Moveroutes::DefaultWait)
sg_new_move(event)
for i in 0...3
@sg_move.list += [RPG::MoveCommand.new(20)]
@sg_move.list += [RPG::MoveCommand.new(15,[wait])]
end
@sg_move.list += [RPG::MoveCommand.new(20)]
sg_move_end
end
def sg_spin2(event = 0, wait = SG_Moveroutes::DefaultWait)
sg_spin(event,wait)
@move_route_waiting = true
end
end