Main Menu
  • Welcome to The RPG Maker Resource Kit.

[RMVXA] Monster Breeding / Actor Fusion Script Conversion

Started by dabum, July 02, 2013, 02:18:54 AM

0 Members and 1 Guest are viewing this topic.

dabum

Hello there! I'm here today looking for a script similar to SoWs Monster Breed script for VX located here: http://www.rpgmakervx.net/index.php?showtopic=51968

What this script does is that a scene opens up displaying the monsters you have in your party. You then choose 2 of these monsters (actors) and then based on their class ID's it determines what monster they breed into (outcome is also based on class id). Similar to the SoWs breeding script, I want to have the outcomes for breeding setup in arrays such as [outcome, class1, class2] etc etc. Once the monsters are finished breeding, the parents aka the original two that you had choosen leave forever.

Scripts I am currently also using: Tsukihime Custom DB (Using this to create monsters(actors) through script call ingame for purposes such as monster catching)

I attempted to port it, but all Ive gotten to is for the scene to load, and after it loads it freezes. Below is my attempt to someone edit it. Any help would be gladly appreciated.
[spoiler]

#============================================================================
# Monster Breeding System 1.1
# by nhojyer07
# 1.1 Fixed a major bug
#============================================================================
$imported = {} if $imported == nil
$imported["SowSMonsBreedSys"] = true
#============================================================================
module SOWS_MBS
  TYPE_ARRAY = [        # [ child, type 1, type 2]
    [3, 1, 2],
    [12, 10, 11]
  ]
  SPECIFIC_ARRAY = [    # [ child, monster 1, monster 2]
    [6, 4, 5],
    [9, 7, 8]
  ]
end
#============================================================================
#============================================================================
class Window_BreedHelp < Window_Base

  def initialize
    super(0, 0, Graphics.width, line_height + 32)
    refresh
  end
  def refresh(text = "")
    self.contents.clear
    self.contents.draw_text(0, 0, Graphics.width - 32, line_height, text)
  end
end
#============================================================================
#============================================================================
class Window_BreedStatus < Window_Base
  def initialize
    super(Graphics.width / 2, 56, Graphics.width / 2, Graphics.height - (2 * line_height + 32) - 56)
    refresh
  end

  def refresh(main = "None", sub = "None", result = "None")
    self.contents.clear
    self.contents.draw_text(0, 0, Graphics.width / 2 - 32, line_height, "Main:")
    self.contents.draw_text(0, line_height, Graphics.width / 2 - 32, line_height, main, 2)
    self.contents.draw_text(0, line_height * 3, Graphics.width / 2 - 32, line_height, "Sub:")
    self.contents.draw_text(0, line_height * 4, Graphics.width / 2 - 32, line_height, sub, 2)
    self.contents.draw_text(0, line_height * 7, Graphics.width / 2 - 32, line_height, "Result:")
    self.contents.draw_text(0, line_height * 8, Graphics.width / 2 - 32, line_height, result, 2)
  end
end
#============================================================================
#============================================================================
class Window_ActorList < Window_Selectable 
  attr_accessor :i

  def initialize
    super(0, 56, Graphics.width / 2, Graphics.height / 2)
    @i = 0
    refresh
    self.index = 0
  end

  def refresh(main = -1, sub = -1)
    self.contents.clear
    @item_max = $game_party.members.size
    for actor in $game_party.members
      y = actor.index * line_height
      if sub == -1
        self.contents.font.color.alpha = main == actor.index ? 128 : 255
      elsif sub > -1
        self.contents.font.color.alpha = main == actor.index ? 128 : sub == actor.index ? 128 : 255
      end
      self.contents.draw_text(x, y, 108, line_height, actor.name)
    end
  end
end
#============================================================================
#============================================================================
class Window_ActorStat < Window_Base
  def initialize
    super(0, 56 + Graphics.height / 2, Graphics.width / 2, Graphics.height / 2 - 56)
    refresh($game_party.members[0])
  end

  def refresh(actor)
    self.contents.clear
    draw_actor_face(actor, 2, 2, 92)
    x = 104
    y = line_height / 2
    draw_actor_name(actor, x, y)
    draw_actor_class(actor, x, y + line_height)
  end
end
#============================================================================
#============================================================================
class Scene_Breed < Scene_Base
  include SOWS_MBS

  def start
    super
    @background_sprite = Sprite.new
    @background_sprite.bitmap = SceneManager.background_bitmap
    @background_sprite.color.set(16, 16, 16, 128)
   
    @help = Window_BreedHelp.new
    @help.refresh("Choose the first monster.")
    @actorlist = Window_ActorList.new
    @actorstat = Window_ActorStat.new
    @breedstat = Window_BreedStatus.new
    @breedcomm = Window_Command.new(Graphics.width / 2, Graphics.height)#, ["Combine","Cancel"])
    @breedcomm.x = Graphics.width / 2
    @breedcomm.y = Graphics.height - @breedcomm.height
    @breedcomm.active = false
    @index = @actorlist.index
    @main = -1
    @sub = -1
    @counter = 0
  end

  def update
    super
    @background_sprite.update
    @help.update
    @actorlist.update
    @actorstat.update
    @breedstat.update
    @breedcomm.update
    @win_msg.update if !@win_msg.nil?
    if @actorlist.active
      update_actor_selection
    elsif @breedcomm.active
      update_command_selection
    end
    if !@win_msg.nil?
      if @counter == 180 # 3 secs
        @win_msg.visible = false
        @win_msg = nil
        @actorlist.active = true
        @help.refresh("Choose the first monster.")
        @counter = 0
      else
        @counter += 1
      end
    end
  end

  def terminate
    super
    @background_sprite.dispose
    @help.dispose
    @actorlist.dispose
    @actorstat.dispose
    @breedstat.dispose
    @breedcomm.dispose
    @win_msg.dispose if !@win_msg.nil?
  end

  def return_scene
    $scene = Scene_Map.new
  end

  def update_actor_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      if @main == -1 and @sub == -1
        return_scene
      elsif @main > -1 and @sub > -1
        @sub = -1
        @breedstat.refresh($game_party.members[@main].name)
        @actorlist.refresh(@main)
        @help.refresh("Choose the second monster.")
      elsif @main > -1 and @sub == -1
        @main = -1
        @breedstat.refresh
        @actorlist.refresh
        @help.refresh("Choose the first monster.")
      end
    elsif Input.trigger?(Input::C)
      if @main == -1 and @sub == -1
        Sound.play_decision
        @main = @actorlist.index
        @breedstat.refresh($game_party.members[@main].name)
        @actorlist.refresh(@main)
        @help.refresh("Choose the second monster.")
      elsif @main > -1 and @sub == -1
        if @main == @actorlist.index
          Sound.play_buzzer
        else
          Sound.play_decision
          @sub = @actorlist.index
          @actorlist.refresh(@main, @sub)
          @breedstat.refresh($game_party.members[@main].name, $game_party.members[@sub].name)
          spec = false
          for i in 0...SPECIFIC_ARRAY.length - 1
            if $game_party.members[@main].id == SPECIFIC_ARRAY[i][1] and $game_party.members[@sub].id == SPECIFIC_ARRAY[i][2]
              @breedstat.refresh($game_party.members[@main].name, $game_party.members[@sub].name, $data_actors[SPECIFIC_ARRAY[i][0]].name)
              spec = true
              break
            end
          end
          if !spec
            for i in 0...TYPE_ARRAY.length - 1
              if $game_party.members[@main].class.id == TYPE_ARRAY[i][1] and $game_party.members[@sub].class.id == TYPE_ARRAY[i][2]
                @breedstat.refresh($game_party.members[@main].name, $game_party.members[@sub].name, $data_actors[TYPE_ARRAY[i][0]].name)
                p "meron"
                break
              end
            end
          end
          @help.refresh("Proceed?")
          @actorlist.active = false
          @breedcomm.active = true
        end
      end
    end
    if @index != @actorlist.index
      @actorstat.refresh($game_party.members[@actorlist.index])
      @index = @actorlist.index
    end
  end

  def update_command_selection
    if Input.trigger?(Input::B)
      comm_cancel
    elsif Input.trigger?(Input::C)
      if @breedcomm.index == 0
        @breedcomm.active = false
        check_breedlist
      else
        comm_cancel
      end
    end
  end

  def comm_cancel
    Sound.play_cancel
    @breedcomm.index = 0
    @breedcomm.active = false
    @actorlist.active = true
    @sub = -1
    @actorlist.refresh(@main)
    @breedstat.refresh($game_party.members[@main].name)
    @help.refresh("Choose the second monster.")
  end

  def check_breedlist
    child_found = false
    for i in 0...SPECIFIC_ARRAY.length - 1
      if $game_party.members[@main].id == SPECIFIC_ARRAY[i][1] and $game_party.members[@sub].id == SPECIFIC_ARRAY[i][2]
        @result = SPECIFIC_ARRAY[i][0]
        string = "Breeding completed!"
        @win_msg = Window_Base.new((Graphics.width - Graphics.width / 3 * 2) / 2, (Graphics.height - 24) / 2, Graphics.width / 3 * 2, 56)
        @win_msg.contents.draw_text(0, 0, @win_msg.contents.width, 24, string, 1)
       
        $game_party.remove_actor(SPECIFIC_ARRAY[i][1])
        $game_party.remove_actor(SPECIFIC_ARRAY[i][2])
        $game_party.remove_actor(@result)
        @actorlist.refresh
        @actorlist.index = 0
        @actorlist.active = false
        @actorstat.refresh($game_party.members[0])
        @breedstat.refresh
        @main = @sub = -1
        child_found = true
        break
      end
    end
    if !child_found
      for i in 0...TYPE_ARRAY.length - 1
        if $game_party.members[@main].class == $data_classes[TYPE_ARRAY[i][1]] and $game_party.members[@sub].class == $data_classes[TYPE_ARRAY[i][2]]
          @result = TYPE_ARRAY[i][0]
          string = "Breeding completed!"
          @win_msg = Window_Base.new((Graphics.width - Graphics.width / 3 * 2) / 2, (Graphics.height - 24) / 2, Graphics.width / 3 * 2, 56)
          @win_msg.contents.draw_text(0, 0, @win_msg.contents.width, 24, string, 1)
         
          $game_party.remove_actor(TYPE_ARRAY[i][1])
          $game_party.remove_actor(TYPE_ARRAY[i][2])
          $game_party.add_actor(@result)
          @actorlist.refresh
          @actorlist.index = 0
          @actorlist.active = false
          @actorstat.refresh($game_party.members[0])
          @breedstat.refresh
          @main = @sub = -1
          child_found = true
          break
        end
      end
    end
    if !child_found
        string = "Breeding failed!"
        @win_msg = Window_Base.new((Graphics.width - Graphics.width / 3 * 2) / 2, (Graphics.height - 24) / 2, Graphics.width / 3 * 2, 56)
        @win_msg.contents.draw_text(0, 0, @win_msg.contents.width, 24, string, 1)
        @actorlist.refresh
        @actorlist.index = 0
        @actorlist.active = false
        @actorstat.refresh($game_party.members[0])
        @breedstat.refresh
        @main = @sub = -1

    end
  end
end

[/spoiler]

modern algebra

That looks like an interesting script. Unfortunately, I don't think I will have time to port/write such a script, but I wish you luck.

dabum

thanks, been trying to find some version of this script out there for a while now, but no luck.