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]
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.
thanks, been trying to find some version of this script out there for a while now, but no luck.