|
It is currently Mon May 21, 2012 1:21 am
|
View unanswered posts | View active topics
| Welcome |
|
Welcome to icugigasoft
You are currently viewing our boards as a guest, which gives you limited access to view most discussions and access our other features. By joining our free community, you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content, and access many other special features. In addition, registered members also see less advertisements. Registration is fast, simple, and absolutely free, so please, join our community today! |
 |
|
 |
|
|
MarioSuperStar
|
Post subject: Re: Caterpillar System XP 1.1 and VX 1.0 Posted: Wed Feb 01, 2012 8:29 pm |
| Senior Member |
 |
 |
Joined: Mon Jun 28, 2010 5:55 pm Posts: 1270 Location: Look somewhere else...
|
Updated VX Caterpillar System: #============================================================================== # ** Partner System VX Version 1.2 # By MarioSuperStar # Give credit if used #==============================================================================
#============================================================================== # ** Settings # $ACTION_VAR = variable to select partner to process # =============================================================================
$ACTION_VAR = 2 #Variable indicating who performs the Set Move Route event command # When the target is Player. If $ACTION_VAR is equal to -1, the # character performing the move route will be the player. # If $ACTION_VAR is greater than -1, it uses the partner with # the position number of $ACTION_VAR. Example: 0 is the first #partner member, being the second person in the party. $PARTNER_SWITCH = 1 # Switch that is activated when partners are displayed on the map. $OVERWORLD_MAX = 1 # Max number of party memebers displayed in the map. 0 = all the party members.
class Game_Character attr_accessor :move_route end
#============================================================================== # ** Game_Event #------------------------------------------------------------------------------ # This class deals with events. It handles functions including event page # switching via condition determinants, and running parallel process events. # It's used within the Game_Map class. #==============================================================================
class Game_Partner < Game_Character #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :actor_id attr_accessor :interpreter attr_accessor :copy_move attr_accessor :transparent attr_accessor :index attr_accessor :align attr_accessor :fx attr_accessor :fy #-------------------------------------------------------------------------- # * Object Initialization # map_id : map ID # event : event (RPG::Event) #-------------------------------------------------------------------------- def initialize(map_id, actor_id) super() @transparent = false @map_id = $game_map.map_id @actor_id = actor_id actor = $game_actors[actor_id] @index = actor.index - 1 @id = 0 - actor.index @anime_count = 0 @playing_move_route = false @through = false @walk_anime = true @interpreter = nil @align = false @fx = 0 @fy = 0 refresh end def perform_action action = @copy_move[0] case action when "move_down" move_down when "move_left" move_left when "move_right" move_right when "move_up" move_up end player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index - 1].character @copy_move.push(player.copy_move[0]) end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_x player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 2 return player.x when 4 return player.x + 1 when 6 return player.x - 1 when 8 return player.x end end def formulate_y player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 4 return player.y when 8 return player.y + 1 when 2 return player.y - 1 when 6 return player.y end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_xxx player = $game_player actor = $game_actors[@actor_id] index = actor.index player = $game_player case player.direction when 2 return player.x when 4 return player.x + (1 * index) when 6 return player.x - (1 * index) when 8 return player.x end end def formulate_yyy player = $game_player actor = $game_actors[@actor_id] index = actor.index case player.direction when 4 return player.y when 8 return player.y + (1 * index) when 2 return player.y - (1 * index) when 6 return player.y end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_xx player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 2 return player.x when 4 return player.x when 6 return player.x when 8 return player.x end end def formulate_yy player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 4 return player.y when 8 return player.y when 2 return player.y when 6 return player.y end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh actor = $game_actors[@actor_id] index = actor.index if $game_party.members.size == 0 and $game_party.members[index] == nil @character_name = "" @character_index = 0 else if $game_party.members[index] != nil @character_name = actor.character_name @character_index = actor.character_index end end end #-------------------------------------------------------------------------- # * Determine if Passable # x : x-coordinate # y : y-coordinate #-------------------------------------------------------------------------- def passable?(x, y, passable = false) x = $game_map.round_x(x) # Horizontal loop adj. y = $game_map.round_y(y) # Vertical loop adj. return false unless $game_map.valid?(x, y) # Outside map? return true if @through or debug_through? # Through ON? return false unless map_passable?(x, y) # Map Impassable? return false if collide_with_characters?(x, y, passable) # Collide with character? return true # Passable end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh_ actor = $game_actors[@actor_id] index = actor.index if $game_party.members.size == 0 and $game_party.members[index] == nil @character_name = "" @character_index = 0 else if $game_party.members[index] != nil @character_name = actor.character_name @character_index = actor.character_index end end if passable?(formulate_x, formulate_y, true) moveto(formulate_x, formulate_y) # Move to initial position elsif passable?(formulate_xx-1, formulate_yy, true) moveto(formulate_xx - 1, formulate_yy) elsif passable?(formulate_xx+1, formulate_yy, true) moveto(formulate_xx+1, formulate_yy) elsif passable?(formulate_xx, formulate_yy-1, true) moveto(formulate_xx, formulate_yy-1) elsif passable?(formulate_xx, formulate_yy+1, true) moveto(formulate_xx, formulate_yy+1) end p "" turn_toward_point(formulate_xx, formulate_yy) mov = "move_down" if @direction == 2 mov = "move_left" if @direction == 4 mov = "move_right" if @direction == 6 mov = "move_up" if @direction == 8 player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index - 1].character end @direction = player.direction @copy_move = [mov] end def check_event_trigger_touch(x = 0, y = 0) end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super return if $partners == nil @playing_move_route = false if $game_player.move_route == nil return if @playing_move_route return @playing_move_route = true && move_route_forcing($game_player.move_route) if $game_player.move_route != nil through = false return if moving? if @interpreter != nil # Now parallel processing? @interpreter.update # Update interpreter return end if @align @move_speed = 5 move_toward_point(@fx, @fy) end return if $game_map.interpreter.running? end #-------------------------------------------------------------------------- # * Turn toward Player #-------------------------------------------------------------------------- def turn_toward_point(x, y) sx = distance_x_from_point(x) sy = distance_y_from_point(y) if sx.abs > sy.abs # Horizontal distance is longer sx > 0 ? turn_left : turn_right elsif sx.abs < sy.abs # Vertical distance is longer sy > 0 ? turn_up : turn_down end end #-------------------------------------------------------------------------- # * Move toward Player #-------------------------------------------------------------------------- def move_toward_point(x, y) sx = distance_x_from_point(x) sy = distance_y_from_point(y) if sx != 0 or sy != 0 if sx.abs > sy.abs # Horizontal distance is longer sx > 0 ? move_left : move_right # Prioritize left-right if @move_failed and sy != 0 sy > 0 ? move_up : move_down end else # Vertical distance is longer sy > 0 ? move_up : move_down # Prioritize up-down if @move_failed and sx != 0 sx > 0 ? move_left : move_right end end end end #-------------------------------------------------------------------------- # * Update While Stopped #-------------------------------------------------------------------------- def update_stop return if $partners == nil if @x == @fx and @y == @fy and @align @align = false @move_speed = $game_player.move_speed turn_toward_point(formulate_xx, formulate_yy) mov = "move_down" if @direction == 2 mov = "move_left" if @direction == 4 mov = "move_right" if @direction == 6 mov = "move_up" if @direction == 8 @copy_move = [mov] end if $game_switches[$PARTNER_SWITCH] and @align == false turn_toward_point(formulate_xx, formulate_yy) end if @step_anime @anime_count += 1 elsif @pattern != @original_pattern @anime_count += 1.5 end @stop_count += 1 unless @locked end #-------------------------------------------------------------------------- # * Calculate X Distance From Player #-------------------------------------------------------------------------- def distance_x_from_point(x) sx = @x - x if $game_map.loop_horizontal? # When looping horizontally if sx.abs > $game_map.width / 2 # Larger than half the map width? sx -= $game_map.width # Subtract map width end end return sx end #-------------------------------------------------------------------------- # * Calculate Y Distance From Player #-------------------------------------------------------------------------- def distance_y_from_point(y) sy = @y - y if $game_map.loop_vertical? # When looping vertically if sy.abs > $game_map.height / 2 # Larger than half the map height? sy -= $game_map.height # Subtract map height end end return sy end #-------------------------------------------------------------------------- # * Determine Character Collision # x : x-coordinate # y : y-coordinate # Detects normal character collision, including the player and vehicles. #-------------------------------------------------------------------------- def collide_with_characters?(x, y, passable = false) for event in $game_map.events_xy(x, y) # Matches event position unless event.through # Passage OFF? return true if self.is_a?(Game_Event) # Self is event return true if event.priority_type == 1 # Target is normal char end end if passable == true if @priority_type == 1 # Self is normal char return true if $game_player.pos_nt?(x, y) # Matches player position return true if $game_map.boat.pos_nt?(x, y) # Matches boat position return true if $game_map.ship.pos_nt?(x, y) # Matches ship position end for i in 0...$partners.size partner = $partners[i].character actor = $game_actors[@actor_id] index = actor.index - 1 return true if partner.pos_nt?(x, y) and (partner != $partners[index].character) end end return false end def distance_x_from_player return @x - formulate_x end def distance_y_from_player return @y - formulate_y end end
class Scene_Map attr_accessor :spriteset #-------------------------------------------------------------------------- # * Player Transfer Processing #-------------------------------------------------------------------------- def update_transfer_player return unless $game_player.transfer? fade = (Graphics.brightness > 0) fadeout(30) if fade partner_flag = @spriteset.partners != nil @spriteset.dispose # Dispose of sprite set $game_player.perform_transfer # Execute player transfer $game_map.autoplay # Automatically switch BGM and BGS $game_map.update Graphics.wait(15) @spriteset = Spriteset_Map.new # Recreate sprite set @spriteset.on_partner if partner_flag fadein(30) if fade Input.update end end
class Game_Interpreter #-------------------------------------------------------------------------- # * Get Character # parameter : parameter #-------------------------------------------------------------------------- def get_character(parameter) # Branch by parameter case parameter when -1 # Player if $partners != nil partners = $partners partner = $partners[$game_variables[$ACTION_VAR]] partner = partner.character end return partner == nil ? nil : partner if $game_variables[$ACTION_VAR] > -1 and $partners != nil return $game_player when 0 # this event events = $game_map.events return events == nil ? nil : events[@event_id] else # specific event events = $game_map.events return events == nil ? nil : events[parameter] end end def align_partners @x_vals = [] @y_vals = [] for i in 0...$partners.size partner = $partners[i].character partner_ = $partners[i-1].character partner.align = true if partner.passable?(partner.formulate_xxx, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx-1, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx - 1 partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx+1, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx + 1 partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx, partner.formulate_yyy-1, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy - 1 elsif partner.passable?(partner.formulate_xxx, partner.formulate_yyy+1, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy + 1 end if @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy) val = false unless @x_vals.include?(partner.fx-1) and @y_vals.include?(partner.fy) if partner.passable?(partner.fx-1, partner.fy, true) partner.fx = partner.fx - 1 partner.fy = partner.fy val = true end end return if val unless @x_vals.include?(partner.fx+1) and @y_vals.include?(partner.fy) if partner.passable?(partner.fx+1, partner.fy, true) partner.fx = partner.fx + 1 partner.fy = partner.fy val = true end end return if val unless @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy-1) if partner.passable?(partner.fx, partner.fy-1, true) partner.fx = partner.fx partner.fy = partner.fy - 1 val = true end end return if val unless @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy+1) if partner.passable?(partner.fx, partner.fy+1, true) partner.fx = partner.fx partner.fy = partner.fy + 1 val = true end end else @x_vals.push(partner.fx) @y_vals.push(partner.fy) end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update loop do if $game_map.map_id != @map_id # Map is different? @event_id = 0 # Make event ID 0 end val = false if $game_switches[$PARTNER_SWITCH] and $partners != nil for i in 0...$partners.size partner = $partners[i].character if partner.align == true val = true end end end return if val == true if @child_interpreter != nil # If child interpreter exists @child_interpreter.update # Update child interpreter if @child_interpreter.running? # If running return # Return else # After execution has finished @child_interpreter = nil # Erase child interpreter end end if @message_waiting # Waiting for message finish return end if @moving_character != nil # Waiting for move to finish if @moving_character.move_route_forcing return end @moving_character = nil end if @wait_count > 0 # Waiting @wait_count -= 1 return end if $game_troop.forcing_battler != nil # Forcing battle action return end if $game_temp.next_scene != nil # Opening screens return end if @list == nil # If content list is empty setup_starting_event if @main # Set up starting event return if @list == nil # Nothing was set up end return if execute_command == false # Execute event command @index += 1 # Advance index end end end
class Spriteset_Map def on_partner if $partners == [] on_partner_ end $game_switches[$PARTNER_SWITCH] = true for i in 0...$partners.size partner = $partners[i].character partner.refresh_ end end def on_partner_ size = $game_party.members.size - 1 size = $OVERWORLD_MAX == 0 ? size : $OVERWORLD_MAX while size > 0 actor = $game_party.members[size] $partners.push(Sprite_Character.new(@viewport1, Game_Partner.new(@viewport1, actor.id))) size -= 1 end $partners.reverse! end def off_partner $game_switches[$PARTNER_SWITCH] = false return if $partners == nil for sprite in $partners sprite.dispose end $partners = [] end def update_partners for sprite in $partners sprite.update end for partner in $partners partner.character.update end end alias update_partner update def update update_partners if $partners != nil update_partner end alias dispose_partner dispose def dispose return if $partners == nil for sprite in $partners sprite.dispose end $partners = nil dispose_partner end def create_characters $partners = [] @character_sprites = [] for i in $game_map.events.keys.sort sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) @character_sprites.push(sprite) end for vehicle in $game_map.vehicles sprite = Sprite_Character.new(@viewport1, vehicle) @character_sprites.push(sprite) end on_partner_ on_partner if $game_switches[$PARTNER_SWITCH] @character_sprites.push(Sprite_Character.new(@viewport1, $game_player)) end end
class Game_Player < Game_Character attr_accessor :move_speed def increase_steps @stop_count = 0 update_bush_depth if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false for i in 0...$partners.size partner = $partners[i].character partner.perform_action end for i in 0...$partners.size partner = $partners[i].character partner.copy_move.shift end end end #-------------------------------------------------------------------------- # * Move Down # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_down(turn_ok = true) if passable?(@x, @y+1) # Passable turn_down @y = $game_map.round_y(@y+1) @real_y = (@y-1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_down") end increase_steps @move_failed = false else # Impassable turn_down if turn_ok check_event_trigger_touch(@x, @y+1) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move Left # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_left(turn_ok = true) if passable?(@x-1, @y) # Passable turn_left @x = $game_map.round_x(@x-1) @real_x = (@x+1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_left") end increase_steps @move_failed = false else # Impassable turn_left if turn_ok check_event_trigger_touch(@x-1, @y) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move Right # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_right(turn_ok = true) if passable?(@x+1, @y) # Passable turn_right @x = $game_map.round_x(@x+1) @real_x = (@x-1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_right") end increase_steps @move_failed = false else # Impassable turn_right if turn_ok check_event_trigger_touch(@x+1, @y) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move up # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_up(turn_ok = true) if passable?(@x, @y-1) # Passable turn_up @y = $game_map.round_y(@y-1) @real_y = (@y+1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_up") end increase_steps @move_failed = false else # Impassable turn_up if turn_ok check_event_trigger_touch(@x, @y-1) # Touch event is triggered? @move_failed = true end end end
class Scene_Map < Scene_Base attr_accessor :spriteset end
_________________ Super Mario RPG Working on:Maps
|
|
|
|
 |
|
PMDandMario
|
Post subject: Re: Caterpillar System XP 1.1 and VX 1.0 Posted: Fri Feb 03, 2012 11:05 am |
| Member |
 |
 |
Joined: Thu Jun 24, 2010 11:29 am Posts: 83
|
MarioSuperStar wrote: Updated VX Caterpillar System: #============================================================================== # ** Partner System VX Version 1.2 # By MarioSuperStar # Give credit if used #==============================================================================
#============================================================================== # ** Settings # $ACTION_VAR = variable to select partner to process # =============================================================================
$ACTION_VAR = 2 #Variable indicating who performs the Set Move Route event command # When the target is Player. If $ACTION_VAR is equal to -1, the # character performing the move route will be the player. # If $ACTION_VAR is greater than -1, it uses the partner with # the position number of $ACTION_VAR. Example: 0 is the first #partner member, being the second person in the party. $PARTNER_SWITCH = 1 # Switch that is activated when partners are displayed on the map. $OVERWORLD_MAX = 1 # Max number of party memebers displayed in the map. 0 = all the party members.
class Game_Character attr_accessor :move_route end
#============================================================================== # ** Game_Event #------------------------------------------------------------------------------ # This class deals with events. It handles functions including event page # switching via condition determinants, and running parallel process events. # It's used within the Game_Map class. #==============================================================================
class Game_Partner < Game_Character #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :actor_id attr_accessor :interpreter attr_accessor :copy_move attr_accessor :transparent attr_accessor :index attr_accessor :align attr_accessor :fx attr_accessor :fy #-------------------------------------------------------------------------- # * Object Initialization # map_id : map ID # event : event (RPG::Event) #-------------------------------------------------------------------------- def initialize(map_id, actor_id) super() @transparent = false @map_id = $game_map.map_id @actor_id = actor_id actor = $game_actors[actor_id] @index = actor.index - 1 @id = 0 - actor.index @anime_count = 0 @playing_move_route = false @through = false @walk_anime = true @interpreter = nil @align = false @fx = 0 @fy = 0 refresh end def perform_action action = @copy_move[0] case action when "move_down" move_down when "move_left" move_left when "move_right" move_right when "move_up" move_up end player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index - 1].character @copy_move.push(player.copy_move[0]) end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_x player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 2 return player.x when 4 return player.x + 1 when 6 return player.x - 1 when 8 return player.x end end def formulate_y player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 4 return player.y when 8 return player.y + 1 when 2 return player.y - 1 when 6 return player.y end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_xxx player = $game_player actor = $game_actors[@actor_id] index = actor.index player = $game_player case player.direction when 2 return player.x when 4 return player.x + (1 * index) when 6 return player.x - (1 * index) when 8 return player.x end end def formulate_yyy player = $game_player actor = $game_actors[@actor_id] index = actor.index case player.direction when 4 return player.y when 8 return player.y + (1 * index) when 2 return player.y - (1 * index) when 6 return player.y end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_xx player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 2 return player.x when 4 return player.x when 6 return player.x when 8 return player.x end end def formulate_yy player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 4 return player.y when 8 return player.y when 2 return player.y when 6 return player.y end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh actor = $game_actors[@actor_id] index = actor.index if $game_party.members.size == 0 and $game_party.members[index] == nil @character_name = "" @character_index = 0 else if $game_party.members[index] != nil @character_name = actor.character_name @character_index = actor.character_index end end end #-------------------------------------------------------------------------- # * Determine if Passable # x : x-coordinate # y : y-coordinate #-------------------------------------------------------------------------- def passable?(x, y, passable = false) x = $game_map.round_x(x) # Horizontal loop adj. y = $game_map.round_y(y) # Vertical loop adj. return false unless $game_map.valid?(x, y) # Outside map? return true if @through or debug_through? # Through ON? return false unless map_passable?(x, y) # Map Impassable? return false if collide_with_characters?(x, y, passable) # Collide with character? return true # Passable end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh_ actor = $game_actors[@actor_id] index = actor.index if $game_party.members.size == 0 and $game_party.members[index] == nil @character_name = "" @character_index = 0 else if $game_party.members[index] != nil @character_name = actor.character_name @character_index = actor.character_index end end if passable?(formulate_x, formulate_y, true) moveto(formulate_x, formulate_y) # Move to initial position elsif passable?(formulate_xx-1, formulate_yy, true) moveto(formulate_xx - 1, formulate_yy) elsif passable?(formulate_xx+1, formulate_yy, true) moveto(formulate_xx+1, formulate_yy) elsif passable?(formulate_xx, formulate_yy-1, true) moveto(formulate_xx, formulate_yy-1) elsif passable?(formulate_xx, formulate_yy+1, true) moveto(formulate_xx, formulate_yy+1) end p "" turn_toward_point(formulate_xx, formulate_yy) mov = "move_down" if @direction == 2 mov = "move_left" if @direction == 4 mov = "move_right" if @direction == 6 mov = "move_up" if @direction == 8 player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index - 1].character end @direction = player.direction @copy_move = [mov] end def check_event_trigger_touch(x = 0, y = 0) end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super return if $partners == nil @playing_move_route = false if $game_player.move_route == nil return if @playing_move_route return @playing_move_route = true && move_route_forcing($game_player.move_route) if $game_player.move_route != nil through = false return if moving? if @interpreter != nil # Now parallel processing? @interpreter.update # Update interpreter return end if @align @move_speed = 5 move_toward_point(@fx, @fy) end return if $game_map.interpreter.running? end #-------------------------------------------------------------------------- # * Turn toward Player #-------------------------------------------------------------------------- def turn_toward_point(x, y) sx = distance_x_from_point(x) sy = distance_y_from_point(y) if sx.abs > sy.abs # Horizontal distance is longer sx > 0 ? turn_left : turn_right elsif sx.abs < sy.abs # Vertical distance is longer sy > 0 ? turn_up : turn_down end end #-------------------------------------------------------------------------- # * Move toward Player #-------------------------------------------------------------------------- def move_toward_point(x, y) sx = distance_x_from_point(x) sy = distance_y_from_point(y) if sx != 0 or sy != 0 if sx.abs > sy.abs # Horizontal distance is longer sx > 0 ? move_left : move_right # Prioritize left-right if @move_failed and sy != 0 sy > 0 ? move_up : move_down end else # Vertical distance is longer sy > 0 ? move_up : move_down # Prioritize up-down if @move_failed and sx != 0 sx > 0 ? move_left : move_right end end end end #-------------------------------------------------------------------------- # * Update While Stopped #-------------------------------------------------------------------------- def update_stop return if $partners == nil if @x == @fx and @y == @fy and @align @align = false @move_speed = $game_player.move_speed turn_toward_point(formulate_xx, formulate_yy) mov = "move_down" if @direction == 2 mov = "move_left" if @direction == 4 mov = "move_right" if @direction == 6 mov = "move_up" if @direction == 8 @copy_move = [mov] end if $game_switches[$PARTNER_SWITCH] and @align == false turn_toward_point(formulate_xx, formulate_yy) end if @step_anime @anime_count += 1 elsif @pattern != @original_pattern @anime_count += 1.5 end @stop_count += 1 unless @locked end #-------------------------------------------------------------------------- # * Calculate X Distance From Player #-------------------------------------------------------------------------- def distance_x_from_point(x) sx = @x - x if $game_map.loop_horizontal? # When looping horizontally if sx.abs > $game_map.width / 2 # Larger than half the map width? sx -= $game_map.width # Subtract map width end end return sx end #-------------------------------------------------------------------------- # * Calculate Y Distance From Player #-------------------------------------------------------------------------- def distance_y_from_point(y) sy = @y - y if $game_map.loop_vertical? # When looping vertically if sy.abs > $game_map.height / 2 # Larger than half the map height? sy -= $game_map.height # Subtract map height end end return sy end #-------------------------------------------------------------------------- # * Determine Character Collision # x : x-coordinate # y : y-coordinate # Detects normal character collision, including the player and vehicles. #-------------------------------------------------------------------------- def collide_with_characters?(x, y, passable = false) for event in $game_map.events_xy(x, y) # Matches event position unless event.through # Passage OFF? return true if self.is_a?(Game_Event) # Self is event return true if event.priority_type == 1 # Target is normal char end end if passable == true if @priority_type == 1 # Self is normal char return true if $game_player.pos_nt?(x, y) # Matches player position return true if $game_map.boat.pos_nt?(x, y) # Matches boat position return true if $game_map.ship.pos_nt?(x, y) # Matches ship position end for i in 0...$partners.size partner = $partners[i].character actor = $game_actors[@actor_id] index = actor.index - 1 return true if partner.pos_nt?(x, y) and (partner != $partners[index].character) end end return false end def distance_x_from_player return @x - formulate_x end def distance_y_from_player return @y - formulate_y end end
class Scene_Map attr_accessor :spriteset #-------------------------------------------------------------------------- # * Player Transfer Processing #-------------------------------------------------------------------------- def update_transfer_player return unless $game_player.transfer? fade = (Graphics.brightness > 0) fadeout(30) if fade partner_flag = @spriteset.partners != nil @spriteset.dispose # Dispose of sprite set $game_player.perform_transfer # Execute player transfer $game_map.autoplay # Automatically switch BGM and BGS $game_map.update Graphics.wait(15) @spriteset = Spriteset_Map.new # Recreate sprite set @spriteset.on_partner if partner_flag fadein(30) if fade Input.update end end
class Game_Interpreter #-------------------------------------------------------------------------- # * Get Character # parameter : parameter #-------------------------------------------------------------------------- def get_character(parameter) # Branch by parameter case parameter when -1 # Player if $partners != nil partners = $partners partner = $partners[$game_variables[$ACTION_VAR]] partner = partner.character end return partner == nil ? nil : partner if $game_variables[$ACTION_VAR] > -1 and $partners != nil return $game_player when 0 # this event events = $game_map.events return events == nil ? nil : events[@event_id] else # specific event events = $game_map.events return events == nil ? nil : events[parameter] end end def align_partners @x_vals = [] @y_vals = [] for i in 0...$partners.size partner = $partners[i].character partner_ = $partners[i-1].character partner.align = true if partner.passable?(partner.formulate_xxx, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx-1, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx - 1 partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx+1, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx + 1 partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx, partner.formulate_yyy-1, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy - 1 elsif partner.passable?(partner.formulate_xxx, partner.formulate_yyy+1, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy + 1 end if @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy) val = false unless @x_vals.include?(partner.fx-1) and @y_vals.include?(partner.fy) if partner.passable?(partner.fx-1, partner.fy, true) partner.fx = partner.fx - 1 partner.fy = partner.fy val = true end end return if val unless @x_vals.include?(partner.fx+1) and @y_vals.include?(partner.fy) if partner.passable?(partner.fx+1, partner.fy, true) partner.fx = partner.fx + 1 partner.fy = partner.fy val = true end end return if val unless @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy-1) if partner.passable?(partner.fx, partner.fy-1, true) partner.fx = partner.fx partner.fy = partner.fy - 1 val = true end end return if val unless @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy+1) if partner.passable?(partner.fx, partner.fy+1, true) partner.fx = partner.fx partner.fy = partner.fy + 1 val = true end end else @x_vals.push(partner.fx) @y_vals.push(partner.fy) end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update loop do if $game_map.map_id != @map_id # Map is different? @event_id = 0 # Make event ID 0 end val = false if $game_switches[$PARTNER_SWITCH] and $partners != nil for i in 0...$partners.size partner = $partners[i].character if partner.align == true val = true end end end return if val == true if @child_interpreter != nil # If child interpreter exists @child_interpreter.update # Update child interpreter if @child_interpreter.running? # If running return # Return else # After execution has finished @child_interpreter = nil # Erase child interpreter end end if @message_waiting # Waiting for message finish return end if @moving_character != nil # Waiting for move to finish if @moving_character.move_route_forcing return end @moving_character = nil end if @wait_count > 0 # Waiting @wait_count -= 1 return end if $game_troop.forcing_battler != nil # Forcing battle action return end if $game_temp.next_scene != nil # Opening screens return end if @list == nil # If content list is empty setup_starting_event if @main # Set up starting event return if @list == nil # Nothing was set up end return if execute_command == false # Execute event command @index += 1 # Advance index end end end
class Spriteset_Map def on_partner if $partners == [] on_partner_ end $game_switches[$PARTNER_SWITCH] = true for i in 0...$partners.size partner = $partners[i].character partner.refresh_ end end def on_partner_ size = $game_party.members.size - 1 size = $OVERWORLD_MAX == 0 ? size : $OVERWORLD_MAX while size > 0 actor = $game_party.members[size] $partners.push(Sprite_Character.new(@viewport1, Game_Partner.new(@viewport1, actor.id))) size -= 1 end $partners.reverse! end def off_partner $game_switches[$PARTNER_SWITCH] = false return if $partners == nil for sprite in $partners sprite.dispose end $partners = [] end def update_partners for sprite in $partners sprite.update end for partner in $partners partner.character.update end end alias update_partner update def update update_partners if $partners != nil update_partner end alias dispose_partner dispose def dispose return if $partners == nil for sprite in $partners sprite.dispose end $partners = nil dispose_partner end def create_characters $partners = [] @character_sprites = [] for i in $game_map.events.keys.sort sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) @character_sprites.push(sprite) end for vehicle in $game_map.vehicles sprite = Sprite_Character.new(@viewport1, vehicle) @character_sprites.push(sprite) end on_partner_ on_partner if $game_switches[$PARTNER_SWITCH] @character_sprites.push(Sprite_Character.new(@viewport1, $game_player)) end end
class Game_Player < Game_Character attr_accessor :move_speed def increase_steps @stop_count = 0 update_bush_depth if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false for i in 0...$partners.size partner = $partners[i].character partner.perform_action end for i in 0...$partners.size partner = $partners[i].character partner.copy_move.shift end end end #-------------------------------------------------------------------------- # * Move Down # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_down(turn_ok = true) if passable?(@x, @y+1) # Passable turn_down @y = $game_map.round_y(@y+1) @real_y = (@y-1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_down") end increase_steps @move_failed = false else # Impassable turn_down if turn_ok check_event_trigger_touch(@x, @y+1) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move Left # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_left(turn_ok = true) if passable?(@x-1, @y) # Passable turn_left @x = $game_map.round_x(@x-1) @real_x = (@x+1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_left") end increase_steps @move_failed = false else # Impassable turn_left if turn_ok check_event_trigger_touch(@x-1, @y) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move Right # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_right(turn_ok = true) if passable?(@x+1, @y) # Passable turn_right @x = $game_map.round_x(@x+1) @real_x = (@x-1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_right") end increase_steps @move_failed = false else # Impassable turn_right if turn_ok check_event_trigger_touch(@x+1, @y) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move up # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_up(turn_ok = true) if passable?(@x, @y-1) # Passable turn_up @y = $game_map.round_y(@y-1) @real_y = (@y+1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_up") end increase_steps @move_failed = false else # Impassable turn_up if turn_ok check_event_trigger_touch(@x, @y-1) # Touch event is triggered? @move_failed = true end end end
class Scene_Map < Scene_Base attr_accessor :spriteset end
Thanks. This will be useful for my game! edit: for some reason, whenever I try to run my game, it returns this error: http://i.imgur.com/HoeqV.pngline 56 is: @index = actor.index - 1
_________________
|
|
|
|
 |
|
PMDandMario
|
Post subject: Re: Caterpillar System XP 1.1 and VX 1.2 Posted: Sat Feb 04, 2012 4:41 pm |
| Member |
 |
 |
Joined: Thu Jun 24, 2010 11:29 am Posts: 83
|
MarioSuperStar wrote: How many members do you have in your party when this error occurs? One. It's when I select 'New Game'.
_________________
|
|
|
|
 |
|
MarioSuperStar
|
Post subject: Re: Caterpillar System XP 1.1 and VX 1.2 Posted: Sun Feb 05, 2012 10:51 am |
| Senior Member |
 |
 |
Joined: Mon Jun 28, 2010 5:55 pm Posts: 1270 Location: Look somewhere else...
|
#============================================================================== # ** Partner System VX Version 1.3 Build # By MarioSuperStar # Give credit if used #==============================================================================
#============================================================================== # ** Settings # $ACTION_VAR = variable to select partner to process # =============================================================================
$ACTION_VAR = 2 #Variable indicating who performs the Set Move Route event command # When the target is Player. If $ACTION_VAR is equal to -1, the # character performing the move route will be the player. # If $ACTION_VAR is greater than -1, it uses the partner with # the position number of $ACTION_VAR. Example: 0 is the first #partner member, being the second person in the party. $PARTNER_SWITCH = 1 # Switch that is activated when partners are displayed on the map. $OVERWORLD_MAX = 1 # Max number of party memebers displayed in the map. 0 = all the party members. $SHOW_AT_STARTUP = true #Show partners at startup.
class Game_Character attr_accessor :move_route end
#============================================================================== # ** Game_Event #------------------------------------------------------------------------------ # This class deals with events. It handles functions including event page # switching via condition determinants, and running parallel process events. # It's used within the Game_Map class. #==============================================================================
class Game_Partner < Game_Character #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :actor_id attr_accessor :interpreter attr_accessor :copy_move attr_accessor :transparent attr_accessor :index attr_accessor :align attr_accessor :fx attr_accessor :fy #-------------------------------------------------------------------------- # * Object Initialization # map_id : map ID # event : event (RPG::Event) #-------------------------------------------------------------------------- def initialize(map_id, actor_id) super() @transparent = false @map_id = $game_map.map_id @actor_id = actor_id actor = $game_actors[actor_id] @index = actor.index - 1 @id = 0 - actor.index @anime_count = 0 @playing_move_route = false @through = false @walk_anime = true @interpreter = nil @align = false @fx = 0 @fy = 0 refresh end def perform_action action = @copy_move[0] case action when "move_down" move_down when "move_left" move_left when "move_right" move_right when "move_up" move_up end player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index - 1].character @copy_move.push(player.copy_move[0]) end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_x player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 2 return player.x when 4 return player.x + 1 when 6 return player.x - 1 when 8 return player.x end end def formulate_y player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 4 return player.y when 8 return player.y + 1 when 2 return player.y - 1 when 6 return player.y end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_xxx player = $game_player actor = $game_actors[@actor_id] index = actor.index player = $game_player case player.direction when 2 return player.x when 4 return player.x + (1 * index) when 6 return player.x - (1 * index) when 8 return player.x end end def formulate_yyy player = $game_player actor = $game_actors[@actor_id] index = actor.index case player.direction when 4 return player.y when 8 return player.y + (1 * index) when 2 return player.y - (1 * index) when 6 return player.y end end #-------------------------------------------------------------------------- # * Formulate Starting Coordinates #-------------------------------------------------------------------------- def formulate_xx player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 2 return player.x when 4 return player.x when 6 return player.x when 8 return player.x end end def formulate_yy player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index-1].character else player = $game_player end case player.direction when 4 return player.y when 8 return player.y when 2 return player.y when 6 return player.y end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh actor = $game_actors[@actor_id] index = actor.index if $game_party.members.size == 0 and $game_party.members[index] == nil @character_name = "" @character_index = 0 else if $game_party.members[index] != nil @character_name = actor.character_name @character_index = actor.character_index end end end #-------------------------------------------------------------------------- # * Determine if Passable # x : x-coordinate # y : y-coordinate #-------------------------------------------------------------------------- def passable?(x, y, passable = false) x = $game_map.round_x(x) # Horizontal loop adj. y = $game_map.round_y(y) # Vertical loop adj. return false unless $game_map.valid?(x, y) # Outside map? return true if @through or debug_through? # Through ON? return false unless map_passable?(x, y) # Map Impassable? return false if collide_with_characters?(x, y, passable) # Collide with character? return true # Passable end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh_ actor = $game_actors[@actor_id] index = actor.index if $game_party.members.size == 0 and $game_party.members[index] == nil @character_name = "" @character_index = 0 else if $game_party.members[index] != nil @character_name = actor.character_name @character_index = actor.character_index end end if passable?(formulate_x, formulate_y, true) moveto(formulate_x, formulate_y) # Move to initial position elsif passable?(formulate_xx-1, formulate_yy, true) moveto(formulate_xx - 1, formulate_yy) elsif passable?(formulate_xx+1, formulate_yy, true) moveto(formulate_xx+1, formulate_yy) elsif passable?(formulate_xx, formulate_yy-1, true) moveto(formulate_xx, formulate_yy-1) elsif passable?(formulate_xx, formulate_yy+1, true) moveto(formulate_xx, formulate_yy+1) end turn_toward_point(formulate_xx, formulate_yy) mov = "move_down" if @direction == 2 mov = "move_left" if @direction == 4 mov = "move_right" if @direction == 6 mov = "move_up" if @direction == 8 player = $game_player actor = $game_actors[@actor_id] index = actor.index index -= 1 if index > 0 player = $partners[index - 1].character end @direction = player.direction @copy_move = [mov] @transparent = false end def check_event_trigger_touch(x = 0, y = 0) end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super return if $partners == nil @playing_move_route = false if $game_player.move_route == nil return if @playing_move_route return @playing_move_route = true && move_route_forcing($game_player.move_route) if $game_player.move_route != nil through = false return if moving? if @interpreter != nil # Now parallel processing? @interpreter.update # Update interpreter return end if @align @move_speed = 5 move_toward_point(@fx, @fy) end return if $game_map.interpreter.running? end #-------------------------------------------------------------------------- # * Turn toward Player #-------------------------------------------------------------------------- def turn_toward_point(x, y) sx = distance_x_from_point(x) sy = distance_y_from_point(y) if sx.abs > sy.abs # Horizontal distance is longer sx > 0 ? turn_left : turn_right elsif sx.abs < sy.abs # Vertical distance is longer sy > 0 ? turn_up : turn_down end end #-------------------------------------------------------------------------- # * Move toward Player #-------------------------------------------------------------------------- def move_toward_point(x, y) sx = distance_x_from_point(x) sy = distance_y_from_point(y) if sx != 0 or sy != 0 if sx.abs > sy.abs # Horizontal distance is longer sx > 0 ? move_left : move_right # Prioritize left-right if @move_failed and sy != 0 sy > 0 ? move_up : move_down end else # Vertical distance is longer sy > 0 ? move_up : move_down # Prioritize up-down if @move_failed and sx != 0 sx > 0 ? move_left : move_right end end end end #-------------------------------------------------------------------------- # * Update While Stopped #-------------------------------------------------------------------------- def update_stop return if $partners == nil if @x == @fx and @y == @fy and @align @align = false @move_speed = $game_player.move_speed turn_toward_point(formulate_xx, formulate_yy) mov = "move_down" if @direction == 2 mov = "move_left" if @direction == 4 mov = "move_right" if @direction == 6 mov = "move_up" if @direction == 8 @copy_move = [mov] end if $game_switches[$PARTNER_SWITCH] and @align == false turn_toward_point(formulate_xx, formulate_yy) end if @step_anime @anime_count += 1 elsif @pattern != @original_pattern @anime_count += 1.5 end @stop_count += 1 unless @locked end #-------------------------------------------------------------------------- # * Calculate X Distance From Player #-------------------------------------------------------------------------- def distance_x_from_point(x) sx = @x - x if $game_map.loop_horizontal? # When looping horizontally if sx.abs > $game_map.width / 2 # Larger than half the map width? sx -= $game_map.width # Subtract map width end end return sx end #-------------------------------------------------------------------------- # * Calculate Y Distance From Player #-------------------------------------------------------------------------- def distance_y_from_point(y) sy = @y - y if $game_map.loop_vertical? # When looping vertically if sy.abs > $game_map.height / 2 # Larger than half the map height? sy -= $game_map.height # Subtract map height end end return sy end #-------------------------------------------------------------------------- # * Determine Character Collision # x : x-coordinate # y : y-coordinate # Detects normal character collision, including the player and vehicles. #-------------------------------------------------------------------------- def collide_with_characters?(x, y, passable = false) for event in $game_map.events_xy(x, y) # Matches event position unless event.through # Passage OFF? return true if self.is_a?(Game_Event) # Self is event return true if event.priority_type == 1 # Target is normal char end end if passable == true if @priority_type == 1 # Self is normal char return true if $game_player.pos_nt?(x, y) # Matches player position return true if $game_map.boat.pos_nt?(x, y) # Matches boat position return true if $game_map.ship.pos_nt?(x, y) # Matches ship position end for i in 0...$partners.size partner = $partners[i].character actor = $game_actors[@actor_id] index = actor.index - 1 return true if partner.pos_nt?(x, y) and (partner != $partners[index].character) end end return false end def distance_x_from_player return @x - formulate_x end def distance_y_from_player return @y - formulate_y end end
class Scene_Map attr_accessor :spriteset #-------------------------------------------------------------------------- # * Player Transfer Processing #-------------------------------------------------------------------------- def update_transfer_player return unless $game_player.transfer? fade = (Graphics.brightness > 0) fadeout(30) if fade partner_flag = @spriteset.partners != nil @spriteset.dispose # Dispose of sprite set $game_player.perform_transfer # Execute player transfer $game_map.autoplay # Automatically switch BGM and BGS $game_map.update Graphics.wait(15) @spriteset = Spriteset_Map.new # Recreate sprite set @spriteset.on_partner if partner_flag fadein(30) if fade Input.update end end
class Game_Interpreter #-------------------------------------------------------------------------- # * Get Character # parameter : parameter #-------------------------------------------------------------------------- def get_character(parameter) # Branch by parameter case parameter when -1 # Player if $partners != nil partners = $partners partner = $partners[$game_variables[$ACTION_VAR]] partner = partner.character end return partner == nil ? nil : partner if $game_variables[$ACTION_VAR] > -1 and $partners != nil return $game_player when 0 # this event events = $game_map.events return events == nil ? nil : events[@event_id] else # specific event events = $game_map.events return events == nil ? nil : events[parameter] end end def align_partners @x_vals = [] @y_vals = [] for i in 0...$partners.size partner = $partners[i].character partner_ = $partners[i-1].character partner.align = true if partner.passable?(partner.formulate_xxx, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx-1, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx - 1 partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx+1, partner.formulate_yyy, true) partner.fx = partner.formulate_xxx + 1 partner.fy = partner.formulate_yyy elsif partner.passable?(partner.formulate_xxx, partner.formulate_yyy-1, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy - 1 elsif partner.passable?(partner.formulate_xxx, partner.formulate_yyy+1, true) partner.fx = partner.formulate_xxx partner.fy = partner.formulate_yyy + 1 end if @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy) val = false unless @x_vals.include?(partner.fx-1) and @y_vals.include?(partner.fy) if partner.passable?(partner.fx-1, partner.fy, true) partner.fx = partner.fx - 1 partner.fy = partner.fy val = true end end return if val unless @x_vals.include?(partner.fx+1) and @y_vals.include?(partner.fy) if partner.passable?(partner.fx+1, partner.fy, true) partner.fx = partner.fx + 1 partner.fy = partner.fy val = true end end return if val unless @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy-1) if partner.passable?(partner.fx, partner.fy-1, true) partner.fx = partner.fx partner.fy = partner.fy - 1 val = true end end return if val unless @x_vals.include?(partner.fx) and @y_vals.include?(partner.fy+1) if partner.passable?(partner.fx, partner.fy+1, true) partner.fx = partner.fx partner.fy = partner.fy + 1 val = true end end else @x_vals.push(partner.fx) @y_vals.push(partner.fy) end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update loop do if $game_map.map_id != @map_id # Map is different? @event_id = 0 # Make event ID 0 end val = false if $game_switches[$PARTNER_SWITCH] and $partners != nil for i in 0...$partners.size partner = $partners[i].character if partner.align == true val = true end end end return if val == true if @child_interpreter != nil # If child interpreter exists @child_interpreter.update # Update child interpreter if @child_interpreter.running? # If running return # Return else # After execution has finished @child_interpreter = nil # Erase child interpreter end end if @message_waiting # Waiting for message finish return end if @moving_character != nil # Waiting for move to finish if @moving_character.move_route_forcing return end @moving_character = nil end if @wait_count > 0 # Waiting @wait_count -= 1 return end if $game_troop.forcing_battler != nil # Forcing battle action return end if $game_temp.next_scene != nil # Opening screens return end if @list == nil # If content list is empty setup_starting_event if @main # Set up starting event return if @list == nil # Nothing was set up end return if execute_command == false # Execute event command @index += 1 # Advance index end end end
class Spriteset_Map def on_partner return if $game_party.members.size == 1 if $partners == [] on_partner_ end $game_switches[$PARTNER_SWITCH] = true for i in 0...$partners.size partner = $partners[i].character partner.refresh_ end end def on_partner_ return if $game_party.members.size == 1 size = $game_party.members.size - 1 size = $OVERWORLD_MAX == 0 ? size : $OVERWORLD_MAX while size > 0 actor = $game_party.members[size] $partners.push(Sprite_Character.new(@viewport1, Game_Partner.new(@viewport1, actor.id))) size -= 1 end for i in 0...$partners.size partner = $partners[i].character partner.transparent = true end $partners.reverse! end def off_partner $game_switches[$PARTNER_SWITCH] = false return if $partners == nil for sprite in $partners sprite.dispose end $partners = [] end def update_partners for sprite in $partners sprite.update end for partner in $partners partner.character.update end end alias update_partner update def update update_partners if $partners != nil update_partner end alias dispose_partner dispose def dispose return if $partners == nil for sprite in $partners sprite.dispose end $partners = nil dispose_partner end def create_characters $partners = [] @character_sprites = [] for i in $game_map.events.keys.sort sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) @character_sprites.push(sprite) end for vehicle in $game_map.vehicles sprite = Sprite_Character.new(@viewport1, vehicle) @character_sprites.push(sprite) end on_partner_ on_partner if $game_switches[$PARTNER_SWITCH] or $SHOW_AT_STARTUP @character_sprites.push(Sprite_Character.new(@viewport1, $game_player)) end end
class Game_Player < Game_Character attr_accessor :move_speed def increase_steps @stop_count = 0 update_bush_depth if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false for i in 0...$partners.size partner = $partners[i].character partner.perform_action end for i in 0...$partners.size partner = $partners[i].character partner.copy_move.shift end end end #-------------------------------------------------------------------------- # * Move Down # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_down(turn_ok = true) if passable?(@x, @y+1) # Passable turn_down @y = $game_map.round_y(@y+1) @real_y = (@y-1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_down") end increase_steps @move_failed = false else # Impassable turn_down if turn_ok check_event_trigger_touch(@x, @y+1) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move Left # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_left(turn_ok = true) if passable?(@x-1, @y) # Passable turn_left @x = $game_map.round_x(@x-1) @real_x = (@x+1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_left") end increase_steps @move_failed = false else # Impassable turn_left if turn_ok check_event_trigger_touch(@x-1, @y) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move Right # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_right(turn_ok = true) if passable?(@x+1, @y) # Passable turn_right @x = $game_map.round_x(@x+1) @real_x = (@x-1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_right") end increase_steps @move_failed = false else # Impassable turn_right if turn_ok check_event_trigger_touch(@x+1, @y) # Touch event is triggered? @move_failed = true end end #-------------------------------------------------------------------------- # * Move up # turn_ok : Allows change of direction on the spot #-------------------------------------------------------------------------- def move_up(turn_ok = true) if passable?(@x, @y-1) # Passable turn_up @y = $game_map.round_y(@y-1) @real_y = (@y+1)*256 if $game_switches[$PARTNER_SWITCH] and @move_route_forcing == false $partners[0].character.copy_move.push("move_up") end increase_steps @move_failed = false else # Impassable turn_up if turn_ok check_event_trigger_touch(@x, @y-1) # Touch event is triggered? @move_failed = true end end end
class Scene_Map < Scene_Base attr_accessor :spriteset end
_________________ Super Mario RPG Working on:Maps
|
|
|
|
 |
|
|
 |
|
 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|