Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Scripted Moveroutes

SG Scripted Moveroutes
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

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.

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
 
Good work as always Sandgolem.

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.

On the contrary, if thousands of people used them, you might not even know; since they're a kinda 'remove it from the game before release' type of script. I would use yours, in fact, but I've grown used to RPGAdvocates ancient debugging set.

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. :)

Ha, yeah I remember your old 'Appearing & Leaving' script. At the time I thought 'helpful, but not quite helpful enough'. See, my problem was then (and still is) that I've already got hundreds of moveroutes, so the creation time is already wasted. Of course, there's also your greatest windows friends: copy & paste (forgotten, sadly, by so many...)

That said, this version holds pantsloads more features. The chests and the leaping features might be enough to make me use this now. Its also good to see you're actually crediting yourself this time, rather than Gamebaker. I always thought that to be a silly habit for the sake of publicity- you made it, so revel in it.

EDIT: And Woah, your file just gave me the fright of my day! I thought my Rapidshare premium account had gone bye bye. But then I noticed it was on rapidshare.de, not rapidshare.com. Yegads, it must have been up there a long time to be on the old site!! Oh well, I'll just have to use the free download I guess...
 
good idea, i like all of your scripts, thought. ^-^

but i don't like Rapidshare... plz upload to another site  ^-^

just like Megaupload or something else. ;)
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top