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.

Multiparties script

I ported this multiparties script from VX to XP, can do things like FFVI, but also saving gold,
items,etc.

Code:
#

#    Ported to Xp: gerkrt,gerrtunk

#   Created: modern algebra

#   Idea to port: TheRealDeal 

#    By default, the original party is saved in $game_parties[0], so you may

#    want to avoid overwriting $game_parties[0] and just work with 1,2,...

#

#    Also, be very careful when dealing with parties. Always remember what

#    parties exist and where they are in $game_parties or else you may make a

#    stupid error occur.

#

#        *EXAMPLE EVENT*

#

#      @>Change Items: [Potion], + 1

#      @>Change Gold: + 50

#      @>Script: p = $game_parties[1]

#       :      : $game_party = p

#       :      : $game_player.refresh

#      @>Change Party Member: Add [Oscar], Initialize

#      @>Change Weapons: [Bastard Sword], +1

#      @>Change Gold: + 100

#

#    Assuming that $game_parties[1] did not previously exist, this event just

#    switched your party to the party with index 1, and if you looked at your

#    menu you would see that Oscar is in the party, you have 100 Gold, and a

#    Bastard Sword. The potion and the other 50 Gold went to the initial party

#

#    Now, let's say Oscar later meets up with his party and rejoins. Then this

#    event would do the trick:

#

#      @>Script: $game_parties.merge! (0, 1)

#       :      : $game_party = $game_parties[0]

#       :      : $game_player.refresh

#

#    And there, the two parties have been merged and everything that Oscar had

#    obtained goes to the party.

#==============================================================================

 

#==============================================================================

# ** Game_Party

#------------------------------------------------------------------------------

#  Summary of Changes:

#    new method - add_multiple_steps

#==============================================================================

 

class Game_Party

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Add Multiple Steps

  #    amount : the amount of steps to add

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def add_multiple_steps (amount)

    @steps += amount

  end

end

 

#==============================================================================

# ** Game_Parties

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#  This class handles Parties. It's a wrapper for the built-in class "Array."

#  It is accessed by $game_parties

#==============================================================================

 

class Game_Parties

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Object Initialization

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def initialize

    @data = [$game_party]

  end

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Retrieve Party

  #    id : the ID of the party

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def [] (id)

    @data[id] = Game_Party.new if @data[id] == nil

    return @data[id]

  end

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Set Party

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def []= (id, party)

    # Does nothing unless it is a party object

    return unless party.class == Game_Party

    @data[id] = party

  end

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Merge

  #    id_1 : the ID of the first party

  #    id_2 : the ID of the second party

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def merge (id_1, id_2)

    new_party = Game_Party.new

    # Get old parties

    op1 = self[id_1]

    op2 = self[id_2]

    # Gold

    new_party.gain_gold (op1.gold + op2.gold)

    # Members

    (op1.members | op2.members).each { |actor| new_party.add_actor (actor.id) }

    # Items, Weapons, and Armor

    (op1.items | op2.items).each { |item|

      new_party.gain_item (item, op1.item_number (item) +  op2.item_number (item))

    }

    # Steps

    new_party.add_multiple_steps (op1.steps + op2.steps)

    # Last Item

    new_party.last_item_id = op1.last_item_id

    # Last Actor

    new_party.last_actor_index = op1.last_actor_index

    # Last Target

    new_party.last_target_index = op1.last_target_index

    # Quests (if game includes my Quest Log)

    begin

      (op1.quests.list | op2.quests.list).each { |quest|

        new_quest = new_party.quests[quest.id]

        # Reveal Objectives

        quest.revealed_objectives.each { |i| new_quest.reveal_objective (i) }

        # Complete Objectives

        quest.complete_objectives.each { |i| new_quest.complete_objective (i) }

        # Fail Objectives

        quest.failed_objectives.each { |i| new_quest.fail_objective (i) }

        # Concealed?

        new_quest.concealed = quest.concealed

        # Reward Given?

        new_quest.reward_given = quest.reward_given

      }

    rescue

    end

    return new_party

  end

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Merge!

  #    id_1 : the ID of the first party to which the second party is merged

  #    id_2 : the ID of the second party that is deleted

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def merge! (id_1, id_2)

    @data[id_1] = merge (id_1, id_2)

    delete (id_2)

  end

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Delete

  #     id : the ID of the quest to be deleted

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  def delete (id)

    @data[id] = nil

    # If this was the last in the array

    if id == @data.size - 1

      # Delete any nil elements that exist between this party and its successor

      id -= 1

      while @data[id] == nil

        @data.delete (id)

        id -= 1

      end

    end

  end

end

 

#==============================================================================

# ** Scene_Title

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#  Summary of Changes:

#    aliased method - create_game_objects

#==============================================================================

 

class Scene_Title

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Create Game Objects

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  alias command_new_game_GP_alias command_new_game

  def command_new_game

    $game_parties      = Game_Parties.new

    command_new_game_GP_alias

  end

end

 

#==============================================================================

# ** Scene_Save

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#  Summary of Changes:

#    aliased methods -  write_save_data

#==============================================================================

 

class Scene_Save

 

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Write Save Data

  #     file : write file object (opened)

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  alias modalg_multiparty_wrt_sv_dta_6hye write_save_data

  def write_save_data(file)

    modalg_multiparty_wrt_sv_dta_6hye (file)

    Marshal.dump($game_parties,        file)

  end

end

 

#==============================================================================

# ** Scene_Load

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#  Summary of Changes:

#    aliased methods - read_save_data

#==============================================================================

 

class Scene_Load

 

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # * Load Save Data

  #     file : file object for reading (opened)

  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  alias modalg_multiparty_rd_sv_dat_2gte read_save_data

  def read_save_data(file)

    modalg_multiparty_rd_sv_dat_2gte (file)

    $game_parties        = Marshal.load(file)

  end

end

 

Test this code well and tell me if anything is wrong.
 

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