TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
Yanfly Free Turn Battle Bugfix
by TheTrueCyprien

 


Introduction
This script fixes some bugs in Yanfly's FTB script I discovered during testing.  If you find any other bug, you can post it here and I'll try to fix it. This also helps me as I'm using this script myself. However, it could take a while and I'll not solve compatibility related stuff.


Features
Currently known bugs that are fixed in this script:

1. If LIMITED_ACTIONS_PER_MEMBER is disabled, the party member won't change if he spent all of his own actions.


2. The game over message won't show up twice if the last living party member is killed by a counter attack or magic reflection.


3. Status window will now properly show after a troop event is executed.


4. Agi buffs and debuffs as well as ftb tags (on states) now affect enemies as well. However, I didn't get tags on enemies working (yet), so in


    order to give an enemy additional actions, you have to give him the bonus action feature or a state with ftb tags.





Script

#==============================================================================
#
# ▼ Bug Fix for Yanfly Engine Ace - Battle System Add-On: Free Turn Battle
# -- Last Updated: Dec 20, 2014
# -- Authors: TheTrueCyprien, TheoAllen, Yanfly(original script)
# -- Requires: Yanfly Engine Ace - Battle System Add-On: Free Turn Battle v1.02+
#
#==============================================================================
# ▼ Description
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script currently fixes the following bugs:
# 1. If LIMITED_ACTIONS_PER_MEMBER is disabled, the party member won't change if
# he spent all of his own actions.
# 2. If the last party member is killed by a counter attack or magic reflection,
# the game over message won't show up twice.
# 3. Status window will now properly show after troop events.
# 4. Enemies have now FTB actions as well, so AGI and FTB (de-)buffs will
# also work on them. However, you'll have to give the ftb points to them via
# bonus actions or states as I haven't managed to make notetags working for
# them.
# If you find any other bug, message me and I might take a look.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below the actual Free Turn Battle script, but above ▼ Main.
# Remember to save.
#
#==============================================================================

#==============================================================================
# ■ Game_BattlerBase
#==============================================================================

class Game_BattlerBase

#--------------------------------------------------------------------------
# new method: ftb_item_conditions_met?
#--------------------------------------------------------------------------
def ftb_item_conditions_met?(item)
return true unless SceneManager.scene_is?(Scene_Battle)
return true unless BattleManager.btype?:)ftb)
return true if BattleManager.in_turn?
return $game_party.ftb_actions_remaining >= item.ftb_cost if actor?
return $game_troop.ftb_actions_remaining >= item.ftb_cost if enemy?
end

end # Game_BattlerBase

#==============================================================================
# ■ Game_Troop
#==============================================================================

class Game_Troop < Game_Unit

#--------------------------------------------------------------------------
# new method: ftb_actions_remaining
#--------------------------------------------------------------------------
def ftb_actions_remaining
return ftb_actions_maximum - ftb_actions_used
end

#--------------------------------------------------------------------------
# new method: ftb_actions_maximum
#--------------------------------------------------------------------------
def ftb_actions_maximum
n = 0
for member in $game_troop.members
next unless member.game_battlerbase_inputable_ftb
n += member.max_ftb_actions
end
return [n, YEA::FTB::MAXIMUM_FTB_ACTIONS].min
end

#--------------------------------------------------------------------------
# new method: ftb_actions_used
#--------------------------------------------------------------------------
def ftb_actions_used
n = 0
for member in $game_troop.members
next unless member.game_battlerbase_inputable_ftb
n += member.ftb_actions
end
return n
end

end # Game_Troop

#==============================================================================
# ■ Game_Enemy
#==============================================================================

class Game_Enemy

#--------------------------------------------------------------------------
# Overwrite method: make action times
#--------------------------------------------------------------------------
def make_action_times
max_ftb_actions
end

#--------------------------------------------------------------------------
# Overwrite method: max ftb action
#--------------------------------------------------------------------------
def max_ftb_actions
n = make_ftb_action_times
n += agi_bonus_max_ftb_actions
n += trait_bonus_max_ftb_actions
return [n, 1].max
end

end

class Scene_Battle

def end_ftb_action
if $game_party.inputable?
select_next_member
else
status_redraw_target(BattleManager.actor)
BattleManager.next_command
turn_start
end
$game_troop.make_actions
end

end # Game_Enemy

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base

#--------------------------------------------------------------------------
# overwrite method: perform_ftb_action
#--------------------------------------------------------------------------
def perform_ftb_action
hide_ftb_action_windows
@subject = BattleManager.actor
item = @subject.current_action.item
execute_action
process_event
loop do
@subject.remove_current_action
break if $game_troop.all_dead?
break unless @subject.current_action
@subject.current_action.prepare
execute_action if @subject.current_action.valid?
end
return if $game_troop.alive_members.size <= 0
process_action_end
@status_window.open
consume_ftb_action(item)
@subject.make_actions
@subject = nil
show_ftb_action_windows unless $game_party.all_dead?
end

#--------------------------------------------------------------------------
# overwrite method: next_ftb_member?
#--------------------------------------------------------------------------
def next_ftb_member?(last_index)
actor = BattleManager.actor
return true if actor.nil? || !actor.movable?
return false if $game_party.ftb_actions_maximum > actor.ftb_actions && !YEA::FTB::LIMITED_ACTIONS_PER_MEMBER
return false if actor.max_ftb_actions > actor.ftb_actions
return false if BattleManager.actor.index >= last_index
return BattleManager.actor.index != last_index
end

end #Scene_Battle

#==============================================================================
#
# ▼ End of File
#
#==============================================================================



Credit and Thanks


TheTrueCyprien(optional)


TheoAllen


All credit goes to Yanfly for his awesome script!
 
Last edited by a moderator:

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
6,842
Reaction score
9,227
First Language
Indonesian
Primarily Uses
N/A
Also found some issues regarding Yanfly FTB and I managed to fix some myself.

Can I posted it here as well?
 

TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
Also found some issues regarding Yanfly FTB and I managed to fix some myself.

Can I posted it here as well?
Sure, every help is highly appreciated. The purpose of this thread is to share bug fixes with the community. And as I said, I'm using FTB myself and am happy for any bug fixed. Only a dead bug is a good bug. ;D
 

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
6,842
Reaction score
9,227
First Language
Indonesian
Primarily Uses
N/A
One thing that bothered me is the FTB Action ONLY works for actor. If the actors slowed down (e.g, by states), their FTB Action decreased. However, it won't affect enemies. If you put FTB action 2 in enemy, you will never be able to decrease the enemy FTB Action

class Game_Enemy #-------------------------------------------------------------------------- # Overwrite method: make action times #-------------------------------------------------------------------------- def make_action_times max_ftb_actions end #-------------------------------------------------------------------------- # Overwrite method: max ftb action #-------------------------------------------------------------------------- def max_ftb_actions n = make_ftb_action_times n += agi_bonus_max_ftb_actions n += trait_bonus_max_ftb_actions return [n, 1].max end endclass Scene_Battle def end_ftb_action if $game_party.inputable? select_next_member else status_redraw_target(BattleManager.actor) BattleManager.next_command $game_troop.make_actions turn_start end end # ------------------------------------------------------------------------- # Fix process event in FTB Action # ------------------------------------------------------------------------- def perform_ftb_action hide_ftb_action_windows @subject = BattleManager.actor item = @subject.current_action.item execute_action process_event loop do @subject.remove_current_action break if $game_troop.all_dead? break unless @subject.current_action @subject.current_action.prepare execute_action if @subject.current_action.valid? end return if $game_troop.alive_members.size <= 0 process_action_end @status_window.open # Just add this line ~ consume_ftb_action(item) @subject.make_actions @subject = nil show_ftb_action_windows end end
I also fix the status window to be re-opened after execute troop event.
 

TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
One thing that bothered me is the FTB Action ONLY works for actor. If the actors slowed down (e.g, by states), their FTB Action decreased. However, it won't affect enemies. If you put FTB action 2 in enemy, you will never be able to decrease the enemy FTB Action

class Game_Enemy #-------------------------------------------------------------------------- # Overwrite method: make action times #-------------------------------------------------------------------------- def make_action_times max_ftb_actions end #-------------------------------------------------------------------------- # Overwrite method: max ftb action #-------------------------------------------------------------------------- def max_ftb_actions n = make_ftb_action_times n += agi_bonus_max_ftb_actions n += trait_bonus_max_ftb_actions return [n, 1].max end endclass Scene_Battle def end_ftb_action if $game_party.inputable? select_next_member else status_redraw_target(BattleManager.actor) BattleManager.next_command $game_troop.make_actions turn_start end end # ------------------------------------------------------------------------- # Fix process event in FTB Action # ------------------------------------------------------------------------- def perform_ftb_action hide_ftb_action_windows @subject = BattleManager.actor item = @subject.current_action.item execute_action process_event loop do @subject.remove_current_action break if $game_troop.all_dead? break unless @subject.current_action @subject.current_action.prepare execute_action if @subject.current_action.valid? end return if $game_troop.alive_members.size <= 0 process_action_end @status_window.open # Just add this line ~ consume_ftb_action(item) @subject.make_actions @subject = nil show_ftb_action_windows end end
I also fix the status window to be re-opened after execute troop event.
For now I just added the status window fix. The rest doesn't seem to work for me. Am I missing something important here or could it be that you forgot something? Either way, thanks for sharing this.
 

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
6,842
Reaction score
9,227
First Language
Indonesian
Primarily Uses
N/A
Not sure either, but my patch worked in my game which used Free Turn Battle as well.

Have you put <ftb actions: -2> in state? Gave the enemy action times feature and then apply the state?
 

TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
Not sure either, but my patch worked in my game which used Free Turn Battle as well.

Have you put <ftb actions: -2> in state? Gave the enemy action times feature and then apply the state?
I did... Dunno, I'll keep on testing and messing around with stuff. I'll report back if I found something.

EDIT: I got it working! (I think) So the script was actually just calculating stuff for parties not for troops, so in addition to your enemy fix, I had to fix troops as well. Also, there was a

return true unless actor?at some point. But as I said, now it should be working. Thanks a lot for your help dude.
 
Last edited by a moderator:

TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
New Update! Enemies now have FTB actions as well which can be increased or reduced by states and agi!
 

xLegacy_

Villager
Member
Joined
Dec 1, 2014
Messages
8
Reaction score
1
First Language
German
Primarily Uses
This Add-On saves my Day.

Big Big Thanks for this Script Add-On. b°-° (<- thumps up)
 

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
6,842
Reaction score
9,227
First Language
Indonesian
Primarily Uses
N/A
Almost forgot to mention that there's an annoying glitch in YEA Battle Engine itself. If you press right you will eventually skipped the turn without doing anything. It suck indeed. I fixed that myself here http://www.theolized.com/2013/12/yea-battle-engine-turn-fix.html

Your turn can not skip until you use all the actions

Direct script link (sorry for Indonesian lang)

http://pastebin.com/raw.php?i=zjyzMTx5

It works well with FTB, but doesn't work well with default turn

So I guess, this is FTB stuff
 

VHStapes

Game Designer
Veteran
Joined
May 25, 2014
Messages
57
Reaction score
7
First Language
English
Thanks so much for the add-on to give enemies turns as well! Just one question - is there a way to give a monster multiple ftb actions (and have it use them)? I have a boss that I gave 100 AGI to try to increase its turns, and put <ftb actions: +1> in its enemy notes, and it still only attacks once per turn. This isn't the end of the world but I would love to be able to design bosses that attacked multiple times.

If anyone wants a bigger project to help out on, ideally I'd like to rewrite the FTB script so that number of turns isn't based on AGI, just on hard pluses from skills or items, for both player characters and enemies. Also I'd like FTB turns to not get dropped if one of the characters is stunned (so you would still have a turn to use, you just couldn't use that character). At that point I could drop AGI from my game entirely (which I'd like to do) which may require some other rewriting. I can write java pretty well but I haven't quite delved in to Ruby so some help here would be great.

Thanks again!! This rules as is so no worries if what I'm wanting isn't possible :)
 

TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
Thanks so much for the add-on to give enemies turns as well! Just one question - is there a way to give a monster multiple ftb actions (and have it use them)? I have a boss that I gave 100 AGI to try to increase its turns, and put <ftb actions: +1> in its enemy notes, and it still only attacks once per turn. This isn't the end of the world but I would love to be able to design bosses that attacked multiple times.

If anyone wants a bigger project to help out on, ideally I'd like to rewrite the FTB script so that number of turns isn't based on AGI, just on hard pluses from skills or items, for both player characters and enemies. Also I'd like FTB turns to not get dropped if one of the characters is stunned (so you would still have a turn to use, you just couldn't use that character). At that point I could drop AGI from my game entirely (which I'd like to do) which may require some other rewriting. I can write java pretty well but I haven't quite delved in to Ruby so some help here would be great.

Thanks again!! This rules as is so no worries if what I'm wanting isn't possible :)
Thank you, if I remember correctly, you can give monsters additional actions with either states that have ftb tags on them or just give them the standard bonus actions. Didn't get the notes to work on monsters as I don't have that much knowlegde of ruby either. Haven't looked into this for quite some time though as I was busy with studies + pretty lazy when I had free time.

Might work on it again after this week when exams are done if I find the time and motivation. There are still some things I'd like to add for my own project.
 

VHStapes

Game Designer
Veteran
Joined
May 25, 2014
Messages
57
Reaction score
7
First Language
English
Thank you, if I remember correctly, you can give monsters additional actions with either states that have ftb tags on them or just give them the standard bonus actions. Didn't get the notes to work on monsters as I don't have that much knowlegde of ruby either. Haven't looked into this for quite some time though as I was busy with studies + pretty lazy when I had free time.

Might work on it again after this week when exams are done if I find the time and motivation. There are still some things I'd like to add for my own project.
You're right! I was being a noob and somehow skimmed over the note on states to give ftb actions to monsters. It works like a charm :) oh the boss battles in my game just got so much harder (like they were supposed to be). The workaround I was using before (making bosses insanely strong because they only hit 1/4 of the time your team does) was clunky at best and hard to balance.

If you want someone to work with on modifying this script at a casual pace feel free to PM me or we can just use this topic. I'd love to start delving into ruby a little more so I can tighten up some other loose ends in how my game plays before releasing the demo. By "casual pace" I mean laziness is a valid excuse (as well as school of course). I have a wife and 3 year old so my free time is limited and often not as a "free" as the name implies ;)
 

Ganches

Warper
Member
Joined
Aug 29, 2014
Messages
2
Reaction score
1
First Language
Swedish
Primarily Uses
I know I'm gonna come across like an absolute idiot here but....


How do I even copy over that script? I've been using public scripts for years and never had an issue just copy pasting them, but


this one appears in a straight line and can't be copied over like that.


What am I doing wrong?
 

TheTrueCyprien

Multipurpose Dude
Veteran
Joined
Jan 23, 2014
Messages
42
Reaction score
12
First Language
German
Primarily Uses
I know I'm gonna come across like an absolute idiot here but....


How do I even copy over that script? I've been using public scripts for years and never had an issue just copy pasting them, but


this one appears in a straight line and can't be copied over like that.


What am I doing wrong?

Well, it seems my formatting got hosed over by a design update. Everything should be back to normal now.
 

Tamsyn548

️‍⚧️ Proudly trans! ️‍⚧️ (she/her)
Veteran
Joined
Nov 10, 2016
Messages
2,533
Reaction score
4,860
First Language
English
Primarily Uses
RMVXA
#==============================================================================
#
# ▼ Bug Fix for Yanfly Engine Ace - Battle System Add-On: Free Turn Battle
# -- Last Updated: Dec 20, 2014
# -- Authors: TheTrueCyprien, TheoAllen, Yanfly(original script)
# -- Requires: Yanfly Engine Ace - Battle System Add-On: Free Turn Battle v1.02+
#
#==============================================================================
# ▼ Description
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script currently fixes the following bugs:
# 1. If LIMITED_ACTIONS_PER_MEMBER is disabled, the party member won't change if
# he spent all of his own actions.
# 2. If the last party member is killed by a counter attack or magic reflection,
# the game over message won't show up twice.
# 3. Status window will now properly show after troop events.
# 4. Enemies have now FTB actions as well, so AGI and FTB (de-)buffs will
# also work on them. However, you'll have to give the ftb points to them via
# bonus actions or states as I haven't managed to make notetags working for
# them.
# If you find any other bug, message me and I might take a look.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below the actual Free Turn Battle script, but above ▼ Main.
# Remember to save.
#
#==============================================================================

#==============================================================================
# ■ Game_BattlerBase
#==============================================================================

class Game_BattlerBase

#--------------------------------------------------------------------------
# new method: ftb_item_conditions_met?
#--------------------------------------------------------------------------
def ftb_item_conditions_met?(item)
return true unless SceneManager.scene_is?(Scene_Battle)
return true unless BattleManager.btype?:ftb
return true if BattleManager.in_turn?
return $game_party.ftb_actions_remaining >= item.ftb_cost if actor?
return $game_troop.ftb_actions_remaining >= item.ftb_cost if enemy?
end

end # Game_BattlerBase

#==============================================================================
# ■ Game_Troop
#==============================================================================

class Game_Troop < Game_Unit

#--------------------------------------------------------------------------
# new method: ftb_actions_remaining
#--------------------------------------------------------------------------
def ftb_actions_remaining
return ftb_actions_maximum - ftb_actions_used
end

#--------------------------------------------------------------------------
# new method: ftb_actions_maximum
#--------------------------------------------------------------------------
def ftb_actions_maximum
n = 0
for member in $game_troop.members
next unless member.game_battlerbase_inputable_ftb
n += member.max_ftb_actions
end
return [n, YEA::FTB::MAXIMUM_FTB_ACTIONS].min
end

#--------------------------------------------------------------------------
# new method: ftb_actions_used
#--------------------------------------------------------------------------
def ftb_actions_used
n = 0
for member in $game_troop.members
next unless member.game_battlerbase_inputable_ftb
n += member.ftb_actions
end
return n
end

end # Game_Troop

#==============================================================================
# ■ Game_Enemy
#==============================================================================

class Game_Enemy

#--------------------------------------------------------------------------
# Overwrite method: make action times
#--------------------------------------------------------------------------
def make_action_times
max_ftb_actions
end

#--------------------------------------------------------------------------
# Overwrite method: max ftb action
#--------------------------------------------------------------------------
def max_ftb_actions
n = make_ftb_action_times
n += agi_bonus_max_ftb_actions
n += trait_bonus_max_ftb_actions
return [n, 1].max
end

end

class Scene_Battle

def end_ftb_action
if $game_party.inputable?
select_next_member
else
status_redraw_target(BattleManager.actor)
BattleManager.next_command
turn_start
end
$game_troop.make_actions
end

end # Game_Enemy

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base

#--------------------------------------------------------------------------
# overwrite method: perform_ftb_action
#--------------------------------------------------------------------------
def perform_ftb_action
hide_ftb_action_windows
@subject = BattleManager.actor
item = @subject.current_action.item
execute_action
process_event
loop do
@subject.remove_current_action
break if $game_troop.all_dead?
break unless @subject.current_action
@subject.current_action.prepare
execute_action if @subject.current_action.valid?
end
return if $game_troop.alive_members.size <= 0
process_action_end
@status_window.open
consume_ftb_action(item)
@subject.make_actions
@subject = nil
show_ftb_action_windows unless $game_party.all_dead?
end

#--------------------------------------------------------------------------
# overwrite method: next_ftb_member?
#--------------------------------------------------------------------------
def next_ftb_member?(last_index)
actor = BattleManager.actor
return true if actor.nil? || !actor.movable?
return false if $game_party.ftb_actions_maximum > actor.ftb_actions && !YEA::FTB::LIMITED_ACTIONS_PER_MEMBER
return false if actor.max_ftb_actions > actor.ftb_actions
return false if BattleManager.actor.index >= last_index
return BattleManager.actor.index != last_index
end

end #Scene_Battle

#==============================================================================
#
# ▼ End of File
#
#==============================================================================
I found an error in the script and fixed it. Tell me if it does not work.
 

Latest Threads

Latest Profile Posts

I'm having a surprisingly easy time with the wait for Hogwarts Legacy, though I know other gamers are salivating hard.
:awat:What are you two down there doing?
This status is here just to take up space. And to make you read that.
Commenting just for the sake of commenting. :biggrin:
Just... two more to go...
dylan kickstaeter.png

Forum statistics

Threads
124,357
Messages
1,162,988
Members
163,147
Latest member
mayasmith7464
Top