Requesting VX to VX Ace Conversion: BlackMorning Job Changer

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
Figured it was a total longshot, but why not try. This is the only script that does exactly what I'm trying to do in VX Ace. Unfortunately, a version for it was never made.

 
Last edited:

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
Don't know where you would have gotten that script. Putting it into a vx project doesn't work.
Getting the files from Blackmorning site and putting those in works.
https://bmscripts.weebly.com/vx-actor-class-changer.html

As for converting it, that is a big task. If someone is familiar with both engines then someone might be able to do it.
 

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
I would be willing to settle for a Class Change script in VX Ace which doesn't do the subclass stuff. (IE: Not yanfly's)
 

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
You just need to comment out one line in yanfly's script to prevent the subclass feature.
Could you elaborate? Merely taking it out of this section still forces the user to select "Primary" before seeing classes, which looks excessive and redundant if you're not using subclasses.

upload_2019-3-7_8-33-1.png
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
Could you elaborate?
Now I understand what you want.
A few modifications will be required.
First from the picture you showed, put the # in front of subclass and learn_skill
Then change the Primary text to something else like Your trade, or whatever you want. Just keeping in mind the window width

Next go down to the bottom of the script in the Scene_Class

Here are the changes
Code:
  def start
    super
    create_help_window
    create_command_window
    create_status_window
    create_param_window
    create_item_window
    relocate_windows
    command_class_change # added in
  end
Code:
  def create_item_window
    dy = @status_window.y + @status_window.height
    @item_window = Window_ClassList.new(0, dy)
    @item_window.help_window = @help_window
    @item_window.command_window = @command_window
    @item_window.status_window = @param_window
    @item_window.viewport = @viewport
    @item_window.actor = @actor
    @command_window.item_window = @item_window
    @item_window.set_handler(:ok,     method(:on_class_ok))
    @item_window.set_handler(:cancel, method(:on_class_cancel))
    @item_window.set_handler(:pagedown, method(:next_actor)) # added in
    @item_window.set_handler(:pageup,   method(:prev_actor)) # added in
  end
Code:
  def on_actor_change
    @command_window.actor = @actor
    @status_window.actor = @actor
    @param_window.actor = @actor
    @item_window.actor = @actor
#~     @command_window.activate
    @item_window.activate # added in
  end
Code:
  def command_class_change
    @command_window.deactivate # added in
    @item_window.activate
    @item_window.select_last
  end
Code:
  def on_class_cancel
    SceneManager.return
#~     @item_window.unselect
#~     @command_window.activate
#~     @param_window.set_temp_actor(nil)
  end
Now it will go into selecting the class for the actor and exit without going to the primary command window.
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
Sort of a bump, Maybe a double post.

there is one thing to this fix that I don't know how to resolve.
upload_2019-3-10_11-1-27.png

How can you make the Class section (choose) be not highlighted?
 

A-Moonless-Night

WINTER IS COMING
Veteran
Joined
Mar 17, 2012
Messages
682
Reaction score
446
First Language
English
Primarily Uses
RMVXA
There's no way to do that without deselecting the command window, which will interfere with the item window (since it does different things depending on what is selected in the command window). I rewrote some stuff to make it so that the command window is skipped and the item window always relates to class changing (not subclass).
Code:
class Window_ClassList < Window_Selectable

  def select_last
    select(@data.index(@actor.class))
  end

  def update_param_window
    return if @last_item == item
    @last_item = item
    class_id = item.nil? ? @actor.class_id : item.id
    temp_actor = Marshal.load(Marshal.dump(@actor))
    temp_actor.temp_flag = true
    temp_actor.change_class(class_id, YEA::CLASS_SYSTEM::MAINTAIN_LEVELS)
    @status_window.set_temp_actor(temp_actor)
  end
 
end

class Scene_Class < Scene_MenuBase

  alias amn_yeaclass_sceneclass_createcmdwind create_command_window
  def create_command_window
    amn_yeaclass_sceneclass_createcmdwind
    @command_window.deactivate
    @command_window.select(-1)
  end
 
  alias amn_yeaclass_sceneclass_createitemwind  create_item_window
  def create_item_window
    amn_yeaclass_sceneclass_createitemwind
    return if $game_party.in_battle
    @item_window.set_handler(:pagedown, method(:next_actor))
    @item_window.set_handler(:pageup,   method(:prev_actor))
    @item_window.activate
    @item_window.select(0)
  end

  def on_actor_change
    @command_window.actor = @actor
    @status_window.actor = @actor
    @param_window.actor = @actor
    @item_window.actor = @actor
    @item_window.activate
  end

  def on_class_cancel
    return_scene
  end
 
  def on_class_ok
    Sound.play_equip
    class_id = @item_window.item.id
    maintain = YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
    hp = @actor.hp * 1.0 / @actor.mhp
    mp = @actor.mp * 1.0 / [@actor.mmp, 1].max
    @actor.change_class(class_id, maintain)
    @actor.hp = (@actor.mhp * hp).to_i
    @actor.mp = (@actor.mmp * mp).to_i
    @status_window.refresh
    @item_window.update_class
  end
 
end
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
Thanks @A-Moonless-Night
That pointed me to the issue I was having in my game for the same issue. (Item Scene)
The part in Window_ClassList I don't understand well yet. The parts in Scene_Class I do.
Things with Marshal.load and temp.actor. But I'll get there. Still have to finish watching those tutorials. LOL.
 

Sixth

Veteran
Veteran
Joined
Jul 4, 2014
Messages
2,162
Reaction score
823
First Language
Hungarian
Primarily Uses
RMVXA
I don't get why do you guys even leave that command window there.
I mean, if you are already editing the script, why keep a command window with just one option? It kinda destroys the purpose of a command window if there is only one command in it.
I don't think the player needs a reminder why he entered that menu, it's obvious he wants to check and choose classes, so no need to display a "Choose" line there.
In my opinion, that is. :p

Btw, you can clear the cursor in any command window even without setting it's index to -1. The index itself got nothing to do with the cursor's size/opacity, it just happens to be that when the index is set to -1, a method to clear the cursor's rect will run automatically. This doesn't mean that you can't do that manually without changing the index.
Use cursor_rect.empty, and it will make that cursor invisible.
 

A-Moonless-Night

WINTER IS COMING
Veteran
Joined
Mar 17, 2012
Messages
682
Reaction score
446
First Language
English
Primarily Uses
RMVXA
@Sixth Yeah, I would personally get rid of the command window as well and just make the status window take up the whole space.

Good to know about cursor_rect.empty! I couldn't find any information about that in the help files.
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
@A-Moonless-Night That is a good idea. I was just going with what the script had build in. Just tying to make it work the way the op wanted without rewriting the vx script. Which I tried but it was complicated and didn't work.
Both you and sixth are quite good at the ruby code, I however would not attempt that change unless it's something I wanted to do, then I might be invested.
I learn along with you A-Moonless-Night

@BaronHurfVonDurf
This should be what you need. @A-Moonless-Night I think I got it good.
Code:
class Window_ClassList < Window_Selectable

  def select_last
    select(@data.index(@actor.class))
  end

  def update_param_window
    return if @last_item == item
    @last_item = item
    class_id = item.nil? ? @actor.class_id : item.id
    temp_actor = Marshal.load(Marshal.dump(@actor))
    temp_actor.temp_flag = true
    temp_actor.change_class(class_id, YEA::CLASS_SYSTEM::MAINTAIN_LEVELS)
    @status_window.set_temp_actor(temp_actor)
  end
 
end

class Scene_Class < Scene_MenuBase

  def start
    super
    create_help_window
    create_status_window
    create_param_window
    create_item_window
    relocate_windows
  end

  #--------------------------------------------------------------------------
  # create_status_window
  #--------------------------------------------------------------------------
  def create_item_window
    dy = @status_window.y + @status_window.height
    @item_window = Window_ClassList.new(0, dy)
    @item_window.help_window = @help_window
    @item_window.command_window = @command_window
    @item_window.status_window = @param_window
    @item_window.viewport = @viewport
    @item_window.actor = @actor
    @item_window.set_handler(:ok,     method(:on_class_ok))
    @item_window.set_handler(:cancel, method(:on_class_cancel))
    @item_window.set_handler(:pagedown, method(:next_actor)) # added in
    @item_window.set_handler(:pageup,   method(:prev_actor)) # added in
    @item_window.activate
    @item_window.select_last
  end

  #--------------------------------------------------------------------------
  # create_status_window
  #--------------------------------------------------------------------------
  def create_status_window
    wy = @help_window.height
    @status_window = Window_ClassStatus.new(0, wy)
    @status_window.viewport = @viewport
    @status_window.actor = @actor
  end

  def on_actor_change
    @status_window.actor = @actor
    @param_window.actor = @actor
    @item_window.actor = @actor
    @item_window.activate # added in
  end
 
  def on_class_cancel
    SceneManager.return
  end
 
  def on_class_ok
    Sound.play_equip
    class_id = @item_window.item.id
    maintain = YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
    hp = @actor.hp * 1.0 / @actor.mhp
    mp = @actor.mp * 1.0 / [@actor.mmp, 1].max
    @actor.change_class(class_id, maintain)
    @actor.hp = (@actor.mhp * hp).to_i
    @actor.mp = (@actor.mmp * mp).to_i
    @status_window.refresh
    @item_window.update_class
  end

end

class Window_ClassStatus < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(dx, dy)
    super(dx, dy, Graphics.width, fitting_height(4))
    @actor = nil
  end
  #--------------------------------------------------------------------------
  # refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    return if @actor.nil?
    draw_actor_face(@actor, 0, 0)
    draw_actor_simple_status(@actor, Graphics.width / 3 , line_height / 2)
  end

end
 
Last edited:

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
Can you post the script in it's entirety I don't know exactly where to insert that

EDIT: LOL...is there also an easy way to change it so the SUBCLASS, not the class, is the one you select?I feel like that is closer to what I wanted with the original Blackmorning Job Changer edit.

Hate asking so much of you guys...any of you have a ko-fi or something I could tip you guys at?
 
Last edited:

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
The Blackmorning Job Changer allowed you to change class. The only difference is that the classes had levels.
Which there is a script by Tsukihime for class max level.
To have subclass is to have a main class and a subclass which is not like the Job Changer script.
 

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
The Blackmorning Job Changer allowed you to change class. The only difference is that the classes had levels.
Which there is a script by Tsukihime for class max level.
To have subclass is to have a main class and a subclass which is not like the Job Changer script.
My idea was to have an invisible, unchangeable primary class that actors would be unable to change and subclasses they could swap into - That way, levels, stats etc. would stay constant no matter what subclass they swapped into.

If @A-Moonless-Night 's Remove Command Script allowed only swapping around the subclass, that'd be perfect! :)
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
Have the Subclass on and the primary commented out.
Code:
    COMMANDS =[ # The order at which the menu items are shown.
    # [ :command,   "Display"],
    #  [ :primary,   "Primary"],
      [:subclass,  "Subclass"],
    #  [:learn_skill, "Custom"],
    # [ :custom1,   "Custom1"],
    # [ :custom2,   "Custom2"],
    ] # Do not remove this.
Code:
class Window_ClassList < Window_Selectable

  def select_last
    select(@data.index(@actor.class))
  end

  def update_param_window
    return if @last_item == item
    @last_item = item
    class_id = item.nil? ? @actor.class_id : item.id
    temp_actor = Marshal.load(Marshal.dump(@actor))
    temp_actor.temp_flag = true
    temp_actor.change_class(class_id, YEA::CLASS_SYSTEM::MAINTAIN_LEVELS)
    @status_window.set_temp_actor(temp_actor)
  end
 
end

class Scene_Class < Scene_MenuBase

  def start
    super
    create_help_window
    create_command_window
    create_status_window
    create_param_window
    create_item_window
    relocate_windows
    command_class_change # added in
  end
  #--------------------------------------------------------------------------
  # create_status_window
  #--------------------------------------------------------------------------
  def create_item_window
    dy = @status_window.y + @status_window.height
    @item_window = Window_ClassList.new(0, dy)
    @item_window.help_window = @help_window
    @item_window.command_window = @command_window
    @item_window.status_window = @param_window
    @item_window.viewport = @viewport
    @item_window.actor = @actor
    @command_window.item_window = @item_window
    @item_window.set_handler(:ok,     method(:on_class_ok))
    @item_window.set_handler(:cancel, method(:on_class_cancel))
    @item_window.set_handler(:pagedown, method(:next_actor)) # added in
    @item_window.set_handler(:pageup,   method(:prev_actor)) # added in
  end
  #--------------------------------------------------------------------------
  # create_status_window
  #--------------------------------------------------------------------------
  def create_status_window
    wy = @help_window.height
    @status_window = Window_ClassStatus.new(0, wy)
    @status_window.viewport = @viewport
    @status_window.actor = @actor
  end
  #--------------------------------------------------------------------------
  # create_command_window
  #--------------------------------------------------------------------------
  def create_command_window
    wy = @help_window.height
    @command_window = Window_ClassCommand.new(-200, wy)
    @command_window.viewport = @viewport
    @command_window.help_window = @help_window
    @command_window.actor = @actor
    @command_window.set_handler(:cancel,   method(:return_scene))
    @command_window.set_handler(:primary,  method(:command_class_change))
    @command_window.set_handler(:subclass, method(:command_class_change))
    process_custom_class_commands
    return if $game_party.in_battle
    @command_window.set_handler(:pagedown, method(:next_actor))
    @command_window.set_handler(:pageup,   method(:prev_actor))
    @command_window.set_handler(:learn_skill, method(:command_learn_skill))
  end
 
  def on_actor_change
    @command_window.actor = @actor
    @status_window.actor = @actor
    @param_window.actor = @actor
    @item_window.actor = @actor
    @item_window.activate # added in
  end
 
  def on_class_cancel
    SceneManager.return
  end
 
  def command_class_change
    @command_window.deactivate # added in
    @item_window.activate
    @item_window.select_last
  end
end

class Window_ClassStatus < Window_Base
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(dx, dy)
    super(dx, dy, Graphics.width, fitting_height(4))
    @actor = nil
  end
  #--------------------------------------------------------------------------
  # refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    return if @actor.nil?
    draw_actor_face(@actor, 0, 0)
    draw_actor_simple_status(@actor, Graphics.width / 3 , line_height / 2)
  end

end
 

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
Great, thank you! Only issue is that subclasses don't seem to be gaining EXP...
 

BaronHurfVonDurf

Villager
Member
Joined
Dec 14, 2015
Messages
16
Reaction score
1
First Language
English
Primarily Uses
Appreciate this all a bunch! Thank you! Thank you!

One last thing I would like to get squared away though - when you open up the "Class" menu, the cursor starts "above" the list of class instead of the class that was selected. See, the left is when you first pull up the list. The right is when you press down once.
upload_2019-4-13_10-29-0.png
Selecting it when it's the cursor is "above" the list crashes the game with this message.

upload_2019-4-13_10-27-1.png

If there was a way to get the cursor to start at the top of the list if there is no subclass equipped, or otherwise on the last subclass equipped...it would avoid this. Thank you.
 

Roninator2

Gamer
Veteran
Joined
May 22, 2016
Messages
2,674
Reaction score
566
First Language
English
Primarily Uses
RMVXA
you must have something else that is causing this. It does not happen in my tests.
Try disabling other scripts and see if the issue goes away.
the cursor to start at the top
What script is that error from? The name shows as "
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Profile Posts

Our latest feature is an interview with... me?!

People4_2 (Capelet off and on) added!

Just beat the last of us 2 last night and starting jedi: fallen order right now, both use unreal engine & when I say i knew 80% of jedi's buttons right away because they were the same buttons as TLOU2 its ridiculous, even the same narrow hallway crawl and barely-made-it jump they do. Unreal Engine is just big budget RPG Maker the way they make games nearly identical at its core lol.
Can someone recommend some fun story-heavy RPGs to me? Coming up with good gameplay is a nightmare! I was thinking of making some gameplay platforming-based, but that doesn't work well in RPG form*. I also was thinking of removing battles, but that would be too much like OneShot. I don't even know how to make good puzzles!
one bad plugin combo later and one of my followers is moonwalking off the screen on his own... I didn't even more yet on the new map lol.

Forum statistics

Threads
106,035
Messages
1,018,454
Members
137,821
Latest member
Capterson
Top